wsystem-dev KYB API

VAT + registry + sanctions in one call with a pass/review/fail verdict

Operations 2

POST /kyb/check One-call KYB: VAT + registry + sanctions -> verdict #
POST /ddreport Counterparty due-diligence report (VAT, register, sanctions, EORI, LEI, Peppol)… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/wsystem-dev:wsystem-dev-kyb-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

wsystem-dev-kyb-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: W System KYB API
  description: 'EU e-invoicing and business-data API: VAT/VIES and EORI validation, KYB, sanctions screening, EN 16931 e-invoice validation, Peppol lookup. Pay per call via x402 or use an API key; MCP server available.


    **Endpoints:** **EU VAT number validation (VIES)**, **EORI validation (EC EOS)**, **official company-registry lookup**, **sanctions screening (EU, UN, OFAC SDN, UK)**, **one-call KYB**, a **due-diligence report**, and **EU e-invoicing**: validate (EN 16931, XRechnung; UBL, CII, ZUGFeRD/Factur-X PDF), create (JSON -> UBL), ''can I e-invoice this company?'' (VIES + Peppol + mandates), and **SANDBOX send** (verify -> create -> route -> transport -> signed evidence; transport = mock, or a real submission through partner Peppol access-point sandboxes: Recommand playground or e-invoice.be sandbox). Live Peppol sending is not generally available; it opens per company once our access-point partner has activated it.


    * **No API key, no signup:** every client IP gets 20 free calls/day across all endpoints (header `X-Free-Remaining`).

    * **Beyond the free tier:** pay per call with **x402** (USDC on Base, HTTP 402 flow): $0.01 per single check, $0.10 per batch request, $0.045 per KYB check; e-invoice validate $0.03, parse $0.01, create $0.08, route $0.02; due-diligence report $0.49. Or use an API key.

    * **Live Peppol onboarding (API key):** `GET /einvoice/mandate-terms` returns the W System Peppol mandate terms (https://wsystem.dev/legal/peppol-mandate-terms, DPA: https://wsystem.dev/legal/dpa); `POST /einvoice/mandates` records the company''s click-through mandate with a signed receipt.

    * **MCP:** the same tools are available to AI agents at `https://api.wsystem.dev/mcp/` (streamable HTTP).

    * VIES/EOS are official European Commission services; this API adds retries when a member state is unavailable, caching,

    batch endpoints, audit consultation numbers and a stable JSON shape. Docs: https://wsystem.dev/llms.txt'
  contact:
    name: W System
    url: https://wsystem.dev/
  license:
    name: Proprietary API; MCP server code MIT
    url: https://github.com/wsystemdev/eu-business-data-mcp
  version: 0.3.61
  x-guidance: 'EU business verification for agents. GET /verify?vat=IE6388047V validates an EU VAT number via official VIES (name, address, consultation number as audit proof). GET /eori?eori=SE5560360793 validates an EU EORI number. GET /company?q=552032534&country=FR looks up official business registers. GET /sanctions/screen?name=... screens EU/UN/OFAC/UK lists. POST /kyb/check {"company":"FR40303265045"} returns a pass/review/fail KYB verdict. POST /einvoice/validate (raw UBL/CII XML or ZUGFeRD PDF body) checks EN 16931 + XRechnung rules; POST /einvoice/parse (same body) reads an incoming invoice into JSON (parties, totals, VAT, IBAN, lines; no validation); POST /einvoice/create turns JSON into a validated UBL invoice (example body: GET /einvoice/sample); GET /einvoice/route?id=BE0403170701 says whether/how to e-invoice a company; POST /ddreport returns a full due-diligence report. Batch POST variants take up to 100 items. First 20 calls/day per IP are free; after that pay per call with x402 (USDC on Base), or send an X-API-Key.'
servers:
- url: https://api.wsystem.dev
  description: Production
tags:
- name: KYB
  description: VAT + registry + sanctions in one call with a pass/review/fail verdict
paths:
  /kyb/check:
    post:
      tags:
      - KYB
      summary: 'One-call KYB: VAT + registry + sanctions -> verdict'
      description: 'Know-your-business check of an EU company in one request: VIES VAT validation, official business-register lookup and EU/UN/OFAC/UK sanctions screening, combined into a pass / review / fail verdict with reasons. x402 $0.045.'
      operationId: kybCheck
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KybCheck'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '402':
          description: 'Payment Required: x402 v2 challenge (PAYMENT-REQUIRED header). Returned when the free tier is used up, or for a bare call without input.'
        '429':
          description: Free tier used up and x402 disabled
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.045000'
        protocols:
        - x402:
            network: eip155:8453
            asset: USDC
            scheme: exact
        freeTier: 20 calls/day per IP, no key
  /ddreport:
    post:
      tags:
      - KYB
      summary: Counterparty due-diligence report (VAT, register, sanctions, EORI, LEI, Peppol)…
      description: One call bundles VIES VAT validation, official business-register lookup, EU/UN/OFAC/UK sanctions screening, EC EORI check, GLEIF LEI record and the Peppol / e-invoice route into a JSON report with deterministic risk flags, a 0-100 risk score, a pass/review/fail verdict, sources and a UTC timestamp for your audit file. Public company data only; not a regulated AML/KYC decision. x402 $0.49.
      operationId: ddReport
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DDReport'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '402':
          description: 'Payment Required: x402 v2 challenge (PAYMENT-REQUIRED header). Returned when the free tier is used up, or for a bare call without input.'
        '429':
          description: Free tier used up and x402 disabled
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.490000'
        protocols:
        - x402:
            network: eip155:8453
            asset: USDC
            scheme: exact
        freeTier: 20 calls/day per IP, no key
components:
  schemas:
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    KybCheck:
      properties:
        company:
          anyOf:
          - type: string
          - additionalProperties: true
            type: object
          title: Company
          description: VAT ID ('FR40303265045'), 'CC:name or registry id' ('NO:equinor'), or {name, vatNumber, country, registryId}
          examples:
          - FR40303265045
          - country: 'NO'
            name: Equinor ASA
        requester:
          anyOf:
          - type: string
          - type: 'null'
          title: Requester
          default: HU33119856
        threshold:
          type: number
          maximum: 100.0
          minimum: 50.0
          title: Threshold
          default: 85
      type: object
      required:
      - company
      title: KybCheck
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    DDReport:
      properties:
        company:
          type: string
          title: Company
          description: EU VAT ID (best), registry number or company name
          examples:
          - FR40303265045
        country:
          type: string
          title: Country
          description: ISO country code, needed when company is a name or registry number
          default: ''
        threshold:
          type: number
          maximum: 100.0
          minimum: 50.0
          title: Threshold
          default: 85
      type: object
      required:
      - company
      title: DDReport
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: 'Optional monthly-plan key. Without it: free tier, then x402 pay-per-call.'
externalDocs:
  description: Guides, prices and MCP setup
  url: https://wsystem.dev/llms-full.txt
x-discovery:
  mcp: https://api.wsystem.dev/mcp/
  serverCard: https://api.wsystem.dev/server-card
  x402: https://api.wsystem.dev/.well-known/x402