80trust / 100

Kyc Check

by Factline in Security & trust

x402 APIPassing, checked 3 h ago

KYC onboarding check in one call: sanctions, PEP, email, phone, VAT. Use when onboarding a customer, seller or business and you want one answer: screens the name against EU, UN, UK and US sanctions and the PEP list, verifies email and phone, and checks an EU VAT number in VIES, all in parallel, with one verdict: pass, review, block_review or incomplete. Send any of name, email, phone, vat.

GET https://factline.dev/v1/kyc/check

Last 30 days

All checks passedSome failedAll failedNot checked
Uptime
100%
Response time
142 ms typical, 410 ms slowest 5%
Last check
3 h ago
Next check
any minute now

How to call it

# See the payment challenge (nothing is charged)
curl -i -X GET "https://factline.dev/v1/kyc/check?email=jan%40example.nl&name=Jan+de+Vries&phone=%2B31612345678"
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const client = new x402Client().register(
  "eip155:8453",
  new ExactEvmScheme(privateKeyToAccount(process.env.AGENT_KEY)),
);
const pay = wrapFetchWithPayment(fetch, client);

// Not sure it's safe to pay? Preflight it first for $0.005:
// GET https://toolvet.app/api/v1/check?url=https%3A%2F%2Ffactline.dev%2Fv1%2Fkyc%2Fcheck
const res = await pay("https://factline.dev/v1/kyc/check?email=jan%40example.nl&name=Jan+de+Vries&phone=%2B31612345678");
console.log(await res.json());

Example input

{
  "email": "[email protected]",
  "name": "Jan de Vries",
  "phone": "+31612345678"
}

Example output

{
  "checks": {
    "email": {
      "result": {
        "disposable": false,
        "domain": "factline.dev",
        "domain_security": {
          "dmarc_policy": null,
          "spf": true
        },
        "email": "[email protected]",
        "free_provider": false,
        "mail_routing": {
          "accepts_mail": true,
          "domain_exists": true,
          "implicit_mx": false,
          "mx": [
            "route1.mx.cloudflare.net",
            "route3.mx.cloudflare.net",
            "route2.mx.cloudflare.net"
          ],
          "null_mx": false
        },
        "reasons": [],
        "role_account": false,
        "source": "DNS via Cloudflare 1.1.1.1 (DNS-over-HTTPS); disposable-email-domains (CC0)",
        "suggestion": null,
        "syntax_valid": true,
        "verdict": "deliverable"
      },
      "status": "ok"
    },
    "phone": {
      "result": {
        "calling_code": "+31",
        "country": "NL",
        "country_name": "Netherlands",
        "e164": "+31612345678",
        "input": "+31612345678",
        "international": "+31 6 12345678",
        "line_type": "mobile",
        "national": "06 12345678",
        "possible": true,
        "sms_capable": true,
        "source": "Google libphonenumber metadata",
        "valid": true
      },
      "status": "ok"
    },
    "sanctions": {
      "result": {
        "list": {
          "entities": 25591,
          "loaded_at": "2026-10-08T00:30:53.837Z",
          "sources": [
            {
              "dated": "2026-09-22",
              "list": "EU",
              "name": "EU consolidated financial sanctions list (European Commission)"
            },
            {
              "dated": "2026-10-07",
              "list": "UN",
              "name": "UN Security Council consolidated sanctions list"
            },
            {
              "dated": "07/10/2026",
              "list": "UK",
              "name": "UK Sanctions List (FCDO/OFSI)"
            },
            {
              "dated": "OFAC SDN",
              "list": "US",
              "name": "US OFAC Specially Designated Nationals (SDN) list"
            }
          ]
        },
        "matches": [],
        "possible_match": false,
        "query": {
          "birth_year": null,
          "name": "Jan de Vries",
          "threshold": 85,
          "type": null
        }
      },
      "status": "ok"
    },
    "vat": "not requested"
  },
  "explain": {
    "disclaimer": "Automated screening aid, not legal advice. Sanctions matches are possible matches; confirm identity against the official lists.",
    "verdict": "pass: nothing flagged; review: something needs a human look (bad email, invalid phone or VAT); block_review: possible sanctions match, do not proceed before checking it; incomplete: a source was down, retry."
  },
  "flags": [],
  "source": "Sanctions lists named in checks.sanctions.result.list.sources; DNS (Cloudflare 1.1.1.1); Google libphonenumber; EU VIES",
  "verdict": "

Security scan

  • No findings. We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.

Recent checks

WhenResultHTTPTimePrice
3 h agoPassed402410 ms$0.01
6 h agoPassed40262 ms$0.01
11 h agoPassed40274 ms$0.01
13 h agoPassed402486 ms$0.01
18 h agoPassed402142 ms$0.01
21 h agoPassed402368 ms$0.01
24 h agoPassed402163 ms$0.01
29 h agoPassed40288 ms$0.01