Batch verify
Verify up to 100 companies in one synchronous call, with per-item results and errors.
- $0.01 per verified company
- No contract
- Straight from the register
69 jurisdictions covered across official registers
Sample regions: United Kingdom, France, Germany, Sweden, Belgium, Brazil, Colombia, Argentina, California, Japan, Australia, Singapore- 5567370431verifiedactive
- 0000000000not_foundno company
What it does
One call for a whole book
Send a list of companies to check, for example a customer book to re-verify or a vendor list from a spreadsheet. A batch of up to 100 items returns in the response, with a result for each item.
- Up to 100 items per call
- Per-item results and errors
- Billed per item, like single verifies
Matched
Matched
Review
Control
Know the cost before you send it
Each item is priced like a single verify, and the starter allowance applies across the whole batch. The same company is billed at most once a day across every endpoint, so re-checking a book with the same items does not multiply your bill.
- Per-item pricing, same as verify
- Free tier applies to the whole batch
- Daily dedup per company
09:00 · Company lookup
Billed once16:00 · Re-check
Already counted
Integrate
One call. Set your base URL and key once: they work for every endpoint on the platform.
# All endpoints share one base URL and key. Set them once:
export API_BASE="https://api.corpoapi.com"
export API_KEY="ck_live_..." # or ck_test_... to return fixtures and never bill
curl -X POST "$API_BASE/v1/verify/batch" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "items": [ { "jurisdiction": "se", "company_number": "5567370431" }, { "jurisdiction": "se", "company_number": "0000000000" } ] }'Ship
Paste into Claude Code, Cursor, Codex, or any coding agent. It is already filled for the Batch verify endpoint: set <my_stack> and your API key, and everything else stays exactly as written.
# Corpo API Batch verify: integrate in 5 minutes
You are integrating Corpo API's Batch verify endpoint into <my_stack>.
Follow these steps exactly. Every URL, header, and value below is canonical.
Do not paraphrase or "improve" them.
## 1. Provision an account
- Sign up: https://app.corpoapi.com (no credit card required).
- Or set credentials you already have:
export API_BASE="https://api.corpoapi.com"
export API_KEY="ck_live_..."
## 2. Make the call
POST $API_BASE/v1/verify/batch
Auth header: X-API-Key: ck_live_... (use ck_test_... for fixtures; test calls are never billed)
Body: { "items": [ { "jurisdiction": "se", "company_number": "5567370431" }, { "jurisdiction": "se", "company_number": "0000000000" } ] }
Response: Per-item results and errors for up to 100 items, returned synchronously in the HTTP response.
## 3. Handle the result
- 200: use the JSON response described above.
- On error, branch on the stable `error` field, never the message text.
- 429 = rate limited (back off and retry). 401 = invalid key. 422 = malformed body.
- Webhook / async: none. Batches return synchronously in the HTTP response.
## 4. Hard rules, do not change
- Base URL is $API_BASE (set above). Do not invent other hosts.
- Auth header is `X-API-Key` (exact casing).
- Read the full reference before writing code: https://docs.corpoapi.com
## 5. Pricing (public)
- Per-call pricing is published at https://corpoapi.com/pricing.md. Read it there; do not hardcode a rate.
When in doubt: https://docs.corpoapi.comAPI reference
Batch verify takes one request and returns one JSON document. The response below came from the live API, not a mock.
POST /v1/verify/batch with { "items": [ { "jurisdiction": "se", "company_number": "5567370431" }, { "jurisdiction": "se", "company_number": "0000000000" } ] }
Sample response
Example response. Source metadata omitted for clarity.
{
"id": "job_01M52TPX5N4CCZGEZ1ZCT0D6QM",
"status": "completed",
"created_at": "2026-10-16T17:03:46.721810Z",
"completed_at": "2026-10-16T17:03:46.869022Z",
"counts": {
"total": 2,
"done": 2,
"verified": 1,
"partial": 0,
"mismatch": 0,
"not_found": 1,
"ambiguous": 0,
"errors": 0
},
"charge_usd": "0.00",
"results": [
{
"index": 0,
"result": {
"result": "verified",
"company": {
"id": "co_sea81b5ad3d15a050b79a96d8b",
"jurisdiction": "se",
"company_number": "5567370431",
"legal_name": "Klarna Bank AB",
"display_name": null,
"name_translit": "Klarna Bank AB",
"legal_form": {
"code": "AB-ORGFO",
"elf_code": "se_aktiebolag",
"label": "Aktiebolag"
},
"status": "active",
"status_date": null,
"registration_date": "1930-11-24",
"dissolution_date": null,
"address": {
"line1": "ARSC, DC24000",
"city": "GÖTEBORG",
"postcode": "40508",
"region": null,
"country": "SE",
"raw": "ARSC, DC24000 GÖTEBORG 40508 SE-LAND"
},
"officers_availability": "gated",
"identifiers": [
{
"scheme": "SE-ORGNR",
"value": "5567370431",
"is_primary": true,
"valid_check": true
},
{
"scheme": "EU-VAT",
"value": "SE556737043101",
"is_primary": false,
"valid_check": true
}
],
"other_names": [
{
"name": "Klarna Bank AB",
"kind": "translated",
"start_date": "1998-02-12",
"end_date": null
}
],
"activities": [
{
"scheme": "SNI-2025",
"code": "70200",
"description": null,
"is_primary": true
},
{
"scheme": "SNI-2025",
"code": "78100",
"description": null,
"is_primary": false
},
{
"scheme": "SNI-2025",
"code": "85594",
"description": null,
"is_primary": false
}
],
"officers": []
},
"candidates": [],
"checks": [],
"reference": null
},
"error": null
},
{
"index": 1,
"result": {
"result": "not_found",
"company": null,
"candidates": [],
"checks": [],
"reference": null
},
"error": null
}
],
"pagination": {
"limit": 2,
"next_cursor": null,
"has_more": false,
"total_estimate": 2,
"returned": 2
}
}
Price per call
$0.01
per verified company. Per item, priced like a single verify. First 100 starter calls are free.
See every priceErrors
| Status | Code | When |
|---|---|---|
| 413 | batch_too_large | More than 100 items were sent. A synchronous batch takes up to 100 items. |
| 422 | invalid_parameter | An item is missing its jurisdiction or fails validation. |
| 429 | rate_limited | A rate limit window is exceeded. A batch counts as one request. |
| 402 | free_tier_exhausted | The free tier is used up and no payment method is set. |
Rate limits
- Free: 5 requests per second, 100 per minute.
- Paying: 50 requests per second, 2,000 per minute.
- Limits are per key, on a fixed 1-second window and a 1-minute window.
- Exceeding either window returns 429 with a Retry-After header in seconds.
- A batch call counts as one request, however many items it carries.
Simple by design
69
Jurisdictions covered
$0.01
Per verified company
1 schema
Consistent company data
Transparent pricing
Pay-as-you go, 1 cent per company, forever.
100 free calls to get started, then $0.01 per verified company. No subscription.
Pay as you go
Usage
Pay as you go · No contract
100 free
starter calls · No card
Everything included
- 100 free calls to get started
- Search, coverage and usage are always free
- Failed and ambiguous lookups are never billed
- REST API and hosted MCP server
Failed and ambiguous lookups are never billed, and the same company is billed at most once a day.
FAQ