Read the active classification rules for the calling org

Search Documentation

Search across all developer documentation

undeliverable

Read the active classification rules for the calling org

GET /v1/undeliverable/rules
Auth required api.undeliverable.view

Returns the active rule set the /v1/undeliverable surface applies when classifying recipients (SND-713). Three rules are always-on (locked, cannot be disabled): permanent_bounce, complaint, rejected. Three rules are configurable per org, each with an events threshold (N) and window_days (M) — an address matches when ≥ N qualifying events have occurred in a rolling M-day window.

When an address matches multiple rules, the wire reason is the highest-priority match in this order: permanent_bounce > complaint > rejected > repeated_transient > undetermined > soft_bounce_accumulation.

Rules are read-only over the public API in v1 — changes are made through the dashboard (audit-logged, granted to owners + admins only). Callers should pin against version and re-fetch when the X-SendOps-Rules-Version header on /v1/undeliverable changes.

Responses

Errors follow the RFC 7807 problem format — see the error reference.

200 Active rule set application/json
profile string enum required

One of: strict, standard, aggressive, custom

rules object required

Fields of rules:

permanent_bounce object required

One rule in the classification rule set. Locked rules carry locked: true and no events/window_days (they fire on any qualifying event, lifetime). Configurable rules carry events (1–100) and window_days (1–365); a rule matches when ≥ events have happened for an address in a rolling window_days period ending at now.

Fields of permanent_bounce:

enabled boolean required

Whether the rule contributes to classification. Locked rules (locked: true) cannot be set to enabled: false.

locked boolean optional

True for the three always-on rules (permanent_bounce, complaint, rejected). Locked rules cannot be disabled — the field is omitted on configurable rules.

events integer optional

Required event count within the window. Configurable rules only.

Constraints: 1–100

window_days integer optional

Rolling window length in days. Configurable rules only.

Constraints: 1–365

complaint object required

One rule in the classification rule set. Locked rules carry locked: true and no events/window_days (they fire on any qualifying event, lifetime). Configurable rules carry events (1–100) and window_days (1–365); a rule matches when ≥ events have happened for an address in a rolling window_days period ending at now.

Fields of complaint:

enabled boolean required

Whether the rule contributes to classification. Locked rules (locked: true) cannot be set to enabled: false.

locked boolean optional

True for the three always-on rules (permanent_bounce, complaint, rejected). Locked rules cannot be disabled — the field is omitted on configurable rules.

events integer optional

Required event count within the window. Configurable rules only.

Constraints: 1–100

window_days integer optional

Rolling window length in days. Configurable rules only.

Constraints: 1–365

rejected object required

One rule in the classification rule set. Locked rules carry locked: true and no events/window_days (they fire on any qualifying event, lifetime). Configurable rules carry events (1–100) and window_days (1–365); a rule matches when ≥ events have happened for an address in a rolling window_days period ending at now.

Fields of rejected:

enabled boolean required

Whether the rule contributes to classification. Locked rules (locked: true) cannot be set to enabled: false.

locked boolean optional

True for the three always-on rules (permanent_bounce, complaint, rejected). Locked rules cannot be disabled — the field is omitted on configurable rules.

events integer optional

Required event count within the window. Configurable rules only.

Constraints: 1–100

window_days integer optional

Rolling window length in days. Configurable rules only.

Constraints: 1–365

repeated_transient object required

One rule in the classification rule set. Locked rules carry locked: true and no events/window_days (they fire on any qualifying event, lifetime). Configurable rules carry events (1–100) and window_days (1–365); a rule matches when ≥ events have happened for an address in a rolling window_days period ending at now.

Fields of repeated_transient:

enabled boolean required

Whether the rule contributes to classification. Locked rules (locked: true) cannot be set to enabled: false.

locked boolean optional

True for the three always-on rules (permanent_bounce, complaint, rejected). Locked rules cannot be disabled — the field is omitted on configurable rules.

events integer optional

Required event count within the window. Configurable rules only.

Constraints: 1–100

window_days integer optional

Rolling window length in days. Configurable rules only.

Constraints: 1–365

undetermined object required

One rule in the classification rule set. Locked rules carry locked: true and no events/window_days (they fire on any qualifying event, lifetime). Configurable rules carry events (1–100) and window_days (1–365); a rule matches when ≥ events have happened for an address in a rolling window_days period ending at now.

Fields of undetermined:

enabled boolean required

Whether the rule contributes to classification. Locked rules (locked: true) cannot be set to enabled: false.

locked boolean optional

True for the three always-on rules (permanent_bounce, complaint, rejected). Locked rules cannot be disabled — the field is omitted on configurable rules.

events integer optional

Required event count within the window. Configurable rules only.

Constraints: 1–100

window_days integer optional

Rolling window length in days. Configurable rules only.

Constraints: 1–365

soft_bounce_accumulation object required

One rule in the classification rule set. Locked rules carry locked: true and no events/window_days (they fire on any qualifying event, lifetime). Configurable rules carry events (1–100) and window_days (1–365); a rule matches when ≥ events have happened for an address in a rolling window_days period ending at now.

Fields of soft_bounce_accumulation:

enabled boolean required

Whether the rule contributes to classification. Locked rules (locked: true) cannot be set to enabled: false.

locked boolean optional

True for the three always-on rules (permanent_bounce, complaint, rejected). Locked rules cannot be disabled — the field is omitted on configurable rules.

events integer optional

Required event count within the window. Configurable rules only.

Constraints: 1–100

window_days integer optional

Rolling window length in days. Configurable rules only.

Constraints: 1–365

version string required

6-character hex hash over the canonical rules JSON.

updated_at string<date-time> optional

When the rules were last changed.

updated_by string<email> optional

Email of the operator who last changed the rules. Omitted for system-set defaults.

401 Missing, malformed, or unknown API key application/problem+json
403 Key lacks the required scope or plan limit violated application/problem+json
429 Per-org rate limit exceeded application/problem+json
500 Unexpected server-side failure. The code is internal_error. The request_id field can be quoted to SendOps support to investigate. application/problem+json