Skip to main content
An API key removes the hourly cap of the keyless tier and gives your organization 100,000 free requests a month. Your code stays the same: the SDKs pick the key up from the environment.
1

Create a key in the console

Open the Keenable console ↗ and create a key.Keys start with keen_. Copy yours before you close the dialog.
2

Set KEENABLE_API_KEY

This command puts the key in your shell’s environment, where the SDKs, the MCP server and the CLI look for it.
The variable lasts for this terminal session. Add the line to your shell profile, or to your secrets manager, to keep it.
3

Re-run the same code

Run the code from the Quickstart again. Nothing else changes.With KEENABLE_API_KEY set, the Python, TypeScript and Go SDKs send the key and call the keyed endpoints instead of the /public ones. Responses now report what each call cost in a usage object (see credits).

Pass the key over raw HTTP

Without an SDK, send the key in the X-API-Key header and drop /public from the path. The keyed endpoints need no X-Keenable-Title header. This request runs the Quickstart search with your key:
You get the same results as the keyless call, followed by a usage object. If your client only supports bearer tokens, send Authorization: Bearer keen_<your_key> instead. If you send both headers, the API uses X-API-Key.

Key lifetime and rotation

  • Keys belong to your organization.
  • Keys never expire on their own.
  • You can rotate a key at any time in the console ↗. Create the new key, update KEENABLE_API_KEY everywhere it is set, then revoke the old one.
If the key is revoked, the API returns 403. If the key isn’t in Keenable’s format, the API returns 401 with Malformed API key (see 401 Malformed key). If the key has the right format but a typo, the API returns 401 with Authentication failed (see 401 Invalid key).
  • Authentication: the key for the MCP server and the CLI.
  • Rate limits: keyed and keyless limits side by side.
  • Errors: every status the API returns and how to fix it.