Workspace-scoped credentials for Fini’s public APIs. Create, manage, and revoke keys for backend services and internal tools.
Fini API keys are workspace-scoped credentials for the public APIs documented in the API overview. Use them when an external service, backend job, BI pipeline, or internal tool needs programmatic access to Fini without going through a dashboard user session.
Workspace API keys currently use two scopes: read and write. The current Deploy → API Keys screen lets you choose either or both scopes, and the create form starts with both selected.
Agent listing, interaction export, document reads, folder snapshots, article reads, and knowledge-job status lookups
write
Mutation and execution operations
Conversation events, document crawl and ingestion, folder and article create/update/move/delete, agent-folder attachments, and knowledge generation or import
Use least privilege:
Keep Write off for export-only or analytics-only workflows.
Include Write when the integration needs to send conversation events, ingest or refresh documents, or manage knowledge content.
Some read endpoints use POST, so pick scopes by endpoint purpose, not by HTTP method alone.
Use a name that tells you where the key is used, such as Warehouse export, Internal dashboard, or Zapier sync. The name is the only thing you’ll see in the table later, so be specific.
3
Choose the scopes
The form shows two checkboxes: Read and Write. Both are selected by default. Leave only the scopes this integration actually needs.
4
Click Create key
Fini generates the key and immediately shows the plaintext secret in a warning card, along with the scopes assigned to that key.
5
Copy and store it now
This is the only time the full key value is shown. Once you dismiss the warning card, you’ll only see the short prefix in the table.
If the key only needs to export data, uncheck Write before you create it. Separate keys with separate scope sets make revocation and incident response much easier.
If you lose the plaintext value, Fini cannot show it again. Create a new key and revoke the old one instead. There is no recovery flow.
The visible beginning of the key, for example fini_abc12…. Enough to match a key against a system that’s using it, never enough to reconstruct the secret.
The most recent time the API accepted this key. If null or stale, the key is either unused or pointed at a system that’s broken.
Use separate keys for separate systems whenever possible. Rotation, debugging, and incident response all become easier when a single key maps to a single application.
Do not send the key as x-api-key or as a query parameter. The public API guard expects an Authorization: Bearer header. Other transports will be rejected with 401 Unauthorized.
For the full endpoint list, request and response shapes, and error semantics, see the API reference.
Never ship a Fini API key in browser code, mobile app bundles, or anywhere a customer can inspect. Keys belong in your backend secrets manager, or environment variables on a server you control.
One key per application or workflow
Avoid the shared-key anti-pattern. Separate keys for your warehouse export, your internal dashboard, and your Zapier flow means you can revoke or rotate one without breaking the others, and you can tell from the Last used column which system is calling.
Revoke immediately on teammate offboarding or integration retirement
Anyone who had access to a key in plaintext can still use it after they leave. Treat key revocation as part of offboarding. Same on the system side: when an integration is retired, revoke its key the same day.
Rotate on suspected leakage
If a key may have been exposed, committed to git, leaked in a log, or shared in a screenshot, revoke it immediately and create a replacement. Rotation is cheap, investigation later is not.
Use descriptive names
The name is the only thing standing between you and a row of indistinguishable fini_abc12… prefixes. Warehouse export, nightly cron, not key 3.
I dismissed the warning card and now I need the key again
The full value is shown exactly once, at creation time. Create a new key and revoke the old one. There is no way to retrieve the plaintext later.
The API returns 401 Unauthorized
Check three things in order:
The key hasn’t been revoked. Open Deploy → API Keys and confirm the key still appears in the table.
You’re sending Authorization: Bearer <key>, not x-api-key and not a query parameter.
The key value was copied fully, with no missing or extra characters. Bearer tokens are sensitive to truncation.
The API returns 403 Forbidden
The endpoint likely requires a scope the key doesn’t have. Check the assigned scope chips on the key row. Write is required for conversation events, document ingestion, and knowledge-management mutations. Read is required for list, fetch, and status endpoints, even on a few routes that use POST.
Last used never updates
The Last used timestamp only moves when a request reaches Fini successfully and authenticates with that key. If your client is failing before the request lands, DNS, TLS, wrong base URL, network egress blocked, the column won’t move even though you think the key is in use.