Developer Docs
Security & data
Manage API keys and scopes safely, and understand which notes each integration can access.
API key handling
- The full API key (
alt_live_...) is shown once when it is created. Alt stores only a keyed hash of the secret, so the original value cannot be displayed again. Create a new key if you lose it. - The full webhook signing secret (
whsec_...) is also shown once. Alt stores it encrypted with AES-256-GCM and uses it only to sign outgoing deliveries, so it cannot be viewed again in the console. Recreate the endpoint to issue a new secret. - Store keys in a secret manager. Never embed them in client-side code, mobile apps, or repositories.
- To rotate a key, issue a new one for the same integration in the console. Switch your systems to the new key, then revoke the old one. Revocation takes effect immediately.
- Optionally set an expiration when creating a key; expired keys are rejected automatically.
- Use a separate key for each system. Keep staging and production separate so revoking one key does not interrupt the other environment.
- There is no sandbox or test mode. Every API key can read real notes. Use separate integrations for staging and production. To test a receiver without waiting for a recording, use the verification event sent when an endpoint is created or Send test in the console.
Data each integration can access
- A personal integration can access only its owner's personal notes. A teamspace integration can access only notes shared with that teamspace, never a member's personal notes.
- Teamspace integrations can only be created by the teamspace owner.
- Requesting a note outside the API key's visibility scope returns
404. The response does not reveal whether the note exists. - When a note leaves your scope you receive
note.deleted (reason: access_lost)and the note disappears from your listings. Delete or block access to your stored copy.
Scopes
| Scope | Grants |
|---|---|
| notes:read | List notes and read note metadata. |
| transcripts:read | Read transcript text and speaker segments. |
| summaries:read | Read summaries (Markdown). |
| webhooks:manage | Create, update, delete, and test webhook endpoints via the public API. |
Grant only the scopes your integration needs. A request that requires a scope not granted to the API key fails with 403 insufficient_scope.
Rate limits
- Each API key can make up to 120 requests per minute. Exceeding the limit returns
429 rate_limitedwith aRetry-Afterheader. Wait for at least the indicated duration before retrying. - Use webhooks and incremental sync with
updated_afterinstead of repeatedly polling the full note list. - Store the
ETagfrom note, transcript, and summary responses and send it inIf-None-Matchon the next request. Unchanged content returns304without a response body, reducing unnecessary data transfer.
Privacy
- Transcripts and summaries are user content and may contain personal data. Fetch only what your integration needs, and protect what you store.
- Honor deletions. When you receive
note.deleted, delete or block access to your stored copy regardless of the reason. Periodically check the full note list in case you missed an event. - Webhook URLs must be public HTTPS endpoints. Private, loopback, and cloud-metadata addresses are rejected, and redirects are not followed.
- API access requires an active subscription on the integration's workspace; without one, requests fail with
403 plan_required. - See our Privacy Policy for how Alt itself handles user data.