fr-legal-status
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.
Endpoint
GET|POST https://forge-tools.dentreprise.workers.dev/api/fr-legal-status
Parameters
| Name | Required | Type | Description |
|---|---|---|---|
siren | Required | string | SIREN or SIRET |
max | Optional | string | notices 1-50 |
Example request (unpaid — expect 402)
curl -sS -D - "https://forge-tools.dentreprise.workers.dev/api/fr-legal-status?siren=552032534"
Example 402 challenge
The same object is also sent as a base64 PAYMENT-REQUIRED header. Amounts are atomic USDC units (6 decimals).
{
"x402Version": 2,
"error": "Payment required",
"resource": {
"url": "https://forge-tools.dentreprise.workers.dev/api/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.",
"mimeType": "application/json"
},
"accepts": [
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "3000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x7B8bf45ac6AcbA6D4CFB626b57D3f5fF3C9C89F7",
"maxTimeoutSeconds": 120,
"extra": {
"name": "USD Coin",
"version": "2"
}
}
]
}Retry with payment
curl -sS "https://forge-tools.dentreprise.workers.dev/api/fr-legal-status?siren=552032534" \ -H "PAYMENT-SIGNATURE: $PAYMENT"
Example response
{
"siren": "552032534",
"company": {
"name": "DANONE",
"status": "active"
},
"collective_proceedings": {
"count": 0,
"ongoing": false
},
"risk": "none_found"
}Free demo / sample
This tool is on the wave-1 worker. ?demo=1 returns a labelled sample or excerpt with HTTP 200 and no payment. The body is not live data. First 3 successful real calls per IP per UTC day are also free.
curl -sS "https://forge-tools.dentreprise.workers.dev/api/fr-legal-status?siren=552032534&demo=1"
Labelled demo response
{
"demo": true,
"demo_label": "DEMO / SAMPLE — not live data. This is a labelled example response and was not charged.",
"charged": false,
"tool": "/api/fr-legal-status",
"docs": "https://agent-hub.dentreprise.workers.dev/tools/fr-legal-status/",
"how_to_get_live_data": "Call the same URL without demo=1. The first 3 successful real calls per IP per UTC day are free; after that attach an x402 v2 PAYMENT-SIGNATURE (USDC on Base).",
"sample": {
"siren": "552032534",
"company": {
"name": "DANONE",
"status": "active"
},
"collective_proceedings": {
"count": 0,
"ongoing": false
},
"risk": "none_found"
}
}JavaScript — @x402/fetch
Official x402 v2 client. Install @x402/fetch and @x402/evm. The older package name x402-fetch is the deprecated v1 line and should not be used for these endpoints.
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
// Official x402 v2 client. The older package name "x402-fetch" is the deprecated v1 line.
const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);
const fetchWithPayment = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const res = await fetchWithPayment(
"https://forge-tools.dentreprise.workers.dev/api/fr-legal-status?siren=552032534"
);
console.log(await res.json());Python — x402
Official PyPI package x402. Use x402HttpxClient (async) or x402_requests (sync) after register_exact_evm_client with EthAccountSigner.
import asyncio
import os
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
# Official PyPI package: x402
account = Account.from_key(os.environ["EVM_PRIVATE_KEY"])
client = x402Client()
register_exact_evm_client(client, EthAccountSigner(account))
async def main():
async with x402HttpxClient(client) as http:
res = await http.get("https://forge-tools.dentreprise.workers.dev/api/fr-legal-status?siren=552032534")
print(res.json())
asyncio.run(main())
# Sync alternative:
# from x402 import x402ClientSync
# from x402.http.clients import x402_requests
# client = x402ClientSync()
# register_exact_evm_client(client, EthAccountSigner(account))
# with x402_requests(client) as session:
# print(session.get("https://forge-tools.dentreprise.workers.dev/api/fr-legal-status?siren=552032534").json())MCP server — forge-agent-mcp
stdio covers the full catalog (both API hosts). Clone forge-agent-mcp and point your MCP client at src/server.mjs. The hosted Streamable HTTP remote at the original gateway still exposes the original gateway tools only.
{
"mcpServers": {
"forge-agent-hub": {
"command": "node",
"args": ["/path/to/forge-agent-mcp/src/server.mjs"]
},
"forge-agent-api": {
"url": "https://x402-gateway.forge-x402.workers.dev/mcp",
"transport": "streamable-http"
}
}
}LangChain tool wrapper
Wrap the same x402 clients as a LangChain tool with DynamicStructuredTool (@langchain/core) or @tool (langchain_core).
import { DynamicStructuredTool } from "@langchain/core/tools";
import { z } from "zod";
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);
const fetchWithPayment = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
export const fr_legal_status = new DynamicStructuredTool({
name: "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.",
schema: z.object({}),
func: async (input) => {
const res = await fetchWithPayment("https://forge-tools.dentreprise.workers.dev/api/fr-legal-status" + "?" + new URLSearchParams(input));
return JSON.stringify(await res.json());
},
});import os
from langchain_core.tools import tool
from eth_account import Account
from x402 import x402ClientSync
from x402.http.clients import x402_requests
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
account = Account.from_key(os.environ["EVM_PRIVATE_KEY"])
client = x402ClientSync()
register_exact_evm_client(client, EthAccountSigner(account))
@tool
def fr_legal_status() -> str:
"""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."""
with x402_requests(client) as session:
return session.get("https://forge-tools.dentreprise.workers.dev/api/fr-legal-status").textRelated endpoints
lei-lookup
Legal Entity Identifier lookup from the official GLEIF register: by LEI (with ISO 17442 checksum check) or by legal-name search with optional country.
eori-validate
EORI number validation (customs trader ID) against the official European Commission EOS register, and UK GB numbers against HMRC.
siren-check
French SIREN (9) / SIRET (14) checksum validation (Luhn, La Poste exception), formatting, NIC, and the derived intra-EU VAT number.
sanctions-check
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).