Further reading
Security
An API key is programmatic access to your company's data. Keep it in a secret store, give it only the scopes it needs, and revoke it the moment you suspect it has leaked.
A key looks like fk_live_… (there is a single prefix and no test keys) and is shown once, when an administrator creates it in the API and MCP settings of the app (Ajustes → API y MCP); Filmo keeps only a hash of it. It acts with the authority of that administrator, and everything it writes is attributed to them. Anyone who holds the key can do what its scopes allow.
Keep the key safe
Link to this section: Keep the key safe- Store it in a secret manager or in your platform's encrypted environment variables, and read it at run time as
FILMO_API_KEY. - Never put it in source code, in a front-end bundle, in a mobile app or in a URL. Call the API from your server.
- Do not send it by email or chat. Pass it to a teammate through the shared secret manager.
- Keep it out of logs, error reports and screenshots. Redact the
Authorizationheader. - Use a different key for each integration and each environment, so you can revoke one without breaking the rest.
Least privilege
Link to this section: Least privilegeGive each key only the scopes its integration uses. A read-only integration needs only read scopes. The first call of any integration, GET /api, needs account:read. See the scopes and permissions pages. For AI assistants, prefer read-only scopes and approve writes one at a time.
Rotate a key
Link to this section: Rotate a keyCreate a new key
In the API and MCP settings, create a key with the same scopes. Name it so you can tell it from the old one.
Deploy it
Put the new key in your secret store and deploy. Check that requests succeed with it.
Revoke the old key
Revoke it in the same screen. Requests that still use it start answering 401
api_key_revoked.
A key can have an expiry date, chosen when it is created, and then requests answer 401 api_key_expired after that date. A key without a date never expires, not even when it goes unused. Treat both codes as the signal to issue a new key. Several keys can be active at once (up to 50 keys that are not revoked per subscription; expired keys count, and so do OAuth connections), so you can overlap the new key and the old one. Rotate on a schedule that fits your policy, and always when someone who knew the key leaves your team.
A key stops working if the administrator who created it leaves the account or stops being an administrator (api_key_owner_inactive, api_key_owner_not_admin). Create keys from an account that will stay an administrator.
If a key leaks
Link to this section: If a key leaksAct first, investigate second. Revoking a key cuts off access instantly.
Revoke the key now
Open the API and MCP settings of the app and revoke it. An administrator is needed. Do this before anything else.
Create a replacement
Create a new key with the least scopes the integration needs, store it in your secret manager and deploy it.
Remove the key from where it leaked
Delete it from the repository, the log, the chat or the page. Remember that deleting a commit does not remove it from the history or from forks, so assume the old key is public and keep it revoked.
Check what happened
Review recent changes in the app for records you do not recognize. Everything the key wrote is attributed to the administrator who owns it. If your account has the activity log, which is an add-on, it marks the changes that came from the API; without it, compare the records with your own.
Tell support if data may have been accessed
Include the approximate time of the leak and, if you have them, the request ids of suspicious calls.
Each MCP client page links back here. For help, see support, and the help-center articles on security and active sessions.
Configuration files in repositories
Link to this section: Configuration files in repositoriesThe most common way a key leaks is a configuration file that is committed. MCP clients keep server definitions in files such as . (Claude Code), . (Cursor) and . (VS Code), and these files are usually in the repository.
- Do not write the key into these files. Use the client's support for environment variables, so the file holds a reference such as
${FILMO_API_KEY}and the value lives in your shell or secret store. The syntax differs between clients: check the page for yours. - If the file must hold a secret, add it to
.before the first commit.gitignore - Add a secret scanner to your repository and to your CI, and check the history if a file was committed once.
{
"mcpServers": {
"filmo": {
"type": "http",
"url": "https://app.filmo.io/api/v1/mcp",
"headers": {
"Authorization": "Bearer ${FILMO_API_KEY}"
}
}
}
}API key or OAuth
Link to this section: API key or OAuth| API key | OAuth | |
|---|---|---|
| Who creates it | An administrator, in the API and MCP settings of the app. | An administrator, on the consent screen that Filmo shows when the client asks for access. |
| Lifetime | Until you revoke it, unless it expires. | The access token lasts 1 hour; the refresh token lasts 30 days and rotates on every use. |
| Where you hold it | In your secret store. | In the client, which stores the tokens for you. |
| Revoke | Revoke the key. | Revoke the connection in the same settings section; access ends instantly. |
| Typical use | Servers, scripts, no-code platforms. | Remote MCP clients, and integrations that act for many accounts or need revocable consent. |
OAuth is not a second system: the token it issues is a short-lived API key. Details are in OAuth and MCP authentication. The administrator who approves a connection will find what to check in MCP for administrators.
Reporting a vulnerability
Link to this section: Reporting a vulnerabilityIf you think you have found a security problem in the API or the documentation, write to contact@filmo.io and describe it without real customer data. The same contact is published in the security. file at https://www.filmo.io/.well-known/security.txt and at https://docs.filmo.io/.well-known/security.txt. Do not test against accounts that are not yours, and do not publish the problem before Filmo has had the chance to answer.
Related pages
Link to this section: Related pagesGuides
Authentication
Every operation requires an API key sent as a bearer token. Only an administrator can create a key, and the key acts as that administrator, so decide who owns it before you create it.
Guides
OAuth
Filmo implements OAuth 2.1 for public clients: authorization code with PKCE, no client secret. The token it issues is an API key of kind OAuth, so it works on the whole REST API and on MCP, with the scopes the administrator granted.
Access
Authentication and permissions
Authenticate with an API key in a header, or let the client sign in with OAuth 2.1. Either way the scopes decide which tools exist.
Core concepts
Permissions
A refusal has three different causes: the key lacks a scope, the key's owner lacks a permission, or the account lacks an add-on. Each has a different status or code and a different fix.
Guides
Going live checklist
Go through these eight checks before your integration runs against production data. Each one points to the guide that explains it.
Was this page helpful?