- Current:
{ "error": string } - Planned:
{ code: string, message: string, details?: object } - Rationale: machine-parseable errors, better client handling
- Example codes:
invalid_key,missing_scope,rate_limited,tenant_paused,validation_error - Status: Implemented
- Current:
Retry-Afteron 429 - Planned: add
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset - Rationale: clearer client behavior and backoff hints
- Status: Implemented
- Current: Idempotency accepted via header/body
- Planned: echo
Idempotency-Keyand addIdempotency-Replayed: trueon reused results - Rationale: observability and correctness during retries
- Status: Implemented
- Planned: include
X-Request-Idin responses; accept inboundX-Request-Id - Rationale: end-to-end correlation and supportability
- Status: Implemented
- Planned: publish OpenAPI spec and lightweight SDKs (TS/JS, Python), and reference snippets in docs
- Rationale: reduce friction and drift; enable codegen
- Status: Proposed
- Planned:
limit+cursor→{ items, nextCursor? } - Rationale: scalable list patterns and consistent client code
- Status: Proposed
- Planned: improve internal sending path and event routing
- Rationale: better tagging and correlation for timelines
- Status: Proposed
- Planned: UI for inbound deliveries, headers/body, response, replay; idempotent replays
- Rationale: faster debugging and safer operations
- Status: Proposed
- Planned: per-day caps per org; readiness checks (SPF/DKIM/DMARC/BIMI) surfaced in UI; enforced for bulk
- Rationale: safer scaling and compliance guardrails
- Status: Proposed
- Planned: token rotation endpoints, optional TTL on unsubscribe tokens
- Rationale: hygiene and incident response
- Status: Proposed
