{"openapi":"3.1.1","info":{"title":"Furnidesk Integration API","version":"1.0.0","description":"API v1: products, classification, customizations, media, optional prices\/costs and physical stock. Orders, customers and account ledgers are future modules, not active endpoints. Monetary values are decimal strings in company currency. JSON limit1 MB. Secret keys are server-side only.","contact":{"name":"Furnidesk","email":"info@furnidesk.com"}},"servers":[{"url":"https:\/\/work.furnidesk.com\/api\/v1"}],"security":[{"integrationKey":[]}],"paths":{"\/products":{"get":{"summary":"List products","description":"catalog:read; prices mode requires prices:read. prices:read and costs:read independently expose pricing and cost fields.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"mode","in":"query","required":false,"schema":{"enum":["catalog","prices"]}},{"name":"category_id","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"collection_id","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"brand_id","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"active","in":"query","required":false,"schema":{"enum":["true","false"]}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/products\/{id}":{"get":{"summary":"Read products","description":"catalog:read. Pricing and costs are included only with their separate read scopes. For price-only keys, use the list endpoint with mode=prices.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}},"delete":{"summary":"Archive product","description":"catalog:write. Soft archive; existing quotations and sales remain unchanged.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"expected_revision":{"type":"integer","minimum":1}},"required":["expected_revision"],"additionalProperties":false,"description":""}}}}}},"\/products\/upsert":{"post":{"summary":"Create or partially update products","description":"catalog:write and\/or prices:write; costs:write separately. external_id is scoped to the current connection.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/products-upsert"}}}}}},"\/categories":{"get":{"summary":"List categories","description":"catalog:read; prices mode requires prices:read. prices:read and costs:read independently expose pricing and cost fields.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"mode","in":"query","required":false,"schema":{"enum":["catalog","prices"]}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/categories\/{id}":{"get":{"summary":"Read categories","description":"catalog:read. Pricing and costs are included only with their separate read scopes. For price-only keys, use the list endpoint with mode=prices.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/categories\/upsert":{"post":{"summary":"Create or partially update categories","description":"catalog:write and\/or prices:write; costs:write separately. external_id is scoped to the current connection.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/categories-upsert"}}}}}},"\/collections":{"get":{"summary":"List collections","description":"catalog:read; prices mode requires prices:read. prices:read and costs:read independently expose pricing and cost fields.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"mode","in":"query","required":false,"schema":{"enum":["catalog","prices"]}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/collections\/{id}":{"get":{"summary":"Read collections","description":"catalog:read. Pricing and costs are included only with their separate read scopes. For price-only keys, use the list endpoint with mode=prices.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/collections\/upsert":{"post":{"summary":"Create or partially update collections","description":"catalog:write and\/or prices:write; costs:write separately. external_id is scoped to the current connection.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collections-upsert"}}}}}},"\/brands":{"get":{"summary":"List brands","description":"catalog:read; prices mode requires prices:read. prices:read and costs:read independently expose pricing and cost fields.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"mode","in":"query","required":false,"schema":{"enum":["catalog","prices"]}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/brands\/{id}":{"get":{"summary":"Read brands","description":"catalog:read. Pricing and costs are included only with their separate read scopes. For price-only keys, use the list endpoint with mode=prices.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/brands\/upsert":{"post":{"summary":"Create or partially update brands","description":"catalog:write and\/or prices:write; costs:write separately. external_id is scoped to the current connection.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/brands-upsert"}}}}}},"\/customization-types":{"get":{"summary":"List customization-types","description":"catalog:read; prices mode requires prices:read. prices:read and costs:read independently expose pricing and cost fields.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"mode","in":"query","required":false,"schema":{"enum":["catalog","prices"]}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/customization-types\/{id}":{"get":{"summary":"Read customization-types","description":"catalog:read. Pricing and costs are included only with their separate read scopes. For price-only keys, use the list endpoint with mode=prices.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/customization-types\/upsert":{"post":{"summary":"Create or partially update customization-types","description":"catalog:write and\/or prices:write; costs:write separately. external_id is scoped to the current connection.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/customization-types-upsert"}}}}}},"\/customization-groups":{"get":{"summary":"List customization-groups","description":"catalog:read; prices mode requires prices:read. prices:read and costs:read independently expose pricing and cost fields.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"mode","in":"query","required":false,"schema":{"enum":["catalog","prices"]}},{"name":"active","in":"query","required":false,"schema":{"enum":["true","false"]}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/customization-groups\/{id}":{"get":{"summary":"Read customization-groups","description":"catalog:read. Pricing and costs are included only with their separate read scopes. For price-only keys, use the list endpoint with mode=prices.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/customization-groups\/upsert":{"post":{"summary":"Create or partially update customization-groups","description":"catalog:write and\/or prices:write; costs:write separately. external_id is scoped to the current connection.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/customization-groups-upsert"}}}}}},"\/customization-options":{"get":{"summary":"List customization-options","description":"catalog:read; prices mode requires prices:read. prices:read and costs:read independently expose pricing and cost fields.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"mode","in":"query","required":false,"schema":{"enum":["catalog","prices"]}},{"name":"active","in":"query","required":false,"schema":{"enum":["true","false"]}},{"name":"group_id","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/customization-options\/{id}":{"get":{"summary":"Read customization-options","description":"catalog:read. Pricing and costs are included only with their separate read scopes. For price-only keys, use the list endpoint with mode=prices.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/customization-options\/upsert":{"post":{"summary":"Create or partially update customization-options","description":"catalog:write and\/or prices:write; costs:write separately. external_id is scoped to the current connection.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/customization-options-upsert"}}}}}},"\/media":{"get":{"summary":"List media","description":"media:read","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}},"post":{"summary":"Queue one image upload","description":"media:write. One file per request; serial worker. JPG\/PNG\/WebP \u003C=10 MB \/40 MP; catalog max1500px, option max720px, no upscaling. Immutable image versions: changing content\/name\/purpose requires a new external_id.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"202":{"description":"Job accepted. Poll GET \/jobs\/{id}.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}}},"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":200},"purpose":{"enum":["catalog","option"],"default":"catalog"},"file":{"type":"string","format":"binary"}},"required":["external_id","name","file"],"additionalProperties":false,"description":""}}}}}},"\/media\/{id}":{"get":{"summary":"Read media","description":"media:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/me":{"get":{"summary":"Read integration identity and effective scopes","description":"Any valid key.","parameters":[],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/changes":{"get":{"summary":"Read ordered company change feed","description":"Resource read scope required. origin_connection_id supports loop prevention. Always persist next_cursor, even for an empty filtered page.","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^[0-9]{1,18}$","default":"0"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/imports":{"post":{"summary":"Queue or dry-run a 1–50 record import","description":"Write scopes for every record.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"202":{"description":"Job accepted. Poll GET \/jobs\/{id}.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Import"}}}}},"get":{"summary":"Read last 50 connection jobs","description":"Any valid key; jobs from another connection remain hidden.","parameters":[],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/jobs":{"get":{"summary":"Read last 50 connection jobs","description":"Any valid key; jobs from another connection remain hidden.","parameters":[],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/jobs\/{id}":{"get":{"summary":"Read job report","description":"Any valid key on the same connection. Per-record failures appear in report counts.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/imports\/{id}":{"get":{"summary":"Read job report","description":"Any valid key on the same connection. Per-record failures appear in report counts.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/jobs\/{id}\/retry":{"post":{"summary":"Retry a failed or paused job","description":"Required write scopes; a replacement active key must belong to the same connection. Storage authorization failures also require an operator to resume storage after fixing credentials.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"202":{"description":"Job accepted. Poll GET \/jobs\/{id}.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":[],"required":[],"additionalProperties":false,"description":""}}}}}},"\/imports\/{id}\/retry":{"post":{"summary":"Retry a failed or paused job","description":"Required write scopes; a replacement active key must belong to the same connection. Storage authorization failures also require an operator to resume storage after fixing credentials.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"202":{"description":"Job accepted. Poll GET \/jobs\/{id}.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":[],"required":[],"additionalProperties":false,"description":""}}}}}},"\/inventory":{"get":{"summary":"Read stock cards and decimal totals","description":"stock:read; stock package and module must be active. Detail balances contain revisions. Pagination cursor is inventory item UUID.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"location_id","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}},"post":{"summary":"Set or adjust physical product \/ fabric stock","description":"stock:write; company must have active stock package and enabled module. Location must be assigned to connection.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,120}$"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/StockWrite"}}}}}},"\/inventory\/{id}":{"get":{"summary":"Read one stock card and balance revisions","description":"stock:read; id is inventory item UUID, not product UUID.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"location_id","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Completed \/ current records. Read scopes control fields.","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"400":{"description":"Malformed JSON","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"401":{"description":"Missing, disabled, expired or revoked credentials","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"403":{"description":"Scope, company domain or stock package not permitted","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Resource \/ mapped record not found","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Revision, idempotency or reservation conflict","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"413":{"description":"Payload exceeds allowed size","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"415":{"description":"JSON content type required","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate \/ staging \/ job limit; respect Retry-After when provided","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"},"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"500":{"description":"Unexpected error; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"503":{"description":"Database busy; retry same idempotency key","headers":{"X-Request-Id":{"schema":{"type":"string","format":"uuid"},"description":"Support correlation ID"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}}},"components":{"securitySchemes":{"integrationKey":{"type":"http","scheme":"bearer","bearerFormat":"fd_UUID_RANDOMSECRET"}},"schemas":{"Reference":{"oneOf":[{"type":"string","format":"uuid"},{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200}},"required":["external_id"],"additionalProperties":false,"description":""}],"description":"Furnidesk UUID or external ID in the current company + connection + resource namespace."},"SelectionField":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"external_id":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string"},"translations":{"type":"object","description":"Enabled language codes only; main name\/description fields use the company base language. Category names are translated; collection\/brand names are shared. Omitted fields are preserved.","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},"type_id":{"$ref":"#\/components\/schemas\/Reference"},"group_ids":{"type":"array","items":{"$ref":"#\/components\/schemas\/Reference"},"maxItems":100},"coefficient":{"type":"string","pattern":"^\\d+(\\.\\d{1,4})?$","description":"0 \u003C coefficient \u003C= 100. Explicit coefficients require prices:write. 1 × 30% = 30%; 0.3 × 30% = 9%."}},"required":["name","type_id"],"additionalProperties":false,"description":"Supply id or external_id. Each field permits one option across its groups; main fabric and arms are separate fields."},"Error":{"type":"object","required":["error","request_id"],"properties":{"request_id":{"type":"string","format":"uuid"},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":["object","array"]},"retry_after":{"type":"integer"}}}}},"Envelope":{"type":"object","description":"Record fields are filtered by read scopes. Decimal values are strings. All responses include request_id; successful writes can include replayed:true.","properties":{"request_id":{"type":"string","format":"uuid"},"outcome":{"enum":["created","updated","unchanged"]},"record":{"type":"object"},"records":{"type":"array","items":{"type":"object"}},"job":{"type":"object"},"principal":{"type":"object"},"report":{"type":"object"},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"replayed":{"type":"boolean"}}},"products-upsert":{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200},"target_id":{"type":"string","format":"uuid"},"expected_revision":{"type":"integer","minimum":0,"description":"Required for updates; read record.revision first. Use 0 or omit for a new record."},"mode":{"enum":["catalog","prices","combined"],"default":"catalog"},"currency":{"type":"string","description":"Must equal company currency when provided."},"name":{"type":"string","maxLength":200},"sku":{"type":"string","maxLength":100},"kind":{"enum":["single","bundle"]},"active":{"type":"boolean","default":false},"category_ids":{"type":"array","items":{"$ref":"#\/components\/schemas\/Reference"},"minItems":1,"maxItems":50},"collection_id":{"oneOf":[{"$ref":"#\/components\/schemas\/Reference"},{"type":"null"}]},"brand_id":{"oneOf":[{"$ref":"#\/components\/schemas\/Reference"},{"type":"null"}]},"translations":{"type":"object","description":"Enabled language codes only; main name\/description fields use the company base language. Category names are translated; collection\/brand names are shared. Omitted fields are preserved.","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},"details":{"type":"object","properties":{"description":{"type":"string","maxLength":4000},"width":{"type":["string","null"],"description":"Non-negative decimal; cm for width\/height\/depth, kg for weight, m³ for packaged volume."},"height":{"type":["string","null"],"description":"Non-negative decimal; cm for width\/height\/depth, kg for weight, m³ for packaged volume."},"depth":{"type":["string","null"],"description":"Non-negative decimal; cm for width\/height\/depth, kg for weight, m³ for packaged volume."},"weight":{"type":["string","null"],"description":"Non-negative decimal; cm for width\/height\/depth, kg for weight, m³ for packaged volume."},"volume":{"type":["string","null"],"description":"Non-negative decimal; cm for width\/height\/depth, kg for weight, m³ for packaged volume."}},"required":[],"additionalProperties":false,"description":""},"unit":{"enum":["piece","metre","sqm","cbm"]},"components":{"type":"array","items":{"type":"object","properties":{"product_id":{"$ref":"#\/components\/schemas\/Reference"},"quantity":{"type":"integer","minimum":1,"maximum":10000}},"required":["product_id","quantity"],"additionalProperties":false,"description":""},"maxItems":100},"media_ids":{"type":"array","items":{"$ref":"#\/components\/schemas\/Reference"},"maxItems":50},"cover_id":{"oneOf":[{"$ref":"#\/components\/schemas\/Reference"},{"type":"null"}]},"fields":{"type":"array","items":{"$ref":"#\/components\/schemas\/SelectionField"},"maxItems":100},"price":{"type":"string","pattern":"^\\d{1,16}(\\.\\d{1,2})?$","description":"Non-negative decimal string. Money uses the company currency; no currency conversion."},"market_price":{"oneOf":[{"type":"string","pattern":"^\\d{1,16}(\\.\\d{1,2})?$","description":"Non-negative decimal string. Money uses the company currency; no currency conversion."},{"type":"null"}]},"cost":{"oneOf":[{"type":"string","pattern":"^\\d{1,16}(\\.\\d{1,2})?$","description":"Non-negative decimal string. Money uses the company currency; no currency conversion."},{"type":"null"}]},"tax_rate":{"oneOf":[{"type":"string","pattern":"^\\d{1,16}(\\.\\d{1,2})?$","description":"Non-negative decimal string. Money uses the company currency; no currency conversion."},{"type":"null"}]}},"required":["external_id"],"additionalProperties":false,"description":"Partial update. New records also require name and relevant category\/type\/group references. catalog mode excludes price\/cost; prices mode changes only price fields on existing records; combined allows both with separate scopes."},"categories-upsert":{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200},"target_id":{"type":"string","format":"uuid"},"expected_revision":{"type":"integer","minimum":0,"description":"Required for updates; read record.revision first. Use 0 or omit for a new record."},"mode":{"enum":["catalog","prices","combined"],"default":"catalog"},"currency":{"type":"string","description":"Must equal company currency when provided."},"name":{"type":"string"},"parent_id":{"oneOf":[{"$ref":"#\/components\/schemas\/Reference"},{"type":"null"}]},"translations":{"type":"object","description":"Enabled language codes only; main name\/description fields use the company base language. Category names are translated; collection\/brand names are shared. Omitted fields are preserved.","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},"description":{"type":"string"},"image_id":{"oneOf":[{"$ref":"#\/components\/schemas\/Reference"},{"type":"null"}]}},"required":["external_id"],"additionalProperties":false,"description":"Partial update. New records also require name and relevant category\/type\/group references. catalog mode excludes price\/cost; prices mode changes only price fields on existing records; combined allows both with separate scopes."},"collections-upsert":{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200},"target_id":{"type":"string","format":"uuid"},"expected_revision":{"type":"integer","minimum":0,"description":"Required for updates; read record.revision first. Use 0 or omit for a new record."},"mode":{"enum":["catalog","prices","combined"],"default":"catalog"},"currency":{"type":"string","description":"Must equal company currency when provided."},"name":{"type":"string"},"translations":{"type":"object","description":"Enabled language codes only; main name\/description fields use the company base language. Category names are translated; collection\/brand names are shared. Omitted fields are preserved.","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},"description":{"type":"string"},"image_id":{"oneOf":[{"$ref":"#\/components\/schemas\/Reference"},{"type":"null"}]}},"required":["external_id"],"additionalProperties":false,"description":"Partial update. New records also require name and relevant category\/type\/group references. catalog mode excludes price\/cost; prices mode changes only price fields on existing records; combined allows both with separate scopes."},"brands-upsert":{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200},"target_id":{"type":"string","format":"uuid"},"expected_revision":{"type":"integer","minimum":0,"description":"Required for updates; read record.revision first. Use 0 or omit for a new record."},"mode":{"enum":["catalog","prices","combined"],"default":"catalog"},"currency":{"type":"string","description":"Must equal company currency when provided."},"name":{"type":"string"},"translations":{"type":"object","description":"Enabled language codes only; main name\/description fields use the company base language. Category names are translated; collection\/brand names are shared. Omitted fields are preserved.","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},"description":{"type":"string"},"image_id":{"oneOf":[{"$ref":"#\/components\/schemas\/Reference"},{"type":"null"}]}},"required":["external_id"],"additionalProperties":false,"description":"Partial update. New records also require name and relevant category\/type\/group references. catalog mode excludes price\/cost; prices mode changes only price fields on existing records; combined allows both with separate scopes."},"customization-types-upsert":{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200},"target_id":{"type":"string","format":"uuid"},"expected_revision":{"type":"integer","minimum":0,"description":"Required for updates; read record.revision first. Use 0 or omit for a new record."},"mode":{"enum":["catalog","prices","combined"],"default":"catalog"},"currency":{"type":"string","description":"Must equal company currency when provided."},"name":{"type":"string"},"translations":{"type":"object","description":"Enabled language codes only; main name\/description fields use the company base language. Category names are translated; collection\/brand names are shared. Omitted fields are preserved.","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},"pricing_scope":{"enum":["group","option"]},"archived":{"type":"boolean"}},"required":["external_id"],"additionalProperties":false,"description":"Partial update. New records also require name and relevant category\/type\/group references. catalog mode excludes price\/cost; prices mode changes only price fields on existing records; combined allows both with separate scopes."},"customization-groups-upsert":{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200},"target_id":{"type":"string","format":"uuid"},"expected_revision":{"type":"integer","minimum":0,"description":"Required for updates; read record.revision first. Use 0 or omit for a new record."},"mode":{"enum":["catalog","prices","combined"],"default":"catalog"},"currency":{"type":"string","description":"Must equal company currency when provided."},"name":{"type":"string"},"translations":{"type":"object","description":"Enabled language codes only; main name\/description fields use the company base language. Category names are translated; collection\/brand names are shared. Omitted fields are preserved.","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},"type_id":{"$ref":"#\/components\/schemas\/Reference"},"active":{"type":"boolean"},"photo_enabled":{"type":"boolean"},"pricing_mode":{"enum":["none","percent","fixed"]},"pricing_value":{"type":"string","pattern":"^\\d{1,16}(\\.\\d{1,2})?$","description":"Non-negative decimal string. Money uses the company currency; no currency conversion."}},"required":["external_id"],"additionalProperties":false,"description":"Partial update. New records also require name and relevant category\/type\/group references. catalog mode excludes price\/cost; prices mode changes only price fields on existing records; combined allows both with separate scopes."},"customization-options-upsert":{"type":"object","properties":{"external_id":{"type":"string","minLength":1,"maxLength":200},"target_id":{"type":"string","format":"uuid"},"expected_revision":{"type":"integer","minimum":0,"description":"Required for updates; read record.revision first. Use 0 or omit for a new record."},"mode":{"enum":["catalog","prices","combined"],"default":"catalog"},"currency":{"type":"string","description":"Must equal company currency when provided."},"name":{"type":"string"},"translations":{"type":"object","description":"Enabled language codes only; main name\/description fields use the company base language. Category names are translated; collection\/brand names are shared. Omitted fields are preserved.","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},"group_id":{"$ref":"#\/components\/schemas\/Reference"},"code":{"type":"string"},"active":{"type":"boolean"},"media_id":{"oneOf":[{"$ref":"#\/components\/schemas\/Reference"},{"type":"null"}]},"pricing_mode":{"enum":["none","percent","fixed"]},"pricing_value":{"type":"string","pattern":"^\\d{1,16}(\\.\\d{1,2})?$","description":"Non-negative decimal string. Money uses the company currency; no currency conversion."}},"required":["external_id"],"additionalProperties":false,"description":"Partial update. New records also require name and relevant category\/type\/group references. catalog mode excludes price\/cost; prices mode changes only price fields on existing records; combined allows both with separate scopes."},"StockWrite":{"type":"object","properties":{"event_id":{"type":"string","format":"uuid"},"source_kind":{"enum":["product","option"]},"source_id":{"$ref":"#\/components\/schemas\/Reference"},"location_id":{"type":"string","format":"uuid"},"action":{"enum":["set","in","out"]},"quantity":{"type":"string","pattern":"^\\d{1,9}(\\.\\d{1,3})?$"},"revision":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000}},"required":["event_id","source_kind","source_id","location_id","action","quantity","revision","note"],"additionalProperties":false,"description":"Updates physical stock only in an assigned location. Preserves reserved and incoming stock. Cannot reduce physical below reserved or zero. Pieces must be whole numbers. A new balance uses revision 0. Read inventory\/{item_id} balances for subsequent revisions."},"Import":{"type":"object","properties":{"dry_run":{"type":"boolean","default":false},"records":{"type":"array","minItems":1,"maxItems":50,"items":{"oneOf":[{"type":"object","properties":{"resource":{"const":"products"},"body":{"$ref":"#\/components\/schemas\/products-upsert"}},"required":["resource","body"],"additionalProperties":false,"description":""},{"type":"object","properties":{"resource":{"const":"categories"},"body":{"$ref":"#\/components\/schemas\/categories-upsert"}},"required":["resource","body"],"additionalProperties":false,"description":""},{"type":"object","properties":{"resource":{"const":"collections"},"body":{"$ref":"#\/components\/schemas\/collections-upsert"}},"required":["resource","body"],"additionalProperties":false,"description":""},{"type":"object","properties":{"resource":{"const":"brands"},"body":{"$ref":"#\/components\/schemas\/brands-upsert"}},"required":["resource","body"],"additionalProperties":false,"description":""},{"type":"object","properties":{"resource":{"const":"customization-types"},"body":{"$ref":"#\/components\/schemas\/customization-types-upsert"}},"required":["resource","body"],"additionalProperties":false,"description":""},{"type":"object","properties":{"resource":{"const":"customization-groups"},"body":{"$ref":"#\/components\/schemas\/customization-groups-upsert"}},"required":["resource","body"],"additionalProperties":false,"description":""},{"type":"object","properties":{"resource":{"const":"customization-options"},"body":{"$ref":"#\/components\/schemas\/customization-options-upsert"}},"required":["resource","body"],"additionalProperties":false,"description":""}]}}},"required":["records"],"additionalProperties":false,"description":"Dry run returns a synchronous report and rolls back all changes. Otherwise 202 creates a job. Records resolve dependencies in multiple passes; each record is atomic; failures do not cancel other records."}}}}