Going live
Checklist
What to confirm before pointing production traffic at Call Lens.
Everything here is a failure someone has actually shipped. Each item links to the page that explains it.
Credentials
- The API key's scopes match what you call —
ingestto submit,webhooks:manageto register endpoints. A missing scope is a403that never resolves on retry. → Authentication - Keys are held in a secret store, not in source or an environment file in your repository.
- You know how to rotate a key without downtime, and have done it once.
Webhooks
- The signing secret is stored. Registration returns it once and no route will ever show it to you again. (Rotating mints a new secret, shown once in the same way — it is not a second read of the old one.) → Quickstart
- The signature is verified before the body is parsed. Not after, not conditionally. → Verifying signatures
- The timestamp is checked against a replay window, and old deliveries are rejected.
- Your endpoint returns 2xx quickly and does the real work asynchronously. Anything else counts as a failed delivery. → Retries
- Duplicate deliveries are safe. Retries mean the same event can arrive more than once.
- You know how to rotate the signing secret without dropping deliveries, and have done it once. There is no overlap window — the old secret stops working the instant you rotate, and a botched rotation fails silently, with every delivery rejected by your own verification and no error response to alert you. → Rotating secrets
- The endpoint is reachable from the public internet and its TLS certificate is valid. Confirmed with a real test delivery, not assumed. → Webhooks overview
Submitting calls
-
provider_call_idandidempotency_keyare sent on every call. They are the only way to join a webhook back to a record in your system. → Correlation - A
200fromPOST /callsis handled as success, not as an error. It means the call was already ingested. → Idempotency -
upload.headersfrom the presign response are applied to yourPUTverbatim. → Uploading audio
Failure handling
-
429is checked for anerrorkey before any retry is scheduled — an allowance refusal wears the same status as a throttle. → Errors -
Retry-Afteris honoured on genuine throttles. → Rate limits - The stop-and-tell-a-human codes page a person instead of retrying:
ai_budget_exhausted,ingest_subscription_lapsed,insufficient_scope. - The daily and monthly allowance codes are handled differently. Midnight clears one and does nothing for the other.
- Failed submissions are queued and replayable — not dropped, and not retried in a tight loop.
Before you switch traffic on
- One real call has gone the whole way through: presign, upload, submit, verified webhook.
- You have alerting on webhook deliveries that stop arriving, which is the failure mode with no error response attached to it.