Test and live keys
Test keys let you build the whole integration for free. Here is exactly what they fake and what they do for real.
Every key is minted as test or live. GET /v1/me shows which in credential.environment. Test keys are free on every plan; live keys need a plan with live API access and an approved app.
What a test key does#
| Area | With a test key |
|---|---|
| Projects, commands, workspaces | Real. Projects are created, edited and deleted on your account. |
| Uploads and imports | Real. Files are stored and count towards your storage. |
| Previews | Real. Frames show your actual timeline. |
| Renders | Sample. The project is checked, then a finished sample file comes back at once (test: true). Nothing is queued and no export is used. |
| Generation (images, speech, stickers, video, transcription) | Sample. A fixed sample file or transcript, no provider is called, nothing is charged. quoteOnly is ignored. |
| Editing agent | Sample. Needs a real project, then returns an empty plan without calling a model. |
| Plugins | Not called. You get { "ok": true, "test": true }. |
| Telegram bot users | Reads work. Changes are refused: those are real people on a live bot. |
Sample files live under /fixtures/v1/ on the API host and are served with Access-Control-Allow-Origin: *, so a test page in your browser can load them.
Switching to live#
Create a live key in the same app, swap it in, and run the same code. Responses from live keys have the same shape, without test and note, and render responses add an applied object describing what the plan decided.