{
  "name": "Forge Agent Hub",
  "publisher": "Forge Agent Hub",
  "contact": "jqfpxwv7@mail.grokbot.com",
  "apiBase": "https://x402-gateway.forge-x402.workers.dev",
  "updated": "2026-11-10T17:01:24.950Z",
  "payment": {
    "protocol": "x402",
    "version": 2,
    "scheme": "exact",
    "network": "eip155:8453",
    "networkName": "Base",
    "asset": "USDC",
    "assetContract": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7"
  },
  "loyalty": {
    "status": "planned",
    "active": false,
    "crediting": "not_fed",
    "rule": "every_10_paid_calls_1_credit",
    "credit_unit": "one_free_call",
    "scope": "payer_address",
    "endpoint": "GET /loyalty/{address}",
    "implementation": "hub_d1_read_only",
    "description": "A read endpoint exists on this hub. The x402 gateway runs on another Cloudflare account and does not write settlements here, so paidCount and credits stay at zero until a feed is implemented. This is not a live credits programme."
  },
  "tool_requests": {
    "status": "live",
    "active": true,
    "challenge": "GET /request-tool/challenge",
    "endpoint": "POST /request-tool",
    "count": "GET /request-tool/count",
    "proof": "sha256_proof_of_work",
    "proof_detail": "GET a short-lived challenge, then find a nonce such that sha256(utf8(challenge + nonce)) has N leading zero hex digits. An optional x402 payment field is stored as unverified; this hub cannot settle or verify payments."
  },
  "mcp": {
    "transport": "streamable-http",
    "url": "https://x402-gateway.forge-x402.workers.dev/mcp",
    "name": "forge-agent-api",
    "version": "1.1.0",
    "note": "Served by the API gateway."
  },
  "tools": [
    {
      "id": "fr-company",
      "kind": "x402",
      "title": "fr-company",
      "description": "French company lookup (SIREN/SIRET/name) from the official open-data Sirene base (recherche-entreprises.api.gouv.fr, Licence Ouverte Etalab). Returns legal name, SIREN, HQ address, NAF code, status, creation date, directors when public.",
      "path": "/api/fr-company",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/fr-company",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "fr_company",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/fr-company/",
      "category": "Company data",
      "price": {
        "amount": 0.005,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "5000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "q": "danone"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Company name, SIREN (9 digits) or SIRET (14 digits)"
          }
        },
        "required": [
          "q"
        ]
      },
      "exampleResponse": {
        "results": [
          {
            "siren": "552032534",
            "name": "DANONE",
            "naf": "70.10Z",
            "hq_address": "59-61 RUE LA FAYETTE 75009 PARIS",
            "active": true
          }
        ]
      }
    },
    {
      "id": "eu-vat",
      "kind": "x402",
      "title": "eu-vat",
      "description": "EU VAT number validation against the European Commission VIES service, with normalised output (valid, name, address).",
      "path": "/api/eu-vat",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/eu-vat",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "eu_vat",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/eu-vat/",
      "category": "Tax & identifiers",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "vat": "FR40303265045"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "vat": {
            "type": "string",
            "description": "VAT number with 2-letter country prefix, e.g. FR40303265045"
          }
        },
        "required": [
          "vat"
        ]
      },
      "exampleResponse": {
        "valid": true,
        "country": "FR",
        "number": "40303265045",
        "name": "SA SODIMAS"
      }
    },
    {
      "id": "iban",
      "kind": "x402",
      "title": "iban",
      "description": "IBAN validation (ISO 13616 mod-97 checksum + per-country length), returns normalised IBAN, country and BBAN.",
      "path": "/api/iban",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/iban",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "iban",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/iban/",
      "category": "Tax & identifiers",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "iban": "FR7630006000011234567890189"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "iban": {
            "type": "string"
          }
        },
        "required": [
          "iban"
        ]
      },
      "exampleResponse": {
        "valid": true,
        "country": "FR",
        "iban": "FR7630006000011234567890189",
        "bban": "30006000011234567890189"
      }
    },
    {
      "id": "markdown",
      "kind": "x402",
      "title": "markdown",
      "description": "Fetch a public web page and return clean Markdown (scripts/styles/nav stripped) plus title. Max 2 MB, 15 s timeout, public IPs only.",
      "path": "/api/markdown",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/markdown",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "markdown",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/markdown/",
      "category": "Web & domain",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://en.wikipedia.org/wiki/HTTP_402"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "http(s) URL of a public page"
          }
        },
        "required": [
          "url"
        ]
      },
      "exampleResponse": {
        "url": "https://example.com",
        "title": "Example Domain",
        "markdown": "# Example Domain\n..."
      }
    },
    {
      "id": "fr-address",
      "kind": "x402",
      "title": "fr-address",
      "description": "French address geocoding and normalisation via the official Base Adresse Nationale (api-adresse.data.gouv.fr). Returns normalised label, postcode, city, INSEE code, lat/lon and score.",
      "path": "/api/fr-address",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/fr-address",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "fr_address",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/fr-address/",
      "category": "France property & address",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "q": "8 bd du port 95000 cergy"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Free-text French address"
          }
        },
        "required": [
          "q"
        ]
      },
      "exampleResponse": {
        "results": [
          {
            "label": "8 Boulevard du Port 95000 Cergy",
            "postcode": "95000",
            "city": "Cergy",
            "citycode": "95127",
            "lat": 49.03,
            "lon": 2.06,
            "score": 0.95
          }
        ]
      }
    },
    {
      "id": "holidays",
      "kind": "x402",
      "title": "holidays",
      "description": "Official public holidays for a country and year (100+ countries, Nager.Date open data), plus whether a given date is a holiday.",
      "path": "/api/holidays",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/holidays",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "holidays",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/holidays/",
      "category": "Reference data",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "country": "FR",
        "year": "2026"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code"
          },
          "year": {
            "type": "string",
            "description": "4-digit year"
          },
          "date": {
            "type": "string",
            "description": "optional YYYY-MM-DD to test"
          }
        },
        "required": [
          "country"
        ]
      },
      "exampleResponse": {
        "country": "FR",
        "year": 2026,
        "count": 11,
        "holidays": [
          {
            "date": "2026-01-01",
            "name": "New Year's Day",
            "local_name": "Jour de l'an"
          }
        ]
      }
    },
    {
      "id": "fx",
      "kind": "x402",
      "title": "fx",
      "description": "Currency conversion at the official European Central Bank reference rate (via Frankfurter), with rate date. 30+ fiat currencies.",
      "path": "/api/fx",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/fx",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "fx",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/fx/",
      "category": "Reference data",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "from": "EUR",
        "to": "USD",
        "amount": "100"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "amount": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "description": "optional YYYY-MM-DD historical rate"
          }
        },
        "required": [
          "from",
          "to"
        ]
      },
      "exampleResponse": {
        "from": "EUR",
        "to": "USD",
        "amount": 100,
        "rate": 1.1267,
        "result": 112.67,
        "date": "2026-11-04",
        "source": "ECB"
      }
    },
    {
      "id": "web-meta",
      "kind": "x402",
      "title": "web-meta",
      "description": "Fetch a public URL and return its metadata: title, meta description, canonical, language, OpenGraph and Twitter card tags, favicon, RSS feeds, h1s. Public IPs only.",
      "path": "/api/web-meta",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/web-meta",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "web_meta",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/web-meta/",
      "category": "Web & domain",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://en.wikipedia.org/wiki/HTTP_402"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          }
        },
        "required": [
          "url"
        ]
      },
      "exampleResponse": {
        "url": "https://example.com",
        "status": 200,
        "title": "Example Domain",
        "description": null,
        "og": {},
        "feeds": []
      }
    },
    {
      "id": "email-check",
      "kind": "x402",
      "title": "email-check",
      "description": "Email address check: RFC syntax, domain MX/A records (deliverability signal, no SMTP probe), disposable-domain and role-account flags.",
      "path": "/api/email-check",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/email-check",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "email_check",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/email-check/",
      "category": "Web & domain",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "email": "postmaster@gmail.com"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          }
        },
        "required": [
          "email"
        ]
      },
      "exampleResponse": {
        "email": "contact@example.com",
        "syntax_ok": true,
        "domain": "example.com",
        "has_mx": true,
        "mx": [
          "mx.example.com"
        ],
        "disposable": false,
        "role_account": true
      }
    },
    {
      "id": "rdap",
      "kind": "x402",
      "title": "rdap",
      "description": "Domain registration data via RDAP (the official WHOIS successor): registrar, creation/expiry/update dates, status, nameservers, DNSSEC, age in days.",
      "path": "/api/rdap",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/rdap",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "rdap",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/rdap/",
      "category": "Web & domain",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "domain": "wikipedia.org"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string"
          }
        },
        "required": [
          "domain"
        ]
      },
      "exampleResponse": {
        "domain": "EXAMPLE.COM",
        "registrar": "RESERVED-Internet Assigned Numbers Authority",
        "created": "1995-08-14T04:00:00Z",
        "expires": "2026-08-13T04:00:00Z",
        "age_days": 11400,
        "nameservers": [
          "A.IANA-SERVERS.NET"
        ]
      }
    },
    {
      "id": "ch-uid",
      "kind": "x402",
      "title": "ch-uid",
      "description": "Swiss UID / VAT (MWST/TVA/IVA) number validation against the official Swiss Federal Statistical Office UID register (UID-Register, uid-wse). Returns format check (mod-11), register status, legal name, legal form, address, commercial-register and VAT status. Sole-proprietor names are masked.",
      "path": "/api/ch-uid",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/ch-uid",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "ch_uid",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/ch-uid/",
      "category": "Company data",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "uid": "CHE-105.829.940"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "uid": {
            "type": "string",
            "description": "Swiss UID, e.g. CHE-105.829.940 or CHE105829940 MWST"
          }
        },
        "required": [
          "uid"
        ]
      },
      "exampleResponse": {
        "uid": "CHE-105.829.940",
        "uidFormatValid": true,
        "found": true,
        "isActive": true,
        "name": "Migros-Genossenschafts-Bund",
        "legalForm": "Cooperative (Genossenschaft)",
        "vat": {
          "registered": true,
          "active": true
        }
      }
    },
    {
      "id": "ch-uid-batch",
      "kind": "x402",
      "title": "ch-uid-batch",
      "description": "Batch Swiss UID / VAT number validation (up to 25 numbers per call) against the official Swiss UID register. Same per-record output as /api/ch-uid. The register allows ~20 lookups/min, so a full batch can take up to ~80 s. Sole-proprietor names are masked.",
      "path": "/api/ch-uid-batch",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/ch-uid-batch",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "ch_uid_batch",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/ch-uid-batch/",
      "category": "Company data",
      "price": {
        "amount": 0.05,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "50000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "uids": "CHE-105.829.940,CHE-105.909.036"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "uids": {
            "type": "string",
            "description": "Up to 25 Swiss UIDs, comma/space/newline separated (POST may also send a JSON array)"
          }
        },
        "required": [
          "uids"
        ]
      },
      "exampleResponse": {
        "count": 2,
        "found": 2,
        "invalidFormat": 0,
        "results": []
      }
    },
    {
      "id": "dvf-price-m2",
      "kind": "x402",
      "title": "dvf-price-m2",
      "description": "French property price per m2 around an address from official DVF sales records (DGFiP / Etalab, last 3 years): median, p25/p75, count for apartments and houses within an auto-expanding radius, geocoded via Base Adresse Nationale. Not available for Alsace-Moselle and Mayotte.",
      "path": "/api/dvf-price-m2",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/dvf-price-m2",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "dvf_price_m2",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/dvf-price-m2/",
      "category": "France property & address",
      "price": {
        "amount": 0.01,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "10000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "address": "10 rue de la Paix, Paris"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "French street address"
          },
          "propertyType": {
            "type": "string",
            "description": "optional: Appartement or Maison"
          },
          "surface": {
            "type": "number",
            "description": "optional surface in m2 for an estimate"
          }
        },
        "required": [
          "address"
        ]
      },
      "exampleResponse": {
        "found": true,
        "geocodedLabel": "10 Rue de la Paix 75002 Paris",
        "apartmentMedianPricePerM2": 12857,
        "apartmentSales": 381,
        "houseMedianPricePerM2": 17846,
        "houseSales": 12
      }
    },
    {
      "id": "bodacc-health",
      "kind": "x402",
      "title": "bodacc-health",
      "description": "French company legal-health check from the official BODACC notices (DILA open data) for a SIREN/SIRET: insolvency proceedings (sauvegarde, redressement, liquidation), deregistration, sales, accounts filings, last notice dates and a risk summary. Natural persons (sole traders) are masked.",
      "path": "/api/bodacc-health",
      "url": "https://x402-gateway.forge-x402.workers.dev/api/bodacc-health",
      "host": "https://x402-gateway.forge-x402.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "mcp_tool": "bodacc_health",
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/bodacc-health/",
      "category": "Company data",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "siren": "552032534"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "siren": {
            "type": "string",
            "description": "SIREN (9 digits) or SIRET (14 digits)"
          }
        },
        "required": [
          "siren"
        ]
      },
      "exampleResponse": {
        "siren": "552032534",
        "found": true,
        "name": "DANONE",
        "noticesTotal": 107,
        "lastNoticeDate": "2026-09-02"
      }
    },
    {
      "id": "x402-compliance",
      "kind": "x402",
      "title": "x402-compliance",
      "description": "x402 V2 compliance tester: probes any paid endpoint without paying and checks the 402 challenge (PAYMENT-REQUIRED header, x402Version 2, accepts[] schema, CAIP-2 network, atomic amount, canonical USDC asset, payTo, maxTimeoutSeconds, EIP-712 extra, resource, Bazaar extension, CORS) and that free 200s or forged payment headers never unlock the resource. Returns score, verdict and per-check details.",
      "path": "/api/x402-compliance",
      "url": "https://forge-tools.dentreprise.workers.dev/api/x402-compliance",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/x402-compliance/",
      "category": "x402 developer tools",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://x402-gateway.forge-x402.workers.dev/api/fx?from=EUR&to=USD"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Paid endpoint URL to test"
          },
          "method": {
            "type": "string",
            "description": "GET (default) or POST"
          }
        },
        "required": [
          "url"
        ]
      },
      "exampleResponse": {
        "verdict": "compliant",
        "score": 100,
        "summary": {
          "pass": 14,
          "warn": 0,
          "fail": 0
        },
        "checks": [
          {
            "id": "status_402",
            "status": "pass"
          }
        ]
      }
    },
    {
      "id": "a2a-agent-card",
      "kind": "x402",
      "title": "a2a-agent-card",
      "description": "A2A Agent Card validator and generator (A2A 1.0, detects and flags v0.3 cards): supportedInterfaces, protocolBinding/protocolVersion, capabilities, media-type modes, skills, provider, security schemes/requirements, JWS signature structure. Validate by URL (fetches /.well-known/agent-card.json) or inline JSON; or mode=generate from name, description, endpoint and skills.",
      "path": "/api/a2a-agent-card",
      "url": "https://forge-tools.dentreprise.workers.dev/api/a2a-agent-card",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/a2a-agent-card/",
      "category": "Agent builder tools",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://example.com"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Agent origin or card URL"
          },
          "card": {
            "type": "object",
            "description": "Inline Agent Card JSON (POST)"
          },
          "mode": {
            "type": "string",
            "description": "validate (default) or generate"
          },
          "name": {
            "type": "string",
            "description": "generate: agent name"
          },
          "description": {
            "type": "string",
            "description": "generate: description"
          },
          "endpoint": {
            "type": "string",
            "description": "generate: A2A endpoint https URL"
          },
          "skills": {
            "type": "string",
            "description": "generate: JSON array or comma-separated skill names"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "mode": "validate",
        "spec_version_detected": "1.0",
        "valid": true,
        "errors": 0,
        "warnings": 1,
        "issues": []
      }
    },
    {
      "id": "mcp-manifest-lint",
      "kind": "x402",
      "title": "mcp-manifest-lint",
      "description": "MCP manifest linter: validates an MCP registry server.json (official schema 2025-12-11: reverse-DNS name, 100-char description, pinned versions, packages registryType/transport, remotes, env vars, isSecret, fileSha256, additionalProperties) or a host config (mcpServers/servers: command vs url, args, env, hard-coded secrets). Inline JSON or URL.",
      "path": "/api/mcp-manifest-lint",
      "url": "https://forge-tools.dentreprise.workers.dev/api/mcp-manifest-lint",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/mcp-manifest-lint/",
      "category": "MCP developer tools",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "manifest": {
          "name": "io.github.example/weather",
          "description": "Weather MCP",
          "version": "1.0.0",
          "remotes": [
            {
              "type": "streamable-http",
              "url": "https://example.com/mcp"
            }
          ]
        }
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "URL of server.json or config"
          },
          "manifest": {
            "type": "object",
            "description": "Inline server.json or host config (POST)"
          },
          "kind": {
            "type": "string",
            "description": "server_json or host_config (auto-detected)"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "kind": "server_json",
        "valid": true,
        "errors": 0,
        "warnings": 1,
        "registry_ready": false,
        "issues": [
          {
            "level": "warning",
            "path": "$schema"
          }
        ]
      }
    },
    {
      "id": "x402-manifest-from-openapi",
      "kind": "x402",
      "title": "x402-manifest-from-openapi",
      "description": "Turn an OpenAPI 3.x / Swagger 2.0 spec (JSON or YAML, URL or inline) into a ready-to-mount x402 V2 paywall: per-operation accepts[] (exact, CAIP-2 network, atomic USDC amount, payTo, EIP-712 extra), @x402/core route config, Bazaar discovery input/output schemas, a /.well-known/x402 document and a sample PAYMENT-REQUIRED payload.",
      "path": "/api/x402-manifest-from-openapi",
      "url": "https://forge-tools.dentreprise.workers.dev/api/x402-manifest-from-openapi",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/x402-manifest-from-openapi/",
      "category": "x402 developer tools",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://petstore3.swagger.io/api/v3/openapi.json",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "price": "0.001"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "OpenAPI URL"
          },
          "spec": {
            "type": "object",
            "description": "Inline spec (POST)"
          },
          "payTo": {
            "type": "string",
            "description": "Receiving address"
          },
          "price": {
            "type": "string",
            "description": "Default USD price per call"
          },
          "prices": {
            "type": "string",
            "description": "JSON map {\"GET /path\": 0.002}"
          },
          "network": {
            "type": "string",
            "description": "CAIP-2, default eip155:8453"
          },
          "base_url": {
            "type": "string",
            "description": "Override server URL"
          }
        },
        "required": [
          "payTo"
        ]
      },
      "exampleResponse": {
        "operations": 19,
        "routes": [
          {
            "method": "GET",
            "path": "/pet/{petId}",
            "accepts": [
              {
                "scheme": "exact",
                "amount": "1000"
              }
            ]
          }
        ],
        "well_known_x402": {
          "version": 1,
          "resources": []
        }
      }
    },
    {
      "id": "pubmed-search",
      "kind": "x402",
      "title": "pubmed-search",
      "description": "PubMed / MEDLINE search with full records: PMID, title, authors, journal, year, volume/pages, DOI, PMCID, publication types, MeSH terms and abstract. Accepts PubMed query syntax or a list of PMIDs. No API key needed.",
      "path": "/api/pubmed-search",
      "url": "https://forge-tools.dentreprise.workers.dev/api/pubmed-search",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/pubmed-search/",
      "category": "Research & science",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "q": "x402 OR \"agent payments\"",
        "max": "3"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "PubMed query"
          },
          "pmid": {
            "type": "string",
            "description": "Comma-separated PMIDs (alternative to q)"
          },
          "max": {
            "type": "string",
            "description": "1-20, default 5"
          },
          "sort": {
            "type": "string",
            "description": "relevance or pub_date"
          },
          "abstracts": {
            "type": "string",
            "description": "true/false, default true"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "total": 1234,
        "count": 3,
        "articles": [
          {
            "pmid": "38000000",
            "title": "…",
            "doi": "10.…",
            "abstract": "…"
          }
        ]
      }
    },
    {
      "id": "x402-listing-check",
      "kind": "x402",
      "title": "x402-listing-check",
      "description": "Checks that a host exposes a valid x402 discovery listing (/.well-known/x402, x402.json, x402-listing): JSON, version, https resource URLs, same host, companions (/openapi.json, /llms.txt), and probes up to 10 listed resources for a real 402 challenge with consistent payTo. Never pays.",
      "path": "/api/x402-listing-check",
      "url": "https://forge-tools.dentreprise.workers.dev/api/x402-listing-check",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/x402-listing-check/",
      "category": "x402 developer tools",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://x402-gateway.forge-x402.workers.dev"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Host or origin URL"
          },
          "probe": {
            "type": "string",
            "description": "Resources to probe, 0-10, default 5"
          }
        },
        "required": [
          "url"
        ]
      },
      "exampleResponse": {
        "verdict": "valid",
        "resources_count": 14,
        "probes": [
          {
            "status": 402,
            "ok": true
          }
        ]
      }
    },
    {
      "id": "lei-lookup",
      "kind": "x402",
      "title": "lei-lookup",
      "description": "Legal Entity Identifier lookup from the official GLEIF register: by LEI (with ISO 17442 checksum check) or by legal-name search with optional country. Returns legal name, status, legal form, jurisdiction, legal and HQ addresses, registration status/renewal, BIC, direct and ultimate parents.",
      "path": "/api/lei-lookup",
      "url": "https://forge-tools.dentreprise.workers.dev/api/lei-lookup",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/lei-lookup/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "lei": "969500KMUQ2B6CBAF162"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "lei": {
            "type": "string",
            "description": "20-char LEI"
          },
          "name": {
            "type": "string",
            "description": "Legal name search (alternative)"
          },
          "country": {
            "type": "string",
            "description": "ISO alpha-2 filter for name search"
          },
          "max": {
            "type": "string",
            "description": "1-20"
          },
          "relationships": {
            "type": "string",
            "description": "true/false, default true"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "lei": "969500KMUQ2B6CBAF162",
        "found": true,
        "legal_name": "DANONE",
        "status": "ACTIVE",
        "jurisdiction": "FR",
        "ultimate_parent": null
      }
    },
    {
      "id": "rss-to-json",
      "kind": "x402",
      "title": "rss-to-json",
      "description": "RSS 2.0 / RSS 1.0 (RDF) / Atom / JSON Feed to clean JSON: feed title, link, language, updated, items with id, title, link, ISO dates, author, text summary, categories and enclosures (podcasts). URL or inline XML, item cap, `since` filter; HTML pages return discovered feed links.",
      "path": "/api/rss-to-json",
      "url": "https://forge-tools.dentreprise.workers.dev/api/rss-to-json",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/rss-to-json/",
      "category": "Web data",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://hnrss.org/frontpage",
        "limit": "10"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Feed URL"
          },
          "xml": {
            "type": "string",
            "description": "Inline feed (POST)"
          },
          "limit": {
            "type": "string",
            "description": "1-100, default 20"
          },
          "since": {
            "type": "string",
            "description": "ISO date: only newer items"
          },
          "html": {
            "type": "string",
            "description": "keep HTML in summaries"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "format": "rss 2.0",
        "title": "Hacker News: Front Page",
        "count": 10,
        "items": [
          {
            "title": "…",
            "link": "…",
            "published": "2026-11-10T12:00:00.000Z"
          }
        ]
      }
    },
    {
      "id": "eori-validate",
      "kind": "x402",
      "title": "eori-validate",
      "description": "EORI number validation (customs trader ID) against the official European Commission EOS register, and UK GB numbers against HMRC. Up to 10 numbers per call; returns validity plus name and address when the trader consented to publication.",
      "path": "/api/eori-validate",
      "url": "https://forge-tools.dentreprise.workers.dev/api/eori-validate",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/eori-validate/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "eori": "FR55203253400019"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "eori": {
            "type": "string",
            "description": "EORI number(s), comma-separated, max 10"
          }
        },
        "required": [
          "eori"
        ]
      },
      "exampleResponse": {
        "count": 1,
        "valid": 0,
        "results": [
          {
            "eori": "FR55203253400019",
            "valid": false,
            "status": "Not valid",
            "registry": "EU EOS (European Commission)"
          }
        ]
      }
    },
    {
      "id": "sec-financials",
      "kind": "x402",
      "title": "sec-financials",
      "description": "US public company financial facts from SEC EDGAR XBRL (by ticker or CIK): revenue, net income, operating income, gross profit, diluted EPS, assets, liabilities, equity, cash, operating cash flow, long-term debt, shares outstanding — last 1-5 fiscal years plus latest quarter, with form, filing date and accession; plus recent 10-K/10-Q/8-K filings. Any raw us-gaap tag also accepted.",
      "path": "/api/sec-financials",
      "url": "https://forge-tools.dentreprise.workers.dev/api/sec-financials",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/sec-financials/",
      "category": "Finance",
      "price": {
        "amount": 0.005,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "5000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "ticker": "AAPL",
        "years": "3"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string",
            "description": "Ticker, e.g. AAPL"
          },
          "cik": {
            "type": "string",
            "description": "SEC CIK (alternative)"
          },
          "years": {
            "type": "string",
            "description": "1-5, default 3"
          },
          "metrics": {
            "type": "string",
            "description": "Comma list: revenue,net_income,… or us-gaap:Tag"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "cik": "0000320193",
        "name": "Apple Inc.",
        "metrics": {
          "revenue": {
            "unit": "USD",
            "annual": [
              {
                "period_end": "2026-09-26",
                "value": 0
              }
            ]
          }
        }
      }
    },
    {
      "id": "openfoodfacts-product",
      "kind": "x402",
      "title": "openfoodfacts-product",
      "description": "Food product sheet from a barcode (EAN/UPC/GTIN) via Open Food Facts: name, brand, quantity, Nutri-Score, NOVA, Eco-Score, nutriments per 100 g, ingredients, allergens, traces, labels, categories, countries, packaging, image.",
      "path": "/api/openfoodfacts-product",
      "url": "https://forge-tools.dentreprise.workers.dev/api/openfoodfacts-product",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/openfoodfacts-product/",
      "category": "Products & commerce",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "barcode": "3017624010701"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "barcode": {
            "type": "string",
            "description": "8-14 digit barcode"
          }
        },
        "required": [
          "barcode"
        ]
      },
      "exampleResponse": {
        "found": true,
        "name": "Nutella",
        "brands": "Ferrero",
        "nutriscore": "e"
      }
    },
    {
      "id": "arxiv-search",
      "kind": "x402",
      "title": "arxiv-search",
      "description": "arXiv preprint search (plain words or arXiv field syntax ti:, au:, abs:, cat:) or id lookup: title, authors, dates, categories, abstract, DOI, journal ref, abs and PDF links.",
      "path": "/api/arxiv-search",
      "url": "https://forge-tools.dentreprise.workers.dev/api/arxiv-search",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/arxiv-search/",
      "category": "Research & science",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "q": "agent payments",
        "max": "3"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Query"
          },
          "id": {
            "type": "string",
            "description": "arXiv id(s), comma-separated"
          },
          "max": {
            "type": "string",
            "description": "1-25, default 5"
          },
          "sort": {
            "type": "string",
            "description": "relevance, submitted, updated"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "total": 120,
        "count": 3,
        "papers": [
          {
            "id": "2501.00001v1",
            "title": "…",
            "pdf_url": "https://arxiv.org/pdf/2501.00001v1"
          }
        ]
      }
    },
    {
      "id": "crossref-doi",
      "kind": "x402",
      "title": "crossref-doi",
      "description": "DOI metadata from Crossref: type, title, container (journal/book), publisher, authors with ORCID and affiliations, dates, volume/issue/pages, ISSN/ISBN, licenses, abstract, subjects, citation counts, funders, and optionally the reference list.",
      "path": "/api/crossref-doi",
      "url": "https://forge-tools.dentreprise.workers.dev/api/crossref-doi",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/crossref-doi/",
      "category": "Research & science",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "doi": "10.1038/nature12373"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "doi": {
            "type": "string",
            "description": "DOI or doi.org URL"
          },
          "references": {
            "type": "string",
            "description": "true to include references"
          }
        },
        "required": [
          "doi"
        ]
      },
      "exampleResponse": {
        "found": true,
        "title": "Nanometre-scale thermometry in a living cell",
        "container": "Nature"
      }
    },
    {
      "id": "gtin-validate",
      "kind": "x402",
      "title": "gtin-validate",
      "description": "GTIN / EAN-8 / EAN-13 / UPC-A / UPC-E / GTIN-14 validation and normalisation (GS1 check digit): type, expected check digit, corrected code, GTIN-14 and EAN-13 forms, GS1 prefix region, book/coupon flags. Up to 100 codes per call.",
      "path": "/api/gtin-validate",
      "url": "https://forge-tools.dentreprise.workers.dev/api/gtin-validate",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/gtin-validate/",
      "category": "Products & commerce",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "gtin": "3017624010701"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "gtin": {
            "type": "string",
            "description": "Code(s), comma-separated"
          }
        },
        "required": [
          "gtin"
        ]
      },
      "exampleResponse": {
        "type": "EAN-13",
        "valid": true,
        "gtin14": "03017624010701",
        "gs1_prefix_region": "France & Monaco"
      }
    },
    {
      "id": "isbn-validate",
      "kind": "x402",
      "title": "isbn-validate",
      "description": "ISBN-10 / ISBN-13 validation and conversion (ISO 2108 check digits): valid flag, expected check digit, corrected value, both forms, GTIN-14, registration group hint.",
      "path": "/api/isbn-validate",
      "url": "https://forge-tools.dentreprise.workers.dev/api/isbn-validate",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/isbn-validate/",
      "category": "Products & commerce",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "isbn": "978-2-07-036822-8"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "isbn": {
            "type": "string",
            "description": "ISBN-10 or ISBN-13"
          }
        },
        "required": [
          "isbn"
        ]
      },
      "exampleResponse": {
        "format": "ISBN-13",
        "valid": true,
        "isbn10": "2070368223"
      }
    },
    {
      "id": "mcp-inspect",
      "kind": "x402",
      "title": "mcp-inspect",
      "description": "Remote MCP server inspector (Streamable HTTP): initialize handshake, protocol version, serverInfo, capabilities, session, latency, tools/list with per-tool checks (name pattern, description, inputSchema object, undocumented or missing required params), resources/prompts counts. Read-only: never calls a tool.",
      "path": "/api/mcp-inspect",
      "url": "https://forge-tools.dentreprise.workers.dev/api/mcp-inspect",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/mcp-inspect/",
      "category": "MCP developer tools",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://example.com/mcp"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "MCP endpoint URL"
          }
        },
        "required": [
          "url"
        ]
      },
      "exampleResponse": {
        "reachable": true,
        "healthy": true,
        "protocol_version": "2025-06-18",
        "tools_count": 12
      }
    },
    {
      "id": "openapi-lint",
      "kind": "x402",
      "title": "openapi-lint",
      "description": "OpenAPI linter for agent readiness: version, info, servers, operationId presence/uniqueness/LLM-safe names, summaries, parameter schemas and descriptions, path placeholders, success and error responses, JSON examples. Returns an agent-readiness score and actionable issues.",
      "path": "/api/openapi-lint",
      "url": "https://forge-tools.dentreprise.workers.dev/api/openapi-lint",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/openapi-lint/",
      "category": "Agent builder tools",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://petstore3.swagger.io/api/v3/openapi.json"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Spec URL"
          },
          "spec": {
            "type": "object",
            "description": "Inline spec (POST)"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "agent_readiness_score": 78,
        "operations": 19,
        "errors": 0,
        "warnings": 4
      }
    },
    {
      "id": "sitemap-urls",
      "kind": "x402",
      "title": "sitemap-urls",
      "description": "sitemap.xml URL extractor: reads a sitemap or sitemap index (incl. .gz) and up to 10 child sitemaps, returns URLs with lastmod/changefreq/priority, optional substring filter, capped list (up to 5000).",
      "path": "/api/sitemap-urls",
      "url": "https://forge-tools.dentreprise.workers.dev/api/sitemap-urls",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/sitemap-urls/",
      "category": "Web data",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://www.sitemaps.org/sitemap.xml",
        "limit": "50"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Sitemap URL or site origin"
          },
          "limit": {
            "type": "string",
            "description": "1-5000, default 500"
          },
          "max_children": {
            "type": "string",
            "description": "0-10, default 5"
          },
          "contains": {
            "type": "string",
            "description": "Only URLs containing this text"
          }
        },
        "required": [
          "url"
        ]
      },
      "exampleResponse": {
        "type": "urlset",
        "count": 50,
        "urls": [
          {
            "loc": "https://…",
            "lastmod": "2026-01-01"
          }
        ]
      }
    },
    {
      "id": "tz-convert",
      "kind": "x402",
      "title": "tz-convert",
      "description": "IANA time zone conversion: an instant (ISO with offset, Z, or Unix) or a local wall time in a source zone converted to up to 20 zones, with UTC offset, abbreviation and DST gap/overlap handling (ambiguous times return both instants).",
      "path": "/api/tz-convert",
      "url": "https://forge-tools.dentreprise.workers.dev/api/tz-convert",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/tz-convert/",
      "category": "Utilities",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "time": "2026-03-29T02:30",
        "from": "Europe/Paris",
        "to": "America/New_York,Asia/Tokyo"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "time": {
            "type": "string",
            "description": "ISO date-time or local time; default now"
          },
          "from": {
            "type": "string",
            "description": "Source IANA zone for local times, default UTC"
          },
          "to": {
            "type": "string",
            "description": "Target zones, comma-separated"
          }
        },
        "required": [
          "to"
        ]
      },
      "exampleResponse": {
        "status": "ok",
        "results": [
          {
            "utc": "2026-11-10T15:00:00.000Z",
            "targets": [
              {
                "zone": "Asia/Tokyo",
                "local": "2026-11-11T00:00:00",
                "offset": "+09:00"
              }
            ]
          }
        ]
      }
    },
    {
      "id": "uuid-v7",
      "kind": "x402",
      "title": "uuid-v7",
      "description": "RFC 9562 UUIDv7 generator (time-sortable, 1-100 per call, optional timestamp) and UUID validator/decoder (version, variant, embedded timestamp for v1/v7).",
      "path": "/api/uuid-v7",
      "url": "https://forge-tools.dentreprise.workers.dev/api/uuid-v7",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/uuid-v7/",
      "category": "Utilities",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "count": "3"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "count": {
            "type": "string",
            "description": "1-100"
          },
          "timestamp": {
            "type": "string",
            "description": "ISO date for the time part"
          },
          "uuid": {
            "type": "string",
            "description": "UUID to validate/decode instead"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "version": 7,
        "count": 3,
        "uuids": [
          "019a6f2e-…"
        ]
      }
    },
    {
      "id": "siren-check",
      "kind": "x402",
      "title": "siren-check",
      "description": "French SIREN (9) / SIRET (14) checksum validation (Luhn, La Poste exception), formatting, NIC, and the derived intra-EU VAT number. Up to 100 numbers. Offline: no register call.",
      "path": "/api/siren-check",
      "url": "https://forge-tools.dentreprise.workers.dev/api/siren-check",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/siren-check/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "siren": "552032534"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "siren": {
            "type": "string",
            "description": "SIREN/SIRET number(s), comma-separated"
          }
        },
        "required": [
          "siren"
        ]
      },
      "exampleResponse": {
        "type": "SIREN",
        "valid": true,
        "vat_number_fr": "FR27552032534"
      }
    },
    {
      "id": "phone-parse",
      "kind": "x402",
      "title": "phone-parse",
      "description": "Phone number parsing and validation to E.164 (libphonenumber numbering plans): validity, country, calling code, type (mobile, fixed line, toll-free…), national/international formats, tel: URI. Up to 50 numbers. No carrier lookup, no call.",
      "path": "/api/phone-parse",
      "url": "https://forge-tools.dentreprise.workers.dev/api/phone-parse",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/phone-parse/",
      "category": "Utilities",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "phone": "+33 1 23 45 67 89"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "phone": {
            "type": "string",
            "description": "Number(s); separate with ; or newline"
          },
          "country": {
            "type": "string",
            "description": "Default ISO country for national numbers"
          }
        },
        "required": [
          "phone"
        ]
      },
      "exampleResponse": {
        "valid": true,
        "e164": "+33123456789",
        "country": "FR",
        "type": "FIXED_LINE"
      }
    },
    {
      "id": "x402-facilitator-health",
      "kind": "x402",
      "title": "x402-facilitator-health",
      "description": "x402 facilitator health check: calls GET /supported on a facilitator (or on a default list incl. CDP, xpay, x402.org, PayAI), reports alive/auth-required, latency, supported kinds (version, scheme, network), V2 and network support, and flags deprecated URLs.",
      "path": "/api/x402-facilitator-health",
      "url": "https://forge-tools.dentreprise.workers.dev/api/x402-facilitator-health",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/x402-facilitator-health/",
      "category": "x402 developer tools",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "network": "eip155:8453"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Facilitator base URL (optional)"
          },
          "network": {
            "type": "string",
            "description": "CAIP-2 network to check, default eip155:8453"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "checked": 4,
        "alive": 3,
        "results": [
          {
            "facilitator": "https://facilitator.xpay.sh",
            "alive": true,
            "supports_v2": true
          }
        ]
      }
    },
    {
      "id": "json-schema-validate",
      "kind": "x402",
      "title": "json-schema-validate",
      "description": "Validate LLM/agent JSON output against a JSON Schema (2020-12 subset) and auto-repair typical errors: code fences, trailing commas, numbers/booleans as strings, wrong enum case, single value instead of array, null optionals, extra or mis-cased keys, missing defaults. Returns errors, repaired JSON and fixes. POST recommended.",
      "path": "/api/json-schema-validate",
      "url": "https://forge-tools.dentreprise.workers.dev/api/json-schema-validate",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/json-schema-validate/",
      "category": "Agent builder tools",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "schema": {
          "type": "object",
          "properties": {
            "age": {
              "type": "integer"
            }
          },
          "required": [
            "age"
          ]
        },
        "data": "{\"age\": \"42\"}"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "schema": {
            "type": "object",
            "description": "JSON Schema"
          },
          "data": {
            "type": "string",
            "description": "JSON value or string to check"
          },
          "repair": {
            "type": "string",
            "description": "true (default) / false"
          }
        },
        "required": [
          "schema",
          "data"
        ]
      },
      "exampleResponse": {
        "valid": false,
        "errors": [
          {
            "path": "$.age",
            "msg": "expected integer, got string"
          }
        ],
        "repaired": {
          "age": 42
        },
        "repaired_valid": true
      }
    },
    {
      "id": "wikidata-entity",
      "kind": "x402",
      "title": "wikidata-entity",
      "description": "Wikidata entity lookup by Q-id or search text: label, description, aliases in a chosen language, key claims (instance of, country, coordinates, inception, website, population, HQ, founders, industry, identifiers such as LEI/ticker/ISNI…) with resolved labels, Wikipedia link.",
      "path": "/api/wikidata-entity",
      "url": "https://forge-tools.dentreprise.workers.dev/api/wikidata-entity",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/wikidata-entity/",
      "category": "Knowledge",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "q": "Annecy",
        "lang": "fr"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Q-id"
          },
          "q": {
            "type": "string",
            "description": "Search text (alternative)"
          },
          "lang": {
            "type": "string",
            "description": "Language code, default en"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "id": "Q50189",
        "label": "Annecy",
        "claims": {
          "country": [
            {
              "id": "Q142",
              "label": "France"
            }
          ]
        }
      }
    },
    {
      "id": "fr-communes",
      "kind": "x402",
      "title": "fr-communes",
      "description": "French municipalities (INSEE COG) by name, postcode or INSEE code: official name, INSEE code, postcodes, population, area, department, region, EPCI, SIREN, centre coordinates.",
      "path": "/api/fr-communes",
      "url": "https://forge-tools.dentreprise.workers.dev/api/fr-communes",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/fr-communes/",
      "category": "France open data",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "name": "Annecy"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Commune name"
          },
          "postcode": {
            "type": "string",
            "description": "5-digit postcode"
          },
          "insee": {
            "type": "string",
            "description": "5-char INSEE code"
          },
          "limit": {
            "type": "string",
            "description": "1-20"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "count": 1,
        "results": [
          {
            "name": "Annecy",
            "insee": "74010",
            "population": 132117,
            "department": {
              "code": "74"
            }
          }
        ]
      }
    },
    {
      "id": "fx-history",
      "kind": "x402",
      "title": "fx-history",
      "description": "Official ECB reference-rate time series for a currency pair (or up to 10 targets) over a date range up to 2 years: daily points plus first/last/min/max/mean/% change.",
      "path": "/api/fx-history",
      "url": "https://forge-tools.dentreprise.workers.dev/api/fx-history",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/fx-history/",
      "category": "Finance",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "from": "EUR",
        "to": "USD",
        "start": "2026-01-01",
        "end": "2026-03-31"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "description": "Base ISO 4217, default EUR"
          },
          "to": {
            "type": "string",
            "description": "Target(s), comma-separated"
          },
          "start": {
            "type": "string",
            "description": "YYYY-MM-DD"
          },
          "end": {
            "type": "string",
            "description": "YYYY-MM-DD, default today"
          }
        },
        "required": [
          "to",
          "start"
        ]
      },
      "exampleResponse": {
        "observations": 63,
        "series": {
          "USD": {
            "stats": {
              "min": 1.16,
              "max": 1.19,
              "change_pct": 1.2
            }
          }
        }
      }
    },
    {
      "id": "fr-school-calendar",
      "kind": "x402",
      "title": "fr-school-calendar",
      "description": "French school holidays (calendrier scolaire, Éducation nationale) by school year and zone A/B/C (or overseas/Corsica), with académies, start/end dates, and an optional date test (is this date a school holiday, and where).",
      "path": "/api/fr-school-calendar",
      "url": "https://forge-tools.dentreprise.workers.dev/api/fr-school-calendar",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/fr-school-calendar/",
      "category": "France open data",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "zone": "A",
        "year": "2026-2027"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "zone": {
            "type": "string",
            "description": "A, B, C or overseas zone"
          },
          "year": {
            "type": "string",
            "description": "School year e.g. 2026-2027"
          },
          "date": {
            "type": "string",
            "description": "YYYY-MM-DD to test"
          },
          "academie": {
            "type": "string",
            "description": "Académie name filter"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "school_year": "2026-2027",
        "count": 6,
        "periods": [
          {
            "description": "Vacances de la Toussaint",
            "start_local": "2026-10-17"
          }
        ]
      }
    },
    {
      "id": "openapi-to-mcp",
      "kind": "x402",
      "title": "openapi-to-mcp",
      "description": "Convert an OpenAPI spec (JSON/YAML, URL or inline) into MCP tool definitions: LLM-safe unique names, descriptions, JSON Schema inputSchema (query/path/header params + JSON body), MCP annotations (readOnly/destructive/idempotent), plus HTTP forwarding hints and a ready tools/list response.",
      "path": "/api/openapi-to-mcp",
      "url": "https://forge-tools.dentreprise.workers.dev/api/openapi-to-mcp",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/openapi-to-mcp/",
      "category": "MCP developer tools",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "url": "https://petstore3.swagger.io/api/v3/openapi.json"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Spec URL"
          },
          "spec": {
            "type": "object",
            "description": "Inline spec (POST)"
          },
          "base_url": {
            "type": "string",
            "description": "Override server URL"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "count": 19,
        "tools": [
          {
            "name": "getPetById",
            "inputSchema": {
              "type": "object"
            }
          }
        ]
      }
    },
    {
      "id": "sanctions-check",
      "kind": "x402",
      "title": "sanctions-check",
      "description": "Sanctions screening of a person, company or vessel name against the US Consolidated Screening List (OFAC SDN with aliases plus other Treasury, Commerce BIS and State lists), the EU consolidated financial sanctions list (FSF), the French national asset-freeze register (DG Trésor) and the UK sanctions list (FCDO). Fuzzy Jaro-Winkler token matching with score, programmes, DOB; lists refreshed daily.",
      "path": "/api/sanctions-check",
      "url": "https://forge-tools.dentreprise.workers.dev/api/sanctions-check",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/sanctions-check/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.005,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "5000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "name": "Bank Rossiya",
        "type": "entity"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name to screen"
          },
          "type": {
            "type": "string",
            "description": "person, entity or vessel (optional)"
          },
          "lists": {
            "type": "string",
            "description": "ofac,eu,fr,uk (default all)"
          },
          "threshold": {
            "type": "string",
            "description": "0.7-1, default 0.88"
          },
          "max": {
            "type": "string",
            "description": "1-50"
          }
        },
        "required": [
          "name"
        ]
      },
      "exampleResponse": {
        "query": "Bank Rossiya",
        "match": true,
        "highest_score": 1,
        "hits": [
          {
            "list": "eu",
            "name": "Bank Rossiya",
            "score": 1,
            "programmes": "UKR"
          }
        ]
      }
    },
    {
      "id": "fr-legal-status",
      "kind": "x402",
      "title": "fr-legal-status",
      "description": "French company legal status by SIREN/SIRET: Sirene administrative status (active/ceased, closure date, legal form, NAF, head office) plus BODACC collective proceedings (sauvegarde, redressement, liquidation judiciaire, clôture) with latest stage, ongoing flag and risk level.",
      "path": "/api/fr-legal-status",
      "url": "https://forge-tools.dentreprise.workers.dev/api/fr-legal-status",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/fr-legal-status/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "siren": "552032534"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "siren": {
            "type": "string",
            "description": "SIREN or SIRET"
          },
          "max": {
            "type": "string",
            "description": "notices 1-50"
          }
        },
        "required": [
          "siren"
        ]
      },
      "exampleResponse": {
        "siren": "552032534",
        "company": {
          "name": "DANONE",
          "status": "active"
        },
        "collective_proceedings": {
          "count": 0,
          "ongoing": false
        },
        "risk": "none_found"
      }
    },
    {
      "id": "eu-tenders",
      "kind": "x402",
      "title": "eu-tenders",
      "description": "Public tender scanner: keyword search across BOAMP (France) and TED (EU Official Journal, all member states) since a date, merged and sorted: title, buyer, publication date, deadline, notice type, country, CPV codes and link.",
      "path": "/api/eu-tenders",
      "url": "https://forge-tools.dentreprise.workers.dev/api/eu-tenders",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/eu-tenders/",
      "category": "Sales & tenders",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "q": "logiciel",
        "since": "2026-11-01"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Keywords"
          },
          "since": {
            "type": "string",
            "description": "YYYY-MM-DD, default 30 days ago"
          },
          "sources": {
            "type": "string",
            "description": "boamp,ted"
          },
          "country": {
            "type": "string",
            "description": "TED buyer country ISO alpha-3, e.g. DEU"
          },
          "max": {
            "type": "string",
            "description": "1-50 per source"
          }
        },
        "required": [
          "q"
        ]
      },
      "exampleResponse": {
        "count": 20,
        "results": [
          {
            "source": "TED",
            "title": "Software development services",
            "buyer": "…",
            "deadline": "2026-12-01"
          }
        ]
      }
    },
    {
      "id": "uk-postcode",
      "kind": "x402",
      "title": "uk-postcode",
      "description": "UK postcode lookup and validation (postcodes.io, ONS/OS open data): country, region, district, ward, parish, constituency, lat/lon, eastings/northings, NUTS; terminated postcodes detected; reverse lookup from lat/lon.",
      "path": "/api/uk-postcode",
      "url": "https://forge-tools.dentreprise.workers.dev/api/uk-postcode",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/uk-postcode/",
      "category": "Postcodes & addresses",
      "price": {
        "amount": 0.001,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "1000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "postcode": "SW1A 1AA"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "postcode": {
            "type": "string",
            "description": "UK postcode"
          },
          "lat": {
            "type": "string",
            "description": "reverse: latitude"
          },
          "lon": {
            "type": "string",
            "description": "reverse: longitude"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "valid": true,
        "postcode": "SW1A 1AA",
        "admin_district": "Westminster",
        "lat": 51.501,
        "lon": -0.1416
      }
    },
    {
      "id": "eu-address",
      "kind": "x402",
      "title": "eu-address",
      "description": "Address geocoding and normalisation through official national open services: France (Base Adresse Nationale), Netherlands (PDOK/BAG), Spain (CartoCiudad/IGN), Switzerland (swisstopo). Returns normalised label, street, number, postcode, city, region, coordinates and score.",
      "path": "/api/eu-address",
      "url": "https://forge-tools.dentreprise.workers.dev/api/eu-address",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/eu-address/",
      "category": "Postcodes & addresses",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "address": "Damrak 1 Amsterdam",
        "country": "NL"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Free-text address"
          },
          "country": {
            "type": "string",
            "description": "FR, NL, ES or CH"
          },
          "limit": {
            "type": "string",
            "description": "1-10"
          }
        },
        "required": [
          "address",
          "country"
        ]
      },
      "exampleResponse": {
        "country": "NL",
        "count": 1,
        "results": [
          {
            "label": "Damrak 1, 1012LG Amsterdam",
            "postcode": "1012LG",
            "lat": 52.37,
            "lon": 4.89
          }
        ]
      }
    },
    {
      "id": "no-company",
      "kind": "x402",
      "title": "no-company",
      "description": "Norwegian company register (Brønnøysundregistrene) by org number or name: legal form, registration and founding dates, VAT registration and VAT number, bankruptcy, liquidation and forced-dissolution flags, employees, industry, address, website.",
      "path": "/api/no-company",
      "url": "https://forge-tools.dentreprise.workers.dev/api/no-company",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/no-company/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "orgnr": "923609016"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "orgnr": {
            "type": "string",
            "description": "9-digit org number"
          },
          "name": {
            "type": "string",
            "description": "Name search"
          },
          "max": {
            "type": "string",
            "description": "1-20"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "found": true,
        "name": "EQUINOR ASA",
        "vat_registered": true,
        "bankrupt": false
      }
    },
    {
      "id": "fi-company",
      "kind": "x402",
      "title": "fi-company",
      "description": "Finnish company register (PRH / YTJ open data) by Business ID (Y-tunnus) or name: current name, registration date, legal form, status, trade-register status, main business line, address, website, EUID and derived VAT number.",
      "path": "/api/fi-company",
      "url": "https://forge-tools.dentreprise.workers.dev/api/fi-company",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/fi-company/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "business_id": "0112038-9"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "business_id": {
            "type": "string",
            "description": "Y-tunnus 1234567-8"
          },
          "name": {
            "type": "string",
            "description": "Name search"
          },
          "max": {
            "type": "string",
            "description": "1-20"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "total": 1,
        "results": [
          {
            "business_id": "0112038-9",
            "name": "Nokia Oyj",
            "vat_number": "FI01120389"
          }
        ]
      }
    },
    {
      "id": "uk-company",
      "kind": "x402",
      "title": "uk-company",
      "description": "UK company register (official Companies House API): search by name, or lookup by company number with profile (status, type, incorporation/dissolution, SIC codes, registered office, previous names), officer counts (active/resigned) and filing status (accounts and confirmation statement due/overdue), insolvency, liquidation and charges flags.",
      "path": "/api/uk-company",
      "url": "https://forge-tools.dentreprise.workers.dev/api/uk-company",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/uk-company/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.002,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "company_number": "00445790"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "company_number": {
            "type": "string",
            "description": "8-char company number"
          },
          "name": {
            "type": "string",
            "description": "Name search (alternative)"
          },
          "max": {
            "type": "string",
            "description": "1-20"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "found": true,
        "name": "TESCO PLC",
        "status": "active",
        "officers": {
          "active": 12
        },
        "filing": {
          "accounts_overdue": false
        }
      }
    },
    {
      "id": "kyb-check-uk",
      "kind": "x402",
      "title": "kyb-check-uk",
      "description": "One-call KYB for a UK company (company number or name): Companies House profile, officers and filing status, insolvency/liquidation flags, plus sanctions screening (US CSL/OFAC, EU, FR, UK) of the registered name, with a pass/review/fail verdict and flags.",
      "path": "/api/kyb-check-uk",
      "url": "https://forge-tools.dentreprise.workers.dev/api/kyb-check-uk",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/kyb-check-uk/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.01,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "10000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "company_number": "00445790"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "company_number": {
            "type": "string",
            "description": "8-char company number"
          },
          "name": {
            "type": "string",
            "description": "Name (alternative; best match is checked)"
          }
        },
        "required": []
      },
      "exampleResponse": {
        "verdict": "pass",
        "flags": [],
        "company": {
          "name": "TESCO PLC",
          "status": "active"
        },
        "sanctions": {
          "match": false
        }
      }
    },
    {
      "id": "eu-carbon-customs",
      "kind": "x402",
      "title": "eu-carbon-customs",
      "description": "EU CBAM (carbon border adjustment) default embedded emissions for a CN/TARIC code and country of origin, from the official Commission default-values file: direct, indirect and total tCO2e per tonne, production route, year mark-up, and optional embedded emissions and certificate cost for a shipment (tonnes, EUR price).",
      "path": "/api/eu-carbon-customs",
      "url": "https://forge-tools.dentreprise.workers.dev/api/eu-carbon-customs",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/eu-carbon-customs/",
      "category": "Customs & trade",
      "price": {
        "amount": 0.003,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "3000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "cn": "72081000",
        "country": "CN",
        "tonnes": "100",
        "price_eur": "75"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "cn": {
            "type": "string",
            "description": "CN/TARIC code 4-10 digits"
          },
          "country": {
            "type": "string",
            "description": "Origin country name or ISO alpha-2"
          },
          "year": {
            "type": "string",
            "description": "2026+"
          },
          "tonnes": {
            "type": "string",
            "description": "Shipment mass in tonnes (optional)"
          },
          "price_eur": {
            "type": "string",
            "description": "CBAM certificate price EUR/tCO2e (optional)"
          }
        },
        "required": [
          "cn",
          "country"
        ]
      },
      "exampleResponse": {
        "cn": "72081000",
        "country_table": "China",
        "items": [
          {
            "description": "Flat-rolled products…",
            "total": 2.5,
            "total_with_markup": 2.75,
            "embedded_emissions_t": 275
          }
        ]
      }
    },
    {
      "id": "kyb-check-eu",
      "kind": "x402",
      "title": "kyb-check-eu",
      "description": "One-call KYB for any EU company by VAT number: VIES validity with registered name/address, sanctions screening (US CSL/OFAC, EU, FR, UK) of the name, GLEIF LEI candidates, plus national register data for France (Sirene + BODACC proceedings) and Finland (PRH), with a pass/review/fail verdict.",
      "path": "/api/kyb-check-eu",
      "url": "https://forge-tools.dentreprise.workers.dev/api/kyb-check-eu",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/kyb-check-eu/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.01,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "10000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "vat": "FR27552032534"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "vat": {
            "type": "string",
            "description": "EU VAT number with country prefix"
          },
          "name": {
            "type": "string",
            "description": "Company name if VIES does not publish it"
          }
        },
        "required": [
          "vat"
        ]
      },
      "exampleResponse": {
        "vat": "FR27552032534",
        "verdict": "pass",
        "flags": [],
        "vies": {
          "valid": true,
          "name": "SA DANONE"
        },
        "sanctions": {
          "match": false
        }
      }
    },
    {
      "id": "kyb-check-fr",
      "kind": "x402",
      "title": "kyb-check-fr",
      "description": "One-call KYB for a French company (SIREN/SIRET): Sirene identity and status, BODACC collective proceedings, VIES intra-EU VAT validity (derived FR number) and sanctions screening (OFAC, EU, FR, UK) of the legal name, with a pass/review/fail verdict and flags.",
      "path": "/api/kyb-check-fr",
      "url": "https://forge-tools.dentreprise.workers.dev/api/kyb-check-fr",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/kyb-check-fr/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.01,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "10000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "siren": "552032534"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "siren": {
            "type": "string",
            "description": "SIREN or SIRET"
          }
        },
        "required": [
          "siren"
        ]
      },
      "exampleResponse": {
        "siren": "552032534",
        "verdict": "pass",
        "flags": [],
        "vat": {
          "valid": true
        },
        "sanctions": {
          "match": false
        }
      }
    },
    {
      "id": "supplier-due-diligence",
      "kind": "x402",
      "title": "supplier-due-diligence",
      "description": "Supplier due diligence for any company name (optionally VAT number and country): VIES VAT check, UK Companies House profile when country=GB, GLEIF LEI candidates with entity and registration status, and sanctions screening (OFAC, EU, FR, UK), with a pass/review/fail verdict and flags.",
      "path": "/api/supplier-due-diligence",
      "url": "https://forge-tools.dentreprise.workers.dev/api/supplier-due-diligence",
      "host": "https://forge-tools.dentreprise.workers.dev",
      "methods": [
        "GET",
        "POST"
      ],
      "docs": "https://agent-hub.dentreprise.workers.dev/tools/supplier-due-diligence/",
      "category": "Company & trade identifiers",
      "price": {
        "amount": 0.01,
        "currency": "USDC",
        "network": "eip155:8453",
        "networkName": "Base",
        "atomic": "10000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
        "per": "call"
      },
      "input": {
        "name": "Nokia Oyj",
        "country": "FI",
        "vat": "FI01120389"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Company name"
          },
          "country": {
            "type": "string",
            "description": "ISO alpha-2"
          },
          "vat": {
            "type": "string",
            "description": "EU VAT number (optional)"
          }
        },
        "required": [
          "name"
        ]
      },
      "exampleResponse": {
        "verdict": "pass",
        "flags": [],
        "vat": {
          "valid": true
        },
        "lei": {
          "candidates": [
            {
              "lei": "…",
              "status": "ACTIVE"
            }
          ]
        },
        "sanctions": {
          "match": false
        }
      }
    }
  ],
  "actors": [
    {
      "id": "swiss-uid-vat-validator",
      "kind": "apify",
      "title": "Swiss UID / VAT validator",
      "description": "Bulk Swiss UID/VAT (MWST/TVA/IVA) validation and company lookup against the official federal UID register. Detects VAT groups, checks the check digit offline, and redacts sole-proprietor names by default.",
      "url": "https://apify.com/characteristic_division/swiss-uid-vat-validator",
      "public": true,
      "docs": "https://agent-hub.dentreprise.workers.dev/actors/swiss-uid-vat-validator/",
      "category": "Company data",
      "source": "Swiss Federal Statistical Office UID-Register (uid-wse), official, no auth, about 20 lookups/min.",
      "pricing": {
        "model": "pay-per-event",
        "events": [
          {
            "event": "registry-record",
            "price_usd": 0.003,
            "primary": true
          },
          {
            "event": "format-check",
            "price_usd": 0.0005
          },
          {
            "event": "apify-actor-start",
            "price_usd": 0.001
          }
        ],
        "notes": "Invalid numbers that fail the check digit are charged as format-check only. Errors are free."
      },
      "related_x402": [
        "/api/ch-uid",
        "/api/ch-uid-batch"
      ]
    },
    {
      "id": "dvf-price-per-m2-batch",
      "kind": "apify",
      "title": "DVF price per m² (batch)",
      "description": "For a list of French addresses or coordinates, returns median, P25 and P75 €/m² from official DVF sales (apartments and houses separately), with an optional value range for a given surface. Alsace-Moselle and Mayotte are flagged and not charged.",
      "url": "https://apify.com/characteristic_division/dvf-price-per-m2-batch",
      "public": true,
      "docs": "https://agent-hub.dentreprise.workers.dev/actors/dvf-price-per-m2-batch/",
      "category": "France property & address",
      "source": "geo-dvf CSVs on files.data.gouv.fr (Etalab, Licence Ouverte 2.0) and the Base Adresse Nationale geocoder.",
      "pricing": {
        "model": "pay-per-event",
        "events": [
          {
            "event": "address-report",
            "price_usd": 0.01,
            "primary": true
          },
          {
            "event": "apify-actor-start",
            "price_usd": 0.001
          }
        ],
        "notes": "Failures are free."
      },
      "related_x402": [
        "/api/dvf-price-m2",
        "/api/fr-address"
      ]
    },
    {
      "id": "bodacc-siren-health-check",
      "kind": "apify",
      "title": "BODACC SIREN health check",
      "description": "Batch check of SIREN/SIRET/FR-VAT numbers against official BODACC notices: insolvency stage and history, strike-off, late accounts, business sales, and an explained risk level. Sole traders are masked by default.",
      "url": "https://apify.com/characteristic_division/bodacc-siren-health-check",
      "public": true,
      "docs": "https://agent-hub.dentreprise.workers.dev/actors/bodacc-siren-health-check/",
      "category": "Company data",
      "source": "BODACC open-data API (DILA, Opendatasoft, Licence Ouverte 2.0), no key required.",
      "pricing": {
        "model": "pay-per-event",
        "events": [
          {
            "event": "siren-report",
            "price_usd": 0.003,
            "primary": true
          },
          {
            "event": "empty-check",
            "price_usd": 0.0005
          },
          {
            "event": "apify-actor-start",
            "price_usd": 0.001
          }
        ],
        "notes": "Invalid input and errors are free."
      },
      "related_x402": [
        "/api/bodacc-health",
        "/api/fr-company"
      ]
    },
    {
      "id": "sheets-sync-service-account",
      "kind": "apify",
      "title": "Google Sheets sync (service account)",
      "description": "Import, export, append and upsert Google Sheets rows with a service account (no OAuth expiry). The buyer provides their own key. Cell values default to RAW to reduce formula injection risk.",
      "url": "https://apify.com/characteristic_division/sheets-sync-service-account",
      "public": true,
      "docs": "https://agent-hub.dentreprise.workers.dev/actors/sheets-sync-service-account/",
      "category": "Integrations",
      "source": "Google Sheets API v4, authenticated with the buyer's service account.",
      "pricing": {
        "model": "pay-per-event",
        "events": [
          {
            "event": "rows-1000",
            "price_usd": 0.002,
            "primary": true
          },
          {
            "event": "apify-actor-start",
            "price_usd": 0.005
          }
        ],
        "notes": "Charged per 1,000 rows processed. The buyer must share the sheet with the service account."
      },
      "related_x402": []
    }
  ]
}
