Skip to content
EIQ
ExporterIQ API

Check a counterparty in one call.

Match a name to the right company, then check the contact details someone gave you against our records. For onboarding, supplier vetting and trade finance.

Get API access See it work
131,719 companies 37 countries 121 verified by our team JSON over HTTPS
Verify a company
curl -X POST https://exporteriq.com/api/v1/companies/COMPANY_ID/verify \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "company_number": "01234567",
    "email": "accounts@example-trading.co.uk",
    "phone": "+44 20 7946 0000",
    "website": "example-trading.co.uk"
  }'
ResponseExample
{
  "data": {
    "assessment": "caution",
    "checks": {
      "company_number": { "result": "match" },
      "email": { "result": "not_on_record" },
      "website": { "result": "lookalike" }
    }
  },
  "meta": { "reference": "chk_01J8EXAMPLE" }
}
How it works

Three steps, one flow.

Find the company, check what you were told, and keep the reference.

1

Match

Send a name, and optionally a country, registry number or website. We return the company records that fit, so you have the right company before you check anything.

2

Verify

Send the registry number, email, phone or website you were given. Each one gets its own result, and the call returns an overall assessment: consistent, caution or high risk.

3

Keep the reference

Every verification is saved under a reference. Retrieve it later for your file, for 12 months. Only you can see your own checks.

Starting from a detail instead of a name? Look up a contact.

Who it is for

Built for the checks you already do by hand.

Banks and compliance teams

Business onboarding

Match the applicant to a company record, then check the registration number, email, phone and website they supplied. Keep the check reference in the case file.

matchverifylookupchecks
Marketplaces and fintechs

Seller and payout checks

Check a new seller’s details automatically at sign-up, and flag lookalike domains or known fake contacts before any money moves.

lookupmatchverify
Freight and trade-finance firms

Counterparty checks

Before you ship, finance or insure, check the buyer or supplier’s contact details against the company’s record, and keep the reference with the deal.

lookupverifychecks
What you get back

An assessment, and the reasons for it.

The overall assessment tells you where to look. The result for each detail tells you why.

consistent  What you sent fits our record.
caution  At least one detail needs a second look.
high_risk  A serious warning sign was found.

The response also says what the company’s verification rests on (what our team checked, and when), and the saved reference with the date it will be kept until.

Verify responseExample, abridged
{
  "data": {
    "assessment": "caution",
    "company": { "name": "Example Trading Ltd" },
    "checks": {
      "company_number": { "result": "match" },
      "email": { "result": "not_on_record" },
      "website": { "result": "lookalike" }
    },
    "verification": {
      "status": "verified",
      "basis_recorded": true,
      "last_reviewed": "2026-09-30",
      "basis": ["registry", "website", "address"]
    }
  },
  "meta": {
    "reference": "chk_01J8EXAMPLE",
    "checked_at": "2026-10-05T14:30:00Z",
    "retained_until": "2027-10-05T14:30:00Z"
  }
}
ResultWhat it means
matchThe value you sent is the one on the company’s record.
mismatchThe record holds a different value.
not_on_recordWe hold nothing to compare it with. That is a gap in our records, not a finding about the company.
verifiedOur team has confirmed this detail for the company.
same_domainThe email or website uses the company’s own domain.
lookalikeThe domain looks very like the company’s own, but is not the same.
known_fakeThe value is on our list of known fraudulent contact details.
none_existsThe company is recorded as having no such detail, for example no public registry number.
Start from the detail

Do not know the company? Look up the contact.

Send an email address, a phone number with its international code, a website or a registry number. We find the company it belongs to, warn you about lookalikes and known fakes, or tell you plainly that we have no match.

Only exact matches are returned, never a list of near-misses. Each lookup is saved under a reference, like a check, and kept for 12 months.

Try it in your browser →
Lookup responseExample, abridged
{
  "data": {
    "outcome": "match",
    "warning": false,
    "type": "email",
    "query": {
      "value": "accounts@example-trading.co.uk",
      "normalized": "accounts@example-trading.co.uk"
    },
    "message": "This email address is on record for Example Trading Ltd. Example Trading Ltd is verified by ExporterIQ.",
    "companies": [
      {
        "id": 12345,
        "name": "Example Trading Ltd",
        "country": "United Kingdom",
        "city": "London",
        "verified": true,
        "profile_url": "https://exporteriq.com/company/example-trading-ltd",
        "verification": {
          "basis": ["Company registry record"],
          "last_reviewed": "2026-09-30"
        }
      }
    ]
  },
  "meta": {
    "reference": "lkp_01j8example",
    "checked_at": "2026-10-06T09:15:00Z",
    "retained_until": "2027-10-06T09:15:00Z"
  }
}
OutcomeWarningWhat it means
match false The detail is on record for a company. The company is returned, with whether our team has verified it and what that rests on.
registry_match false The registry number belongs to a registered company on ExporterIQ.
same_domain true The email or website uses a company’s own domain, but this exact detail is not on record for it.
lookalike true The domain imitates the domain of a verified company. That company is returned.
known_fake true Our team has recorded this detail as used to impersonate a company. That company is returned.
no_match false We hold no company with this detail. Treat it as unconfirmed.
Quick start

From token to first check.

Create a token in your dashboard, then send it with every request as a bearer token. The base address is https://exporteriq.com/api/v1.

curl -X POST https://exporteriq.com/api/v1/companies/match \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name": "Example Trading Ltd", "country": "United Kingdom"}'
curl -X POST https://exporteriq.com/api/v1/companies/COMPANY_ID/verify \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "company_number": "01234567",
    "email": "accounts@example-trading.co.uk",
    "phone": "+44 20 7946 0000",
    "website": "example-trading.co.uk"
  }'
curl -X POST https://exporteriq.com/api/v1/contacts/lookup \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"value": "accounts@example-trading.co.uk"}'
curl https://exporteriq.com/api/v1/checks/chk_YOUR_REFERENCE \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"

The values above are examples. Replace YOUR_TOKEN with your token, and COMPANY_ID with the id of the company returned by the match call.

Reference

Endpoints, fields and limits.

Endpoints

MethodPathPermissionWhat it does
POST /api/v1/companies/match companies:read Find the right company for a name.
POST /api/v1/companies/{company}/verify companies:verify Check details you were given against that company’s record. Saves the result under a reference.
GET /api/v1/checks companies:verify List your own saved checks.
GET /api/v1/checks/{reference} companies:verify Retrieve one saved check by its reference.
POST /api/v1/contacts/lookup companies:verify Start from an email, phone, website or registry number: find the company it belongs to, get a warning, or get no match. Saved under a reference.
GET /api/v1/contacts/lookups companies:verify List your own saved lookups.
GET /api/v1/contacts/lookups/{reference} companies:verify Retrieve one saved lookup by its reference.
POST /api/v1/onboarding onboarding:manage Open an onboarding case for a company. Keeps the risk rating and shipment facts as they are today. Returns the open case if you already have one.
GET /api/v1/onboarding onboarding:manage List your own onboarding cases. Filter with status.
GET /api/v1/onboarding/{reference} onboarding:manage One case: the facts at the start, the facts now, what changed, and the activity trail.
POST /api/v1/onboarding/{reference}/status onboarding:manage Set the status. Approved and rejected need a reason.
POST /api/v1/onboarding/{reference}/notes onboarding:manage Add a note to the case.
GET /api/v1/pipeline pipeline:read Read your own pipeline.

Match: request fields

FieldRuleNotes
name
Required
2 to 255 characters The company name as you have it.
country
Optional
Up to 100 characters Narrows the match to one country.
company_number
Optional
Up to 32 characters The registry number, if you have it.
website
Optional
Up to 255 characters The company website or domain.

Verify: request fields (all optional)

FieldRuleNotes
company_number Up to 32 characters The registry number you were given.
email A valid email address, up to 255 characters The email address you were given.
phone Digits, spaces and + ( ) - . / only, up to 40 characters The phone number you were given.
website Up to 255 characters The website or domain you were given.

Send only what you were given. A detail you leave out is simply not checked.

Lookup: request fields

FieldRuleNotes
value
Required
Up to 255 characters An email address, a phone number with its international code (+44 or 0044), a website, or a company registry number.
type
Optional
email, phone, website or company_number Say what the value is when it could be read two ways, for example a phone number written without its country code.
Authentication

Bearer token

Create a token under Dashboard, API Access, and choose its permissions. Send it as Authorization: Bearer, and add Accept: application/json so errors come back as JSON.

Limits

60 a minute, 5,000 a day

These are the default limits for each token. A request over the limit is refused until the window resets. A field that fails the rules above returns a validation error.

Privacy

Kept 12 months

Saved checks, lookups and call logs are kept for 12 months. Calls are logged without their query strings, and you see only your own checks.

Getting access

Start in a few minutes.

  1. 1Create an ExporterIQ account and subscribe. API access is for subscribed accounts.
  2. 2Open Dashboard, API Access, and create a token with the permissions you need.
  3. 3Send your first match call. The quick start above has the request.
Get API access See pricing
Questions

Before you build.

What does a check give me?

A clear, evidence-backed answer. For each detail you send, you see whether it matches the company’s record, differs from it, or cannot be confirmed. You also get an overall assessment, whether our team has verified the company, and what that verification rests on. Every check is saved under a reference and a date, so you can show exactly what you checked and when.

How does this give me assurance?

You stop relying on what a counterparty tells you. The registry number, email, phone and website they gave you are tested against the record ExporterIQ holds, and a mismatch, a lookalike domain or a known fake contact is flagged straight away. The saved check is your evidence for the file, for your team and for an audit.

What does "not on record" mean?

It means we hold no value for that detail, so we cannot confirm it. Treat it as unconfirmed: ask the counterparty for proof, or check it another way. It does not mean the detail is false.

How long are results kept?

Each check and each lookup is saved under its reference and kept for 12 months, and you can retrieve it in that time. Only you can see your own saved checks.

What happens at the rate limit?

The default limits are 60 requests a minute and 5,000 a day for each token. A request over the limit is refused until the window resets. If your use needs more, contact us.

What do you log?

Each call is logged with the token, the path, the status, how long it took and the IP address. Query strings are not logged.

Something else? Contact us.