API documentation

REST/JSON. No account or API key: pay per verification with x402. Machine-readable: OpenAPI 3.1, llms.txt, coverage, pricing.

What it verifies — and what it does not

Whether a business entity is registered in a covered jurisdiction and what the official registry says about it now: legal name, registry number, entity type, domestic/foreign, original and normalized status, standing (only where the registry states it) and dates. It does not assess creditworthiness, legitimacy, ownership, sanctions or fraud, and it is not legal advice.

1. Ask (free)

POST https://businessregistrationproof.online/api/v1/verify
Content-Type: application/json

{
  "business_name": "Starbucks Corporation", // registered legal name, any script (optional if entity_number)
  "jurisdiction": "US-CO",                  // FR | NO | US-CO | US-CT | US-NY | US-OR; "CO", "Colorado", "Norge" accepted
  "entity_number": "optional",              // registry ID → exact lookup, HIGH confidence
  "entity_type": "optional tie-breaker",    // e.g. "LLC"
  "city": "optional tie-breaker",
  "country": "optional",                    // disambiguates two-letter codes
  "output_language": "optional BCP 47"      // explanations are English today
}

The request is validated and the jurisdiction resolved locally. An uncovered jurisdiction returns 422 coverage_not_supported with the covered list; a malformed registry number returns 400 invalid_entity_number. A covered request returns 402 with the x402 requirement (header PAYMENT-REQUIRED), the price (0.018 USDC) and the exact official registry that will be queried. Nothing is stored and no registry is contacted.

2. Pay and verify

Resend the identical body with PAYMENT-SIGNATURE (base64 x402 v2 payload, exact scheme, USDC on Base mainnet) and an Idempotency-Key (16–128 characters of A–Z a–z 0–9 _ -). The authorization is verified, the registry is queried live, and the payment is settled only for a determinate result. The settlement is returned in PAYMENT-RESPONSE.

{
  "verification_id": "brv_…",
  "result": "ACTIVE",
  "confidence": "MEDIUM",
  "summary": "The official registry lists this entity as active (registered and current). …",
  "entity": {
    "legal_name": "STARBUCKS CORPORATION", "entity_number": "19921028206",
    "entity_type": "Foreign Profit Corporation", "entity_type_code": "FPC",
    "jurisdiction": "Colorado", "jurisdiction_code": "US-CO", "country": "US",
    "domestic_or_foreign": "FOREIGN", "jurisdiction_of_formation": "WA", "principal_city": "…"
  },
  "registration": {
    "original_status": "Good Standing", "normalized_status": "ACTIVE",
    "status_basis": "SOURCE_STATUS", "formation_date": "1992-…", "end_date": null,
    "standing": "GOOD_STANDING", "original_standing": "Good Standing",
    "registered_agent": { "published_by_source": true, "returned": false }
  },
  "match": {
    "method": "name", "matched_legal_name": "STARBUCKS CORPORATION",
    "matched_entity_number": "19921028206", "name_similarity": "IDENTICAL",
    "ambiguity_count": 1, "search_complete": true
  },
  "candidates": [], "near_matches": [], "non_entity_matches": [],
  "source": {
    "authority": "Colorado Secretary of State", "url": "https://www.sos.state.co.us/biz/…",
    "request_url": "https://data.colorado.gov/resource/4ykn-tg5h.json?…",
    "checked_at": "…", "source_type": "OFFICIAL_REGISTRY", "response_sha256": "…"
  },
  "verification": { "checked_at": "…", "source_updated_at": "…", "cache_used": false, "cache_status": "LIVE" },
  "interpretation": { "explanation": "…", "caveats": ["…"] },
  "unknowns": [],
  "evidence": { "records": [{ "source_fields": { … verbatim, minimised … } }], "evidence_sha256": "…" },
  "limitations": ["…"],
  "payment": { "charged": true, "status": "settled", "amount": "0.018", "transaction": "0x…" }
}

3. Retrieve later (free)

GET https://businessregistrationproof.online/api/v1/verifications/{verification_id}
Authorization: Bearer <Idempotency-Key>

Returns the stored evidence package with cache_status: STORED and the original checked_at. Evidence is kept 90 days; accounting fields are kept for financial records.

Results

ACTIVERegistered and current per the official registry. Does NOT imply good standing (see registration.standing). Charged.
DELINQUENTStill registered, but the registry marks it delinquent/noncompliant (e.g. overdue report). Charged.
IN_LIQUIDATIONRegistered, but in bankruptcy, liquidation or compulsory winding-up. Charged.
SUSPENDEDRegistration or powers suspended by the authority. Charged.
INACTIVENo longer active; the registry states no more specific legal reason (e.g. French "cessée", conversions). Charged.
DISSOLVEDDissolved (voluntarily, administratively or judicially). Charged.
REVOKEDRegistration revoked or forfeited by the authority. Charged.
MERGEDMerged or consolidated into another entity. Charged.
WITHDRAWNA (typically foreign) registration withdrawn from the jurisdiction. Charged.
CANCELLEDRegistration cancelled or deleted from the register. Charged.
NOT_FOUNDThe selected registry returned no matching entity under the search used. Never means "does not exist anywhere". Charged.
AMBIGUOUSSeveral registered entities match; candidates are returned with entity numbers. Charged.
SOURCE_UNAVAILABLEThe registry could not be reached. Says nothing about the business. Not charged.
UNABLE_TO_VERIFYThe registry answered, but the evidence does not support a determinate result (unreadable response, unmapped status wording, or a name too common to check completely). Not charged.

Status semantics

Matching and confidence

Freshness

Every paid verification queries the registry live; no cached result is ever presented as live (verification.cache_used: false). checked_at is when we queried; source_updated_at is when the registry last refreshed its publication, when it reports one.

Errors

Every error is {"error":{"code","message","details?"}}. Codes: invalid_request, invalid_json, unsupported_media_type, payload_too_large, missing_identifier, name_too_broad, invalid_entity_number, unknown_jurisdiction, coverage_not_supported, payment_required, invalid_payment, payment_rejected, payment_expired, payment_wrong_*, idempotency_key_required, idempotency_conflict, payment_replay, in_progress, settlement_failed, rate_limited, not_configured, payment_provider_unavailable, service_unavailable.