Batch errors — POST /v1/signals
An unknown key anywhere in the request body is a malformed request, not ignored (
422).
Poll errors — GET /v1/signals/{request_id}
Item-level outcomes
An item is never a transport error. Within a200/202 batch an item can be rejected
(no_runnable_signal, invalid_phone, …), error, or unresolved. A per-signal vendor
outage degrades that signal to null — it never fails the whole batch. See
item outcomes.
429 vs 422
Every
429 carries a Retry-After header — whole seconds, always at least 1 — so a refusal
always tells you when to come back. A 422 never does. That is the distinction worth coding
against: a 429 is “not yet”, a 422 is “not like this”.422 on inputs rather than a 429,
because no amount of waiting would make it fit.