Negative examples¶
Failure shapes integrators should handle deliberately.
Missing headers¶
| Call | Missing | Typical result |
|---|---|---|
| Fraud scoring | Authorization |
401 |
| Fraud scoring | x-tenant-id |
422 |
| JSON POST | Content-Type |
415/422 depending on stack |
Invalid tenant / scope¶
| Call | Problem | Result |
|---|---|---|
| Fraud | Unknown/wrong tenant string with valid JWT | May 200 against empty/wrong partition — your bug if mis-routed |
| Recon | Missing tenant_id / partner_id |
422 |
| Recon | Scope that does not own the cluster | Resolve no-ops or rejects per contract — do not assume cross-tenant access |
Invalid enum values¶
Fraud policy / recon resolve expect documented lowercase (or exact) enums — 422 or business error. Use approve / approved as specified per product.
Expired JWT¶
Inbound Fraud token with past exp → 401 Token verification failed. Mint a new token; fix clock skew.
Rejected business checks¶
| Product | Example | Action |
|---|---|---|
| Fraud report compose | ML_SCORE_TIER_CONFLICT |
Fix prediction; do not retry identical body |
| Fraud report compose | AMBIGUOUS_PREDICTION_CONTRACT |
Fix emitter identity keys |
| Recon | decision=reconcile with unsupported cluster_ids |
422 — see exception contract |
| KYC | Vendor returns no-match | HTTP may still be 200 — read body |
Vendor uncertainty (KYC)¶
Timeouts, partial vendor payloads, or “insufficient data” responses are not proof of identity. Surface uncertainty to operators; do not coerce to pass/fail without policy.
Duplicate / retry behaviour¶
| Action | Safe? |
|---|---|
| Retry Fraud score after 401 with new JWT | Yes |
| Retry Fraud score after contract validation failure with same body | No |
Retry recon ingestion with same session_id after mid-pipeline failure |
Often unsafe (trigger guard) — new session preferred |
Retry exception resolve with same resolution_request_id |
Yes when id was supplied |
Full tables: Retry and idempotency.