Troubleshooting and FAQ
Use this page when a Conduit integration is failing in development, staging, or production. Start with the symptom that matches your issue, fix the highest-probability cause first, then jump to the linked workflow, API reference, or recipe for the deeper recovery path.
Quick triage​
| Symptom | Most likely cause | Start here |
|---|---|---|
401 or 403 on every request | Missing API key, wrong API key, or server-side env wiring issue | Authentication and API key errors |
Webhook returns 401 or signature verification fails | Parsed JSON before verification, wrong webhook secret, or wrong raw body handling | Webhook verification and delivery issues |
| Job accepted but no report stored locally | Delivery failure, missed completion handling, or reconciliation gap | Failed jobs and missing reports |
400, 415, or 422 on create or upload | Unsupported input, invalid request shape, or target/template mismatch | Bad inputs and validation failures |
429 responses or exhausted request budget | Polling too aggressively or request burst above current limits | Rate limits and retry pressure |
Authentication and API key errors​
If every request fails with 401 or 403, start with credential wiring instead of retries.
- Confirm you are sending
CONDUIT_API_KEYfrom a server-side environment, not from a browser client. - Check the request header and environment mapping used by your SDK or direct REST client.
- Treat auth failures as configuration problems. Do not retry them with backoff.
- Capture the
requestIdfrom API or SDK errors when you need support help.
Go deeper:
Webhook verification and delivery issues​
Most webhook failures come from one of three causes: verifying the wrong body, using the wrong secret, or treating delivery problems as if the job itself failed.
- Verify against the exact raw request body before parsing JSON.
- Check the
conduit-signatureheader and the correctCONDUIT_WEBHOOK_SECRETfor the environment receiving deliveries. - Return success quickly after verification, then move heavier work off the request path.
- Deduplicate retries on
event.idso duplicate deliveries are harmless. - If a job completed but your app did not record it, reconcile by
jobIdorreportIdbefore resubmitting work.
Go deeper:
Failed jobs and missing reports​
Separate processing failures from delivery failures.
- If you receive
report.failed, persist thejobId, error code, and error message before deciding whether to submit a new request. - If webhook delivery failed, check the current job state before assuming the job itself failed.
- Use
GET /v1/reports/by-job/:jobIdto reconcile completed work. It returnsnulluntil a completed report exists. - Keep your own request correlation id and
idempotencyKeywith the acceptedjobIdso you can recover cleanly.
Go deeper:
Bad inputs and validation failures​
Request-shape failures usually recover faster when you inspect the input path, not when you add retries.
- For
400or422, verify the request body matches the current source, output, webhook, and targeting shapes. - For
415 unsupported_media_type, confirm you are using a supported ingestion path and media type. - If targeting fails, verify that your targeting strategy matches the media you submitted and the speaker-selection behavior you expect.
- If you are migrating from older patterns, prefer the current report job workflow over removed analyze routes.
Go deeper:
Rate limits and retry pressure​
429 usually means the integration is spending budget on avoidable polling or sending create bursts faster than the current limit window allows.
- Prefer verified webhooks over aggressive polling loops.
- Read
X-RateLimit-Limit,X-RateLimit-Remaining, andX-RateLimit-Resetbefore you decide how fast to retry. - Retry transient
429and5xxfailures with bounded backoff. - Do not retry auth or validation errors as if they were rate-limit events.
Go deeper:
Retries and idempotency FAQ​
Should I poll or use webhooks?​
Use webhooks as the default production completion path. Polling is acceptable for local development, controlled internal tooling, and one-off backfills when you cannot expose an HTTPS endpoint yet.
Can I resend the same create request?​
Yes, if it is the same logical create request. Reuse the same idempotencyKey for intentional retries of that request. Do not generate a fresh key unless you mean to create new work.
Why did my webhook arrive twice?​
Webhook delivery retries are normal recovery behavior. Deduplicate on event.id and make downstream writes safe to repeat.
Go deeper:
What to collect before contacting support​
When self-serve recovery does not resolve the issue, gather the smallest useful debugging bundle before you escalate:
requestIdfrom the API or SDK errorjobIdfor the accepted async requestreportIdif a completed report existsevent.idfor webhook-delivery debugging- HTTP status, error code, and timestamp
- Whether the failure happened on create, webhook delivery, report fetch, or reconciliation
Useful references: