EmailmoversMyDataHub docs
Browse the docs

Reference / REST reference

Reference

Look up a company

POST /v1/companies/lookup. Companies House fields for one company, by number, domain or name, and for signed-in callers the contacts we hold there by job level (a single company count needs an account and is logged; signed out, the counts are null).

Generated from the contractsView as Markdown

POST /v1/companies/lookup

Companies House fields for one company, by number, domain or name, and for signed-in callers the contacts we hold there by job level (a single company count needs an account and is logged; signed out, the counts are null). No contact details, and no charge (to confirm).

PropertyValue
EndpointPOST https://mydatahub.emailmovers.com/v1/companies/lookup
Operation idlookupCompany
CostFree (0 credits)
AccessNo account needed. An API key or OAuth token with the scope counts:read is optional and adds your organisation's own figures.
MCP toollookup_company
TagLookups

Request

Parameters

NameInTypeRequiredDescription
MyDataHub-VersionheaderstringnoThe dated API version, pinned per key when left out. Non-breaking changes ship as new dates; the path major changes only for breaking changes, with a 12 month deprecation window.

Body

MemberTypeRequiredDescription
company_numberstringnoEight characters in upper case, such as 05046417 or SC123456.
domainstringno
namestringno
townstringnoNarrows a name search.

Example request

curl -X POST "https://mydatahub.emailmovers.com/v1/companies/lookup" \
  -H "Content-Type: application/json" \
  --data '{
  "company_number": "12345678"
}'

Responses

200: The company.

Headers: RateLimit, RateLimit-Policy.

MemberTypeAlways presentDescription
match_confidencenumber (0 to 1)yes
dataset_versionstringyesThe immutable weekly build a count is bound to, such as 2026-W39. The last 52 stay queryable.
companyobjectyes
company.companies_house_numberstring or nullyes
company.namestringyes
company.statusstringyes
company.typestringyes
company.subscriber_classenum: ltd, plc, llp, scottish_partnership, public_body, charity_incorporated, sole_trader, ordinary_partnership, and 1 moreyes
company.incorporation_datestring (date) or nullyes
company.sic_2007array of SicCodeyes
company.employee_bandstring or nullyes
company.turnover_bandstring or nullyes
company.website_domainstring or nullyes
company.registered_officeobjectyes
contacts_heldinteger (0 or more) or under 10 or suppressed or nullyesContacts we hold at the company: a single-company count, so signed-in callers only (null otherwise) and logged. Trial callers see it rounded.
contacts_by_levelarray of LevelCount or nullyesThe same count by job level, most senior first, with Level not known last; null when signed out.
contacts_by_level[].levelstringyes
contacts_by_level[].contactsinteger (0 or more) or under 10 or suppressedyesA whole number; "under 10" when disclosure control withholds a small cell; or "suppressed" when secondary suppression hides a cell of 10 or more in a cross-tab or breakdown, so totals cannot be differenced. Anonymous and trial callers see cells rounded to the nearest 5.
disclosureDisclosureyesWhether these numbers are exact or protected: "under 10" cells, rounding to 5 and secondary suppression for anonymous and trial callers.
disclosure.levelenum: exact, roundedyesexact for authenticated paid callers; rounded for anonymous and trial callers, whose counts under 100 and every cell are rounded to the nearest 5.
disclosure.rounded_tointeger or nullyes5 when numbers are rounded; null when they are exact.
disclosure.secondary_suppressionbooleanyesTrue when cross-tab or breakdown cells of 10 or more were hidden as "suppressed" so totals cannot be differenced.
disclosure.notesarray of stringyes
complianceCompanyComplianceyesThe company facts of the compliance object, for results with no contact.
compliance.lawful_basisenum: legitimate_interests_art6_1_fyes
compliance.subscriber_classenum: ltd, plc, llp, scottish_partnership, public_body, charity_incorporated, sole_trader, ordinary_partnership, and 1 moreyes
compliance.corporate_subscriberbooleanyes
compliance.email_marketing_basisenum: pecr_corporate_subscriber, consent_requiredyes
compliance.subscriber_evidenceobjectyes
compliance.provenanceobjectyes
compliance.attributionstring or nullyes
credits_charged0yes

Example response

{
  "match_confidence": 1,
  "dataset_version": "2026-W39",
  "company": {
    "companies_house_number": "12345678",
    "name": "Example Manufacturing Ltd",
    "status": "active",
    "type": "ltd",
    "subscriber_class": "ltd",
    "incorporation_date": "2004-02-19",
    "sic_2007": [
      {
        "code": "25620",
        "label": "Machining"
      }
    ],
    "employee_band": "100-199",
    "turnover_band": "11M-20M",
    "website_domain": "example.co.uk",
    "registered_office": {
      "town": "Leeds",
      "postcode": "LS11 5AA"
    }
  },
  "contacts_held": 14,
  "contacts_by_level": [
    {
      "level": "Director",
      "contacts": 3
    },
    {
      "level": "Manager",
      "contacts": 6
    }
  ],
  "compliance": {
    "lawful_basis": "legitimate_interests_art6_1_f",
    "subscriber_class": "ltd",
    "corporate_subscriber": true,
    "email_marketing_basis": "pecr_corporate_subscriber",
    "subscriber_evidence": {
      "companies_house_number": "12345678",
      "company_type": "ltd"
    },
    "provenance": {
      "company": {
        "source": "companies_house",
        "as_of": "2026-09-21"
      }
    },
    "attribution": "Contains public sector information licensed under the Open Government Licence v3.0"
  },
  "disclosure": {
    "level": "exact",
    "rounded_to": null,
    "secondary_suppression": false,
    "notes": []
  },
  "credits_charged": 0
}

Errors

Every error is a problem object with a code and a next_step. Every response carries the RateLimit and RateLimit-Policy headers; see Rate limits.

StatusProblem codesWhen
400invalid-request, idempotency-key-required, unsupported-versionThe request could not be read, or an Idempotency-Key is missing.
401authentication-required, account-requiredSign in (OAuth) or send an API key (authentication-required), or create a free account for what the anonymous tier does not cover (account-required).
422validation-failed, quote-required, dataset-unavailableThe request is not valid. errors lists every problem with a JSON pointer and did_you_mean.
429rate-limitedToo many requests. Wait for Retry-After.
Any other failureinternal-error, service-unavailable, tps-screen-expiredSomething failed on our side (500 internal-error) or the service is briefly unavailable (503 service-unavailable, with Retry-After). Nothing was charged; retry with the same Idempotency-Key. A count, sample, quote or order with telephone in play is also refused with 503 tps-screen-expired, with no Retry-After, while the dataset version's TPS and CTPS screen is more than 28 days old.