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
Batch response
POST /v1/verify/batchJob completed
  • 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
Review a company list
Acme Studio Ltd

Matched

Example Works Ltd

Matched

Sample Trading Ltd

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
One company, one daily charge
One company today$0.01
  1. 09:00 · Company lookup

    Billed once
  2. 16:00 · Re-check

    Already counted

Integrate

One call. Set your base URL and key once: they work for every endpoint on the platform.

terminal: batch-verify
# 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-integration-prompt.md
# 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.com

API 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.

batch-verify.json
{
  "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 price

Errors

StatusCodeWhen
413batch_too_largeMore than 100 items were sent. A synchronous batch takes up to 100 items.
422invalid_parameterAn item is missing its jurisdiction or fails validation.
429rate_limitedA rate limit window is exceeded. A batch counts as one request.
402free_tier_exhaustedThe 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

$0.01/ company

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
Get started

Failed and ambiguous lookups are never billed, and the same company is billed at most once a day.

FAQ

Common questions

How big can a batch be?
Up to 100 items, returned synchronously in the HTTP response, so one call checks a whole page of a supplier or customer list.
How is a batch billed?
Per item, exactly like a single verify: $0.01 after the starter allowance. The free tier covers the first 100 starter calls, whether they come in one call or many.
Does a batch count as one request against my rate limit?
Yes. A batch call counts as one request, not one per item, but each item that returns a company is still one billable verified company.

Related

Start free with Corpo API

Verify any company from official registers with one API.