Skip to main content

MessageSuppression API

MessageSuppression endpoints exposed by the Devotel CPaaS API Base path: /api/v1/message-suppression Endpoint count: 3

title: “Errors worth branching on” description: “Per-endpoint failure templates matching the envelope — what actually fires, what to retry, what to surface to the operator.”

Errors worth branching on

These five failures cover the suppression check (GET /api/v1/messagesuppression/check), in the pre-send path for every channel. Each block below is a full { error, meta } envelope as the API returns it, and the matrix at the bottom answers retry vs surface for the same five classes. For the platform-wide decision table these branches plug into, see the error handling guide.

401 — Unauthorized

A 401 on this page is the bearer key failing before the route ran — it never means the resource is wrong. Rotate the key or re-mint the scoped token; retrying the same request changes nothing.

403 — Forbidden

A 403 means the key authenticated but the operation is gated by scope — check the key’s scopes on the developer page; a 403 is never a data-not-found shape.

422 — Schema

A 422 means the payload did not match the request schema — branch on error.details.field and resend with one of account, team, sender for scope instead of blind-retrying the same body.

429 — Rate

The Retry-After header and error.details.retry_after are both set on every 429 — resend the SAME request after the lower of the two.

404 — Not found

List the rules first — a deleted id never resolves on retry.

60-second retry matrix


Get the duplicate-message suppression policy

GET /api/v1/message-suppression
Returns the organization’s content-hash duplicate-message suppression policy — the opt-in guard that silently drops a send when the identical message body was already delivered to the same recipient on the same channel within the configured window. Use this to inspect the current window, channel restrictions, and category filter before updating or deleting the policy. Returns data: null when no policy has ever been configured for the organization.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Create or update the duplicate-message suppression policy

PUT /api/v1/message-suppression
Upserts the organization’s single duplicate-message suppression policy. When a matching policy fires, an identical message body to the same recipient on the same channel is silently suppressed within window_seconds — the guard against two campaigns sending the same promo back-to-back. Omit channels (or pass null) to cover every outbound messaging channel, and omit applies_to_categories to cover every message category; restrict the category list to marketing copy so OTP and transactional resends are never suppressed. Body: window_seconds (3600–7776000), optional enabled (defaults true), and optional channels / applies_to_categories (null or omitted = every channel / every category). Requires owner, admin, or developer role.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Delete the duplicate-message suppression policy

DELETE /api/v1/message-suppression
Removes the organization’s duplicate-message suppression policy. Deletion disables suppression immediately — identical messages are no longer dropped — while any per-content markers already recorded in the window expire with their TTL. Returns 204 No Content whether or not a policy existed (idempotent delete). Requires owner, admin, or developer role.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
Response: 204 No Content