1. Is the order actually stuck?
An order sitting in-flight is not necessarily failing. If its connector uses the defaultno_retry_after_ambiguous
(dedupPolicy),
an ambiguous submission parks for review rather than retrying — by design.
2. Is a circuit breaker open?
The breaker opens after 10 consecutive failures to an upstream and stays open for 30 seconds, then admits a test request. A request failing with “circuit breaker is open” is the platform protecting the upstream, not a bug in your call.An open breaker means the upstream failed ten times in a row — so the fix is
almost never at your end. Check the partner’s status before changing
anything on yours. Breakers reset on restart, but restarting to clear one
hides the outage that opened it.
3. Is it the upstream’s limits?
4. Is it local — the database or the process?
Errors you should not retry
The status-code mapping is the retry policy. Two are worth repeating here:FAILED_PRECONDITION— the tenant has no configuration for that integration. Retrying forever will never fix it, and it almost always means onboarding was left incomplete. Alert on it rather than burying it in a queue.DEADLINE_EXCEEDED— does not tell you whether downstream systems accepted the order. Retry per target with the single-target RPCs, never by resubmitting the whole call.
Next steps
Connectors
dedupPolicy, and why a parked order is the safe outcome.
gRPC flow
The full status-code mapping and per-target retry.
API contract
Envelopes and correlation ids — keep the requestId.
API basics
Authentication and tenancy.