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.
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"
}'
{
"data": {
"assessment": "caution",
"checks": {
"company_number": { "result": "match" },
"email": { "result": "not_on_record" },
"website": { "result": "lookalike" }
}
},
"meta": { "reference": "chk_01J8EXAMPLE" }
}
Three steps, one flow.
Find the company, check what you were told, and keep the reference.
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.
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.
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.
Built for the checks you already do by hand.
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.
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.
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.
An assessment, and the reasons for it.
The overall assessment tells you where to look. The result for each detail tells you why.
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.
{
"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"
}
}
| Result | What it means |
|---|---|
| match | The value you sent is the one on the company’s record. |
| mismatch | The record holds a different value. |
| not_on_record | We hold nothing to compare it with. That is a gap in our records, not a finding about the company. |
| verified | Our team has confirmed this detail for the company. |
| same_domain | The email or website uses the company’s own domain. |
| lookalike | The domain looks very like the company’s own, but is not the same. |
| known_fake | The value is on our list of known fraudulent contact details. |
| none_exists | The company is recorded as having no such detail, for example no public registry number. |
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 →{
"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"
}
}
| Outcome | Warning | What 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. |
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.
Endpoints, fields and limits.
Endpoints
| Method | Path | Permission | What 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
| Field | Rule | Notes |
|---|---|---|
| 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)
| Field | Rule | Notes |
|---|---|---|
| company_number | Up to 32 characters | The registry number you were given. |
| 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
| Field | Rule | Notes |
|---|---|---|
| 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. |
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.
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.
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.
Start in a few minutes.
- 1Create an ExporterIQ account and subscribe. API access is for subscribed accounts.
- 2Open Dashboard, API Access, and create a token with the permissions you need.
- 3Send your first match call. The quick start above has the request.
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.