Attestry

Documentation

Base URL https://attestry.cashflowedx.com. The machine-readable description is at /v1/openapi.json (OpenAPI 3.1).

Quick start

Create an account, confirm your e-mail address, and create an API key in the console. The key is shown once. Send it as a Bearer token.

curl -s https://attestry.cashflowedx.com/v1/companies/search \
  -H "Authorization: Bearer $ATTESTRY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Siemens", "country": "DE", "limit": 5}'

How responses are shaped

Success is always {"data": …, "meta": {…}}. Failure is always {"error": {"code", "message", "details", "request_id"}} with a matching HTTP status. Every response carries an X-Request-Id header; quote it when you contact support.

Each field of a record is an object:

"legal_name": {
  "value": "…",
  "status": "verified",          // verified | unverified | inferred | unavailable
  "source": "gleif",
  "source_record_id": "…",
  "collected_at": "2026-11-12T09:30:00+00:00",
  "verified_at": "2026-10-02T07:11:42Z",
  "confidence": 0.95,
  "permitted_purposes": ["any_lawful_purpose"],
  "retention_days": 365,
  "restrictions": ["do_not_imply_gleif_endorsement"]
}

Send "view": "flat" to get only value and status per field. A field no source could supply is returned as {"value": null, "status": "unavailable"}; it is never filled with a guess.

Credits, limits and errors

Connect an AI agent (MCP)

The MCP endpoint is https://attestry.cashflowedx.com/mcp (Streamable HTTP). Authenticate with the same API key as a Bearer token.

# Claude Code
claude mcp add --transport http attestry https://attestry.cashflowedx.com/mcp \
  --header "Authorization: Bearer $ATTESTRY_API_KEY"

# Cursor, and other clients that read an mcp.json file
{
  "mcpServers": {
    "attestry": {
      "url": "https://attestry.cashflowedx.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Tools: search_companies, enrich_company, get_company_information, search_people, enrich_contact, verify_business_email, batch_enrich_companies, get_account_usage, list_data_sources.

Apps that sign in through the browser, such as custom connectors in the Claude and ChatGPT web apps, need only the address https://attestry.cashflowedx.com/mcp. They register themselves, send you to an Attestry page to approve access (OAuth 2.1 with PKCE), and can be disconnected in the console under Connect an agent.

Webhooks

Add an https endpoint in the console or with POST /v1/webhooks. Attestry sends batch.completed events. Each delivery has an Attestry-Signature: t=<unix time>,v1=<hex> header: the HMAC-SHA256 of <t>.<raw body> with your endpoint secret. Reject deliveries whose signature does not match or whose timestamp is more than five minutes old.

Endpoint reference

Companies

POST/v1/companies/search

Search companies
Search by name, domain, country, region, industry or headcount. Which filters work depends on the enabled data sources (see GET /v1/sources); an unsupported filter is rejected, not ignored.

FieldTypeNotes
namestringoptional
domainstringoptional
countrystringoptional. ISO 3166-1 alpha-2, e.g. US, GB, DE
regionstringoptional
industrystringoptional
employee_minintegeroptional
employee_maxintegeroptional
revenue_min_usdintegeroptional
revenue_max_usdintegeroptional
limitintegeroptional
offsetintegeroptional
viewfull | flatoptional

POST/v1/companies/enrich

Enrich one company
Look one company up by LEI, registration number + country, domain, or exact legal name, and merge what every enabled source knows. Each field carries its own source and status.

FieldTypeNotes
leistringoptional
registration_numberstringoptional
countrystringoptional
domainstringoptional
namestringoptional
viewfull | flatoptional

People

POST/v1/people/search

Search professionals
Professionals by company, title, seniority or department, in one named country. Available on paid plans and only for countries enabled on this deployment.

FieldTypeNotes
company_namestringoptional
company_domainstringoptional
job_titlestringoptional
senioritystringoptional
departmentstringoptional
countrystringoptional
regionstringoptional
limitintegeroptional
offsetintegeroptional
viewfull | flatoptional

POST/v1/people/enrich

Enrich one professional record

FieldTypeNotes
full_namestringoptional
company_domainstringoptional
company_namestringoptional
work_emailstringoptional
profile_urlstringoptional
countrystringoptional
viewfull | flatoptional

E-mail

POST/v1/emails/verify

Check a business e-mail address
Syntax, the domain's live mail-server records, disposable and role-address detection. The mailbox itself is not probed and is reported as unverified.

FieldTypeNotes
emailstringrequired

POST/v1/emails/lookup

Find a work e-mail from a licensed source
Returns an address only when a licensed source holds one. Addresses are never guessed.

FieldTypeNotes
full_namestringrequired
company_domainstringoptional
company_namestringoptional
countrystringoptional

Batches

POST/v1/batches

Start a batch
Queue up to your plan's batch size of enrich or verify items. Poll GET /v1/batches/{id} or receive a `batch.completed` webhook.

FieldTypeNotes
operationcompanies.enrich | people.enrich | emails.verifyrequired
itemsarrayrequired

GET/v1/batches/{batch_id}

Get a batch and its results

Account

GET/v1/account

Account, plan and capabilities

GET/v1/usage

Usage for a period

GET/v1/billing

Plan, subscription status and credit prices

Transparency

GET/v1/sources no key needed

Every data source, its licence and its limits
Public. Lists each source Attestry can draw on, whether it is enabled here, what its licence permits and how long Attestry stores its data.

GET/v1/plans no key needed

Plans and limits

POST/v1/privacy-requests no key needed

File a data-subject request
Public. Anyone can ask for access, erasure, correction, or to object / opt out. The request takes effect once the address is confirmed through the e-mailed link.

FieldTypeNotes
request_typeaccess | erasure | objection | correction | opt_out_of_salerequired
emailstringrequired
full_namestringoptional
jurisdictionstringoptional
detailsstringoptional

Webhooks

GET/v1/webhooks

List webhook endpoints

POST/v1/webhooks

Add a webhook endpoint
The signing secret is returned once. Verify `Attestry-Signature: t=<unix>,v1=<hex>` as HMAC-SHA256 of `<t>.<raw body>`.

FieldTypeNotes
urlstringrequired

DELETE/v1/webhooks/{endpoint_id}

Remove a webhook endpoint