PageSourceSearch

https://tumitrust.com/docs/assets/js/85f5aaea.cbe66c90.js

js tumitrust.com collected 2026-09-28 06:43:06 UTC 21,389 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkdocs_new=globalThis.webpackChunkdocs_new||[]).push([[2933],{28453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>t});var d=n(96540);const s={},i=d.createContext(s);function c(e){const r=d.useContext(i);return d.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function t(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),d.createElement(i.Provider,{value:r},e.children)}},44220:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>t,default:()=>x,frontMatter:()=>c,metadata:()=>d,toc:()=>o});const d=JSON.parse('{"id":"pti/specification/v1.0/reference-error-codes","title":"Reference Error Codes","description":"Standard PTI v1.0 error taxonomy, HTTP mappings, and client handling guidance.","source":"@site/docs/pti/specification/v1.0/reference-error-codes.md","sourceDirName":"pti/specification/v1.0","slug":"/pti/specification/v1.0/reference-error-codes","permalink":"/docs/pti/specification/v1.0/reference-error-codes","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":12,"frontMatter":{"title":"Reference Error Codes","description":"Standard PTI v1.0 error taxonomy, HTTP mappings, and client handling guidance.","sidebar_position":12},"sidebar":"ptiSidebar","previous":{"title":"Reference API Specification","permalink":"/docs/pti/specification/v1.0/reference-api-specification"},"next":{"title":"Versioning Strategy","permalink":"/docs/pti/specification/v1.0/versioning-strategy"}}');var s=n(74848),i=n(28453);const c={title:"Reference Error Codes",description:"Standard PTI v1.0 error taxonomy, HTTP mappings, and client handling guidance.",sidebar_position:12},t="Reference Error Codes",l={},o=[{value:"Normative language",id:"normative-language",level:2},{value:"Error response envelope",id:"error-response-envelope",level:2},{value:"HTTP status mapping",id:"http-status-mapping",level:2},{value:"Validation errors (<code>PTI-400x</code>)",id:"validation-errors-pti-400x",level:2},{value:"Authentication errors (<code>PTI-401x</code>)",id:"authentication-errors-pti-401x",level:2},{value:"Authorization errors (<code>PTI-403x</code>)",id:"authorization-errors-pti-403x",level:2},{value:"Access consent alias (<code>consent_required</code>)",id:"access-consent-alias-consent_required",level:3},{value:"Not found errors (<code>PTI-404x</code>)",id:"not-found-errors-pti-404x",level:2},{value:"Conflict errors (<code>PTI-409x</code>)",id:"conflict-errors-pti-409x",level:2},{value:"Semantic errors (<code>PTI-422x</code>)",id:"semantic-errors-pti-422x",level:2},{value:"Rate limiting (<code>PTI-429x</code>)",id:"rate-limiting-pti-429x",level:2},{value:"Server errors (<code>PTI-500x</code>)",id:"server-errors-pti-500x",level:2},{value:"Service unavailable (<code>PTI-503x</code>)",id:"service-unavailable-pti-503x",level:2},{value:"Client handling guidance",id:"client-handling-guidance",level:2},{value:"Extension rules",id:"extension-rules",level:2},{value:"Related documents",id:"related-documents",level:2}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"reference-error-codes",children:"Reference Error Codes"})}),"\n",(0,s.jsx)(r.p,{children:"This document defines the standard error code taxonomy for PTI v1.0 implementations."}),"\n",(0,s.jsx)(r.h2,{id:"normative-language",children:"Normative language"}),"\n",(0,s.jsxs)(r.p,{children:["The key words ",(0,s.jsx)(r.strong,{children:"MUST:"})," ",(0,s.jsx)(r.strong,{children:"MUST NOT:"})," ",(0,s.jsx)(r.strong,{children:"REQUIRED:"})," ",(0,s.jsx)(r.strong,{children:"SHALL:"})," ",(0,s.jsx)(r.strong,{children:"SHALL NOT:"})," ",(0,s.jsx)(r.strong,{children:"SHOULD:"})," ",(0,s.jsx)(r.strong,{children:"SHOULD NOT:"})," ",(0,s.jsx)(r.strong,{children:"RECOMMENDED:"})," ",(0,s.jsx)(r.strong,{children:"MAY:"})," and ",(0,s.jsx)(r.strong,{children:"OPTIONAL"}
1)," are to be interpreted as described in ",(0,s.jsx)(r.a,{href:"https://datatracker.ietf.org/doc/html/rfc2119",children:"RFC 2119"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"error-response-envelope",children:"Error response envelope"}),"\n",(0,s.jsxs)(r.p,{children:["All error responses ",(0,s.jsx)(r.strong,{children:"MUST"})," use:"]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-json",children:'{\n  "error": {\n    "code": "PTI-4001",\n    "message": "Unsupported schema version",\n    "detail": "trust_event.v2 is not enabled for this tenant",\n    "correlation_id": "req_9a8b7c6d",\n    "retryable": false,\n    "docs_uri": "https://docs.example/pti/errors/PTI-4001"\n  }\n}\n'})}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Field"}),(0,s.jsx)(r.th,{children:"Requirement"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"code"})}),(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.strong,{children:"MUST:"})," stable machine identifier"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"message"})}),(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.strong,{children:"MUST:"})," short human-readable summary"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"detail"})}),(0,s.jsx)(r.td,{children:"SHOULD, operator-safe elaboration"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"correlation_id"})}),(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.strong,{children:"MUST:"})," matches request"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"retryable"})}),(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.strong,{children:"MUST:"})," boolean hint for clients"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"docs_uri"})}),(0,s.jsx)(r.td,{children:"OPTIONAL, documentation link"})]})]})]}),"\n",(0,s.jsxs)(r.p,{children:["Implementations ",(0,s.jsx)(r.strong,{children:"MUST NOT"})," expose stack traces or internal hostnames in production error bodies."]}),"\n",(0,s.jsx)(r.h2,{id:"http-status-mapping",children:"HTTP status mapping"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"HTTP"}),(0,s.jsx)(r.th,{children:"Usage"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"400"})}),(0,s.jsxs)(r.td,{children:["Client payload or parameter errors (",(0,s.jsx)(r.code,{children:"PTI-400x"}),")"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"401"})}),(0,s.jsxs)(r.td,{children:["Authentication failure (",(0,s.jsx)(r.code,{children:"PTI-401x"}),")"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"403"})}),(0,s.jsxs)(r.td,{children:["Authorization or policy denial (",(0,s.jsx)(r.code,{children:"PTI-403x"}),")"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"404"})}),(0,s.jsxs)(r.td,{children:["Resource or subject not found (",(0,s.jsx)(r.code,{children:"PTI-404x"}),")"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"409"})}),(0,s.jsxs)(r.td,{children:["Conflict / idempotency (",(0,s.jsx)(r.code,{children:"PTI-409x"}),")"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"422"})}),(0,s.jsxs)(r.td,{children:["Semantic validation (",(0,s.jsx)(r.code,{children:"PTI-422x"}),")"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"429"})}),(0,s.jsxs)(r.td,{children:["Rate limit (",(0,s.jsx)(r.code,{children:"PTI-4290"}),")"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"500"})}),(0,s.jsxs)(r.td,{children:["Internal error (",(0,s.jsx)(r.code,{children:"PTI-500x"}),")"]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"503"})}),(0,s.jsxs)(r.td,{children:["Temporary unavailability (",(0,s.jsx)(r.code,{children:"PTI-503x"}),")"]})]})]})]}),"\n",(0,s.jsxs)(r.h2,{id:"validation-errors-pti-400x",children:["Validation errors (",(0,s.jsx)(r.code,{children:"PTI-400x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4001"})}),(0,s.jsx)(r.td,{children:"Unsupported schema version"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4002"})}),(0,s.jsx)(r.td,{children:"Unknown event type"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4003"})}),(0,s.jsx)(r.td,{children:"Invalid timestamp"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4004"})}),(0,s.jsx)(r.td,{children:"Missing required field"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4005"})}),(0,s.jsx)(r.td,{children:"Invalid context_id"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4006"})}),(0,s.jsx)(r.td,{children:"Payload schema validation failed"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4007"})}),(0,s.jsx)(r.td,{children:"Invalid pti_id format"}),(0,s.jsx)(r.td,{children:"No"})]})]})]}),"\n",(0,s.jsxs)(r.h2,{id:"authentication-errors-pti-401x",children:["Authentication errors (",(0,s.jsx)(r.code,{children:"PTI-401x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4010"})}),(0,s.jsx)(r.td,{children:"Missing credentials"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4011"})}),(0,s.jsx)(r.td,{children:"Invalid or expired token"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4012"})}),(0,s.jsx)(r.td,{children:"Invalid signature"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4013"})}),(0,s.jsx)(r.td,{children:"Credential revoked"}),(0,s.jsx)(r.td,{children:"No"})]})]})]}),"\n",(0,s.jsxs)(r.h2,{id:"authorization-errors-pti-403x",children:["Authorization errors (",(0,s.jsx)(r.code,{children:"PTI-403x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4030"})}),(0,s.jsx)(r.td,{children:"Insufficient scope"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4031"})}),(0,s.jsx)(r.td,{children:"Context not entitled"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4032"})}),(0,s.jsx)(r.td,{children:"Lookup tier not entitled"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4033"})}),(0,s.jsx)(r.td,{children:"Consent required"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4034"})}),(0,s.jsx)(r.td,{children:"Subject suppressed"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4035"})}),(0,s.jsx)(r.td,{children:"Cross-tenant access denied"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4036"})}),(0,s.jsx)(r.td,{children:"Producer not enabled for context"}),(0,s.jsx)(r.td,{children:"No"})]})]})]}),"\n",(0,s.jsxs)(r.h3,{id:"access-consent-alias-consent_required",children:["Access consent alias (",(0,s.jsx)(r.code,{children:"consent_required"}),")"]}),"\n",(0,s.jsxs)(r.p,{children:["TumiTrust institution Trust Check and report generate responses ",(0,s.jsx)(r.strong,{children:"MAY"})," return a flat body alias for mobile and partner LOS clients:"]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-json",children:'{\n  "success": false,\n  "code": "consent_required",\n  "error_type": "consent_required",\n  "reason": "consent_required",\n  "error": "Active access consent from the member is required before this Trust Check.",\n  "partner_id": 123,\n  "partner_name": "Demo Bank ZN"\n}\n'})}),"\n",(0,s.jsxs)(r.p,{children:["HTTP status ",(0,s.jsx)(r.strong,{children:"MUST"})," be ",(0,s.jsx)(r.code,{children:"403"}),". Normative mapping: ",(0,s.jsx)(r.code,{children:"consent_required"})," \u2261 ",(0,s.jsx)(r.code,{children:"PTI-4033"}),". Product language: ",(0,s.jsx)(r.strong,{children:"access consent"})," / ",(0,s.jsx)(r.strong,{children:"member"})," / ",(0,s.jsx)(r.strong,{children:"institution"})," (not lender/borrower)."]}),"\n",(0,s.jsxs)(r.h2,{id:"not-found-errors-pti-404x",children:["Not found errors (",(0,s.jsx)(r.code,{children:"PTI-404x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4040"})}),(0,s.jsx)(r.td,{children:"Resource not found"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4041"})}),(0,s.jsx)(r.td,{children:"Subject not resolved"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4042"})}),(0,s.jsx)(r.td,{children:"Report not found or expired"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4043"})}),(0,s.jsx)(r.td,{children:"Event not found"}),(0,s.jsx)(r.td,{children:"No"})]})]})]}),"\n",(0,s.jsxs)(r.h2,{id:"conflict-errors-pti-409x",children:["Conflict errors (",(0,s.jsx)(r.code,{children:"PTI-409x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4090"})}),(0,s.jsx)(r.td,{children:"Identity merge conflict"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4091"})}),(0,s.jsx)(r.td,{children:"Idempotency key conflict"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4092"})}),(0,s.jsx)(r.td,{children:"Concurrent modification"}),(0,s.jsx)(r.td,{children:"Yes"})]})]})]}),"\n",(0,s.jsxs)(r.h2,{id:"semantic-errors-pti-422x",children:["Semantic errors (",(0,s.jsx)(r.code,{children:"PTI-422x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4220"})}),(0,s.jsx)(r.td,{children:"Event context binding mismatch"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4221"})}),(0,s.jsx)(r.td,{children:"Retraction target not materialized"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4222"})}),(0,s.jsx)(r.td,{children:"Assertion signature invalid"}),(0,s.jsx)(r.td,{children:"No"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4223"})}),(0,s.jsx)(r.td,{children:"Policy pack violation"}),(0,s.jsx)(r.td,{children:"No"})]})]})]}),"\n",(0,s.jsxs)(r.h2,{id:"rate-limiting-pti-429x",children:["Rate limiting (",(0,s.jsx)(r.code,{children:"PTI-429x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-4290"})}),(0,s.jsx)(r.td,{children:"Rate limit exceeded"}),(0,s.jsx)(r.td,{children:"Yes"})]})})]}),"\n",(0,s.jsxs)(r.p,{children:["Clients ",(0,s.jsx)(r.strong,{children:"SHOULD"})," honor ",(0,s.jsx)(r.code,{children:"Retry-After"})," headers when present."]}),"\n",(0,s.jsxs)(r.h2,{id:"server-errors-pti-500x",children:["Server errors (",(0,s.jsx)(r.code,{children:"PTI-500x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-5000"})}),(0,s.jsx)(r.td,{children:"Internal error"}),(0,s.jsx)(r.td,{children:"Yes"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-5001"})}),(0,s.jsx)(r.td,{children:"Downstream registry unavailable"}),(0,s.jsx)(r.td,{children:"Yes"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-5002"})}),(0,s.jsx)(r.td,{children:"Intelligence engine timeout"}),(0,s.jsx)(r.td,{children:"Yes"})]})]})]}),"\n",(0,s.jsxs)(r.h2,{id:"service-unavailable-pti-503x",children:["Service unavailable (",(0,s.jsx)(r.code,{children:"PTI-503x"}),")"]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Code"}),(0,s.jsx)(r.th,{children:"Message"}),(0,s.jsx)(r.th,{children:"Retryable"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-5030"})}),(0,s.jsx)(r.td,{children:"Maintenance mode"}),(0,s.jsx)(r.td,{children:"Yes"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"PTI-5031"})}),(0,s.jsx)(r.td,{children:"Overloaded"}),(0,s.jsx)(r.td,{children:"Yes"})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"client-handling-guidance",children:"Client handling guidance"}),"\n",(0,s.jsx)(r.mermaid,{value:"flowchart TD\n  E[Error response] --\x3e R{retryable?}\n  R --\x3e|yes| B[Exponential backoff]\n  R --\x3e|no| C{code class}\n  C --\x3e|401x| A[Refresh credentials]\n  C --\x3e|4033| N[Request consent]\n  C --\x3e|4091| I[Treat as success if same payload]\n  C --\x3e|other| F[Fix request or escalate]"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["Clients ",(0,s.jsx)(r.strong,{children:"MUST"})," log ",(0,s.jsx)(r.code,{children:"correlation_id"})," for support escalation."]}),"\n",(0,s.jsxs)(r.li,{children:["Producers ",(0,s.jsx)(r.strong,{children:"SHOULD"})," persist ",(0,s.jsx)(r.code,{children:"PTI-4091"})," conflicts for manual reconciliation."]}),"\n",(0,s.jsxs)(r.li,{children:["Consumers ",(0,s.jsx)(r.strong,{children:"MUST NOT"})," retry ",(0,s.jsx)(r.code,{children:"403x"})," errors without entitlement change."]}),"\n"]}),"\n",(0,s.jsx)(r.h2,{id:"extension-rules",children:"Extension rules"}),"\n",(0,s.jsxs)(r.p,{children:["Implementations ",(0,s.jsx)(r.strong,{children:"MAY"})," define vendor-specific c
1odes only above ",(0,s.jsx)(r.code,{children:"PTI-9000"}),". Codes below ",(0,s.jsx)(r.code,{children:"PTI-9000"})," are reserved by the PTI specification."]}),"\n",(0,s.jsx)(r.h2,{id:"related-documents",children:"Related documents"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/pti/specification/v1.0/reference-api-specification",children:"Reference API Specification"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/pti/specification/v1.0/reference-event-model",children:"Reference Event Model"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/pti/specification/v1.0/interoperability",children:"Interoperability Specification"})}),"\n"]})]})}function x(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.