Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Fuentio Keys API
summary: Verify any company in France, Spain or the United Kingdom in one call, with sources an auditor accepts.
description: 'Start here: the sandbox quickstart (curl examples, a Postman collection, MCP setup and companies to try). What each outcome means: /docs/outcomes. Errors: /docs/errors.'
version: 0.1.0
tags:
- name: Keys
paths:
/v1/keys:
post:
tags:
- Keys
summary: Create a free API key
description: 'Creates a key on the Free plan (100 units a month, 2 requests per second, 5 monitors) instantly. The key is emailed to that address (on the production server; the answer then says "Check your email" and holds no key), or shown **once** here where email is off. **One free key per person:** `email` is required; an email that already has an active free key, or an address that created a free key in the last 30 days, gets 409 `already_exists`. `label` is optional. Send the key as `Authorization: Bearer ` or `X-API-Key`. Free.'
operationId: create_key_v1_keys_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeyRequest'
required: true
responses:
'201':
description: Successful Response
content:
application/json:
schema: {}
'409':
description: You already have a free key (one per person).
content:
application/json:
example:
meta:
request_id: req_example
error:
code: already_exists
message: You already have a free key. Lost it? Write to hello@fuentio.com.
hint: Use the free key you already have. Lost it? Write to hello@fuentio.com.
docs_url: https://api.fuentio.com/docs/errors#already_exists
/v1/usage:
get:
tags:
- Keys
summary: Plan, quota and usage for the calling key
description: Your plan, the current period, units used and remaining, your rate limit, and monitors used and allowed. Without a key it reports the keyless trial for your address. Free.
operationId: get_usage_v1_usage_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
additionalProperties: true
type: object
title: Response Get Usage V1 Usage Get
/v1/keys/me:
delete:
tags:
- Keys
summary: Revoke the calling key
description: Revokes **the key sent with this request**, at once and for good (a leaked key, an app you stop using). Later calls with it answer `unauthorized`. Create a new key with POST /v1/keys. Free.
operationId: revoke_own_key_v1_keys_me_delete
responses:
'200':
description: Successful Response
content:
application/json:
schema:
additionalProperties: true
type: object
title: Response Revoke Own Key V1 Keys Me Delete
/v1/keys/me/rotate:
post:
tags:
- Keys
summary: Replace the calling key with a new one
description: 'Returns a **new key** on the same plan, with the same usage, receipts and subscription. The key sent with this request keeps working for 24 hours (time to deploy the new one), then stops. The new key is shown once: store it. Free.'
operationId: rotate_own_key_v1_keys_me_rotate_post
responses:
'200':
description: Successful Response
content:
application/json:
schema:
additionalProperties: true
type: object
title: Response Rotate Own Key V1 Keys Me Rotate Post
components:
schemas:
KeyRequest:
properties:
email:
type: string
maxLength: 254
pattern: ^[^@\s]+@[^@\s]+\.[^@\s]+$
title: Email
description: 'Required: one free key per person.'
examples:
- dev@example.com
label:
anyOf:
- type: string
maxLength: 80
- type: 'null'
title: Label
use_case:
anyOf:
- type: string
enum:
- kyb
- suppliers
- due_diligence
- ai_agent
- other
- type: 'null'
title: Use Case
description: 'Optional: what the key is for (KYB / onboarding, supplier checks, due diligence, an AI agent, other). Stored with the key.'
examples:
- kyb
additionalProperties: false
type: object
required:
- email
title: KeyRequest