Production clients should assume networks fail in ambiguous ways. A timeout does not prove that DialNexa rejected a request, and repeating a write can create a second resource or place another call.
The current v1 contract does not define a platform-wide idempotency header or one universal rate limit. Do not send an invented idempotency key or hard-code a global requests-per-minute value. Use endpoint-specific guarantees when they are published.
Retry classification
Timeouts
Set both a connection timeout and a total request timeout in your HTTP client. Choose values that fit your application; the public contract does not currently promise one universal server timeout. Long-running work is normally accepted synchronously and completed asynchronously, so use the returned resource ID rather than holding a connection open.
Exponential backoff with jitter
This TypeScript helper retries read-only requests and honors Retry-After when the response supplies it:
Duplicate protection without idempotency keys
Attach your own stable correlation value in metadata when creating a call. After a timeout, list recent calls and reconcile before deciding whether to submit another call. Store the returned DialNexa ID with your correlation value as soon as a create request succeeds.
Observability checklist
- Record the HTTP method, route template, status, duration, and DialNexa resource ID.
- Redact API keys, webhook secrets, phone numbers, and sensitive metadata.
- Keep the original error
statusCode, message, and error fields.
- Alert separately on authorization failures, validation drift, throttling, and transient server failures.
- Prefer webhooks over aggressive call-status polling.
Related pages