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
- Supplier onboarding: check a new supplier and its IBAN before the first payment.
- Before issuing an invoice or an e-invoice: confirm the customer is active, VAT-valid and not in insolvency proceedings.
Input
GET /api/counterparty-check?siren=<9 digits> | ?siret= | ?vat=<EU VAT> | ?company=<name> [&iban=<IBAN>]
| Parameter | Where | Type | Description |
|---|---|---|---|
siren | query | string | 9-digit French SIREN |
siret | query | string | 14-digit French SIRET (alternative) |
vat | query | string | EU VAT number, e.g. FR27552032534 or DE123456789 (alternative) |
company | query | string | French company name (alternative) |
iban | query | string | Optional 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
- Sirene / RNE via recherche-entreprises.api.gouv.fr
- VIES (European Commission) for VAT numbers
- BODACC procédures collectives (DILA)
- Registre national des gels, DG Trésor (includes EU and UN measures)
- EU consolidated financial sanctions list (European Commission)
- OFAC SDN list (US Treasury)
- IBAN checked locally (ISO 13616)
Limits
- A pre-check, not an AML/KYC compliance service: "review" or "block" means a human should look.
- Sanctions matching is exact (identifier or normalized name for the company; last + first name, plus birth year when both sides have it, for officers), so namesakes without a first name are never flagged.
- Each list is read live (cached 6 h) or from a bundled snapshot when the feed is slow: sanctions.lists gives each list's status, source and date.
- VIES depends on each member state's service; when it does not answer within ~20 s (retries included), vat.valid is null and verdict.incomplete lists "vat". Definite VIES answers are cached 6 h per number.
- The IBAN is only returned masked; officers are only counted unless listed. Nothing stored.
Use it
- HTTP + x402: call the URL, pay the 402 with any x402 v2 client, retry with the PAYMENT-SIGNATURE header.
- OpenAPI: /openapi.json (operation
counterpartyCheck) - MCP:
npx -y resolve402-mcp, toolcounterparty_check(npm) - Agent guide: /llms.txt · skill: /SKILL.md