Resolve402 / services

Counterparty check

GET /api/counterparty-check · $0.02 per call (USDC on Base or Solana, x402)

KYB company verification before paying or invoicing: sanctions screening (OFAC, EU, France), EU VAT number validation (VIES), French insolvency proceedings. Input a SIREN, SIRET, EU VAT number or French company name (optional IBAN). Output for a French company: registry status, insolvency proceedings (BODACC), latest revenue and net income with risk signals, sanctions screening of the company and its officers (DG Trésor, EU consolidated, OFAC SDN), IBAN checksum and country, verdict ok / review / block with reasons. Other EU VAT numbers: VIES validity and sanctions screening of the VAT number and, when VIES discloses it, the registered name. Exact-match pre-check, not an AML service. Charged only if found.

Problem solved

You are about to invoice or pay a company (French or EU VAT-registered) and want to know if it is active, VAT-valid, in insolvency proceedings or under an asset freeze, and if its IBAN is consistent.

Use cases

Input

GET /api/counterparty-check?siren=<9 digits> | ?siret= | ?vat=<EU VAT> | ?company=<name> [&iban=<IBAN>]

ParameterWhereTypeDescription
sirenquerystring9-digit French SIREN
siretquerystring14-digit French SIRET (alternative)
vatquerystringEU VAT number, e.g. FR27552032534 or DE123456789 (alternative)
companyquerystringFrench company name (alternative)
ibanquerystringOptional IBAN to check (checksum, country, SEPA)

Output

Company status, VAT validity (VIES, with vat.checksum: the FR key recomputed locally, not a VIES validation), insolvency proceedings (BODACC), sanctions screening of the company (identifier or exact name) and of its individual officers (exact last + first name, birth year when listed) against the DG Trésor asset-freeze register (incl. EU and UN), the EU consolidated financial sanctions list and the OFAC SDN list (sanctions.lists gives each list's status and date), IBAN checksum, country and SEPA, and verdict {level: ok|review|block, reasons, incomplete}. A listed officer gives review, never block; officers are returned only as a count (officers_screened) unless listed. 404 = not found, not charged.

Price

$0.02 per call. Charged only if the counterparty is found: 404 counterparty_not_found is not charged.

Example

GET https://resolve402.dev/api/counterparty-check?siren=552032534
{
  "company": {
    "siren": "552032534",
    "name": "DANONE",
    "active": true,
    "city": "PARIS"
  },
  "vat": {
    "number": "FR27552032534",
    "valid": true,
    "status": "checked"
  },
  "proceedings": {
    "status": "none",
    "latest": null,
    "count": 0,
    "source_status": "checked"
  },
  "sanctions": {
    "listed": false,
    "matches": [],
    "status": "checked",
    "lists": [
      {
        "id": "fr_gels",
        "status": "checked"
      },
      {
        "id": "eu_consolidated",
        "status": "checked"
      },
      {
        "id": "ofac_sdn",
        "status": "checked"
      }
    ],
    "officers_screened": 3,
    "officer_matches": []
  },
  "iban": {
    "valid": true,
    "country": "FR",
    "sepa": true,
    "masked": "FR76…0189"
  },
  "verdict": {
    "level": "ok",
    "reasons": []
  }
}

Bazaar discovery example served in the production 402 (abridged).

Sources

Limits

Use it

All services