{"openapi":"3.1.0","info":{"title":"EIRVEN Agent Shopping API","version":"1.0.0","description":"Use the same-origin storefront transport and a buyer session cookie. Read /agent-catalog.json for available variants, complete recipe templates and sizes. Save a recipe with a stable creationId, obtain a CAD quote, show the buyer the design, price and policies, then create hosted Stripe checkout with a stable idempotencyKey after buyer authorization. Terrain, mesh and manufacturing QA do not block checkout. Manufacturing review follows payment. Quotes expire; refresh and review a changed price. Payment is confirmed by signed webhooks and order status, not the success redirect. No raw card data or delegated payment tokens are accepted. ChatGPT Instant Checkout and ACP delegated payments are not enabled. New sales: CAD, Canada delivery, shipping included, applicable tax at Stripe checkout. Current purchase policies are drafts: /terms, /shipping and /refunds."},"paths":{"/api/auth/session":{"get":{"summary":"Session","operationId":"session_api_auth_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[]}},"/api/auth/guest":{"post":{"summary":"Guest","operationId":"guest_api_auth_guest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[],"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","format":"uri"},"description":"The exact storefront origin. Unapproved origins are rejected."}]}},"/api/v1/designs":{"get":{"summary":"List Designs","operationId":"list_designs_api_v1_designs_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Pagesize"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"currentRevision":{"type":"integer"},"name":{"type":"string"}},"required":["id","currentRevision"]}}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}]},"post":{"summary":"Create Design","operationId":"create_design_api_v1_designs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignMutation"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"currentRevision":{"type":"integer"},"name":{"type":"string"},"revision":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"config":{"$ref":"#/components/schemas/DesignRecipe"},"revisionNumber":{"type":"integer"},"generatorVersion":{"type":"string"}},"required":["id","config"]}},"required":["id","currentRevision","revision"]}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}],"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","format":"uri"},"description":"The exact storefront origin. Unapproved origins are rejected."}]}},"/api/v1/designs/{design_id}":{"get":{"summary":"Read Design","operationId":"read_design_api_v1_designs__design_id__get","parameters":[{"name":"design_id","in":"path","required":true,"schema":{"type":"string","title":"Design Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"currentRevision":{"type":"integer"},"name":{"type":"string"},"revision":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"config":{"$ref":"#/components/schemas/DesignRecipe"},"revisionNumber":{"type":"integer"},"generatorVersion":{"type":"string"}},"required":["id","config"]}},"required":["id","currentRevision","revision"]}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}]},"patch":{"summary":"Update Design","operationId":"update_design_api_v1_designs__design_id__patch","parameters":[{"name":"design_id","in":"path","required":true,"schema":{"type":"string","title":"Design Id"}},{"name":"Origin","in":"header","required":true,"schema":{"type":"string","format":"uri"},"description":"The exact storefront origin. Unapproved origins are rejected."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignMutation"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"currentRevision":{"type":"integer"},"name":{"type":"string"},"revision":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"config":{"$ref":"#/components/schemas/DesignRecipe"},"revisionNumber":{"type":"integer"},"generatorVersion":{"type":"string"}},"required":["id","config"]}},"required":["id","currentRevision","revision"]}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}]}},"/api/v1/map/search":{"get":{"summary":"Map Search","operationId":"map_search_api_v1_map_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":120,"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","maxItems":6,"items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"center":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"]}},"required":["id","label","center"]}}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[]}},"/api/v1/generation-jobs":{"post":{"summary":"Generate","operationId":"generate_api_v1_generation_jobs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"designRevisionId":{"type":"string","format":"uuid"},"state":{"type":"string"},"stage":{"type":"string"}},"required":["id","designRevisionId","state","stage"]}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}],"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","format":"uri"},"description":"The exact storefront origin. Unapproved origins are rejected."}]}},"/api/v1/generation-jobs/{job_id}":{"get":{"summary":"Job Status","operationId":"job_status_api_v1_generation_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"designRevisionId":{"type":"string","format":"uuid"},"state":{"type":"string"},"stage":{"type":"string"}},"required":["id","designRevisionId","state","stage"]}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}]}},"/api/v1/quotes":{"post":{"summary":"Quote","operationId":"quote_api_v1_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"versionId":{"type":"string","format":"uuid"},"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"totalMinor":{"type":"integer","minimum":1},"currency":{"type":"string","enum":["cad","usd"]},"expiresAt":{"type":"string","format":"date-time"},"checkoutEnabled":{"type":"boolean"},"currencyLocked":{"type":"boolean"},"checkoutUnavailableReason":{"type":["string","null"]}},"required":["id","versionId","fingerprint","totalMinor","currency","expiresAt","checkoutEnabled"]}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}],"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","format":"uri"},"description":"The exact storefront origin. Unapproved origins are rejected."}]}},"/api/v1/checkout-sessions":{"post":{"summary":"Checkout","operationId":"checkout_api_v1_checkout_sessions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"checkoutUrl":{"type":"string","format":"uri"}},"required":["checkoutUrl"]}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}],"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","format":"uri"},"description":"The exact storefront origin. Unapproved origins are rejected."}]}},"/api/v1/orders":{"get":{"summary":"Orders","operationId":"orders_api_v1_orders_get","parameters":[{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^cs_(test|live)_[A-Za-z0-9]{16,200}$"},{"type":"null"}],"title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","maxItems":50,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"paymentStatus":{"type":"string"},"currency":{"type":"string"},"total_minor":{"type":"integer"},"sizeLater":{"type":"boolean"},"sizePending":{"type":"boolean"}},"required":["id","status","paymentStatus","currency","total_minor"]}}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}]}},"/api/v1/orders/{order_id}":{"get":{"summary":"Order Details","operationId":"order_details_api_v1_orders__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"paymentStatus":{"type":"string"},"currency":{"type":"string"},"total_minor":{"type":"integer"},"sizeLater":{"type":"boolean"},"sizePending":{"type":"boolean"}},"required":["id","status","paymentStatus","currency","total_minor"]}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}]}},"/api/v1/orders/{order_id}/size-confirmation":{"post":{"summary":"Confirm Order Size","operationId":"confirm_order_size_api_v1_orders__order_id__size_confirmation_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"Origin","in":"header","required":true,"schema":{"type":"string","format":"uri"},"description":"The exact storefront origin. Unapproved origins are rejected."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeConfirmationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[{"BuyerSession":[]}]}},"/agent-catalog.json":{"get":{"operationId":"read_agent_catalog","summary":"Read available variants, reference CAD prices, recipe templates and sizing tables","responses":{"200":{"description":"Current public catalogue","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"currency":{"const":"CAD","type":"string"},"pricingVersion":{"type":"string"},"variants":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"title":{"type":"string"},"priceMinor":{"type":"integer"},"recipe":{"$ref":"#/components/schemas/DesignRecipe"}},"required":["code","title","priceMinor","recipe"]}},"sizes":{"type":"object"},"purchase":{"type":"object"}},"required":["name","currency","variants","sizes","purchase"]}}}},"401":{"description":"Buyer session required","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"403":{"description":"Origin or operation not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"404":{"description":"Object not found for this buyer","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"409":{"description":"Revision, recipe, quote or idempotency conflict; review again","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"429":{"description":"Rate limit reached; back off","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}},"503":{"description":"Checkout or provider unavailable; preserve the saved design","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}}}},"security":[]}}},"components":{"schemas":{"CheckoutRequest":{"properties":{"quoteId":{"type":"string","pattern":"^[0-9a-fA-F-]{36}$","title":"Quoteid"},"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$","title":"Fingerprint"},"idempotencyKey":{"type":"string","maxLength":120,"minLength":16,"title":"Idempotencykey"}},"additionalProperties":false,"type":"object","required":["quoteId","fingerprint","idempotencyKey"],"title":"CheckoutRequest"},"DesignMutation":{"properties":{"creationId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Creationid"},"studioStep":{"anyOf":[{"type":"integer","maximum":6.0,"minimum":0.0},{"type":"null"}],"title":"Studiostep"},"config":{"$ref":"#/components/schemas/DesignRecipe"},"expectedRevision":{"type":"integer","minimum":0.0,"title":"Expectedrevision"},"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Name"}},"additionalProperties":false,"type":"object","required":["config","expectedRevision"],"title":"DesignMutation"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobRequest":{"properties":{"designId":{"type":"string","pattern":"^[0-9a-fA-F-]{36}$","title":"Designid"},"expectedRevision":{"type":"integer","minimum":1.0,"title":"Expectedrevision"},"jobType":{"type":"string","enum":["preview_mesh","manufacturing_mesh"],"title":"Jobtype","default":"preview_mesh"}},"additionalProperties":false,"type":"object","required":["designId","expectedRevision"],"title":"JobRequest"},"QuoteRequest":{"properties":{"versionId":{"type":"string","pattern":"^[0-9a-fA-F-]{36}$","title":"Versionid"},"currency":{"type":"string","const":"CAD","title":"Currency","default":"CAD"}},"additionalProperties":false,"type":"object","required":["versionId"],"title":"QuoteRequest"},"SizeConfirmationRequest":{"properties":{"sizeSystem":{"type":"string","enum":["UK","US","EU","JP"],"title":"Sizesystem"},"sizeLabel":{"type":"string","maxLength":16,"minLength":1,"title":"Sizelabel"}},"additionalProperties":false,"type":"object","required":["sizeSystem","sizeLabel"],"title":"SizeConfirmationRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"DesignRecipe":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"styleCode":{"type":"string","enum":["signet-soft","signet-classic","signet-statement","disc-subtle","disc-classic","disc-statement","square-subtle","square-classic","square-statement"]},"location":{"type":"object","properties":{"center":{"type":"object","properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lng":{"type":"number","minimum":-180,"maximum":180}},"required":["lat","lng"],"additionalProperties":false},"bounds":{"type":"object","properties":{"west":{"type":"number","minimum":-180,"maximum":180},"south":{"type":"number","minimum":-90,"maximum":90},"east":{"type":"number","minimum":-180,"maximum":180},"north":{"type":"number","minimum":-90,"maximum":90}},"required":["west","south","east","north"],"additionalProperties":false},"rotationDeg":{"type":"number","minimum":-180,"maximum":180},"placeLabel":{"type":"string","minLength":1,"maxLength":160}},"required":["center","bounds","rotationDeg"],"additionalProperties":false},"terrain":{"type":"object","properties":{"source":{"type":"string","enum":["mapbox-terrain-dem","maptiler-terrain-rgb","mapzen-terrarium","mars-mola"]},"reliefMm":{"type":"number","minimum":0,"maximum":7.5},"heightFraction":{"type":"number","minimum":0,"maximum":1},"smoothing":{"type":"integer","minimum":0,"maximum":4},"detailLevel":{"type":"string","enum":["low","medium","high"]},"orientationDeg":{"type":"number","minimum":-180,"maximum":180}},"required":["source","reliefMm","smoothing","detailLevel","orientationDeg"],"additionalProperties":false},"shoulder":{"type":"object","properties":{"profileCode":{"type":"string","enum":["straight","classic","curved"]},"blendMm":{"type":"number","minimum":0.2,"maximum":8},"blendCode":{"type":"string","enum":["smooth","subtle","defined"]}},"required":["profileCode","blendMm"],"additionalProperties":false},"band":{"type":"object","properties":{"profileCode":{"type":"string","enum":["flat","classic","d-shaped"]},"widthMm":{"type":"number","minimum":1,"maximum":14},"thicknessMm":{"type":"number","minimum":0.5,"maximum":5}},"required":["profileCode","widthMm","thicknessMm"],"additionalProperties":false},"ring":{"type":"object","properties":{"materialCode":{"type":"string","enum":["silver-925","gold-9k","gold-14k","gold-18k","rose-gold-14k"]},"finishCode":{"type":"string","enum":["polished","satin","oxidized"]},"innerDiameterMm":{"type":"number","minimum":10,"maximum":30},"sizeSystem":{"type":"string","enum":["UK","US","EU","JP"]},"sizeLater":{"type":"boolean"},"sizeLabel":{"type":"string","minLength":1,"maxLength":12},"engraving":{"type":"string","maxLength":40}},"required":["materialCode","finishCode","innerDiameterMm"],"additionalProperties":false}},"required":["schemaVersion","styleCode","location","terrain","shoulder","band","ring"],"additionalProperties":false}},"securitySchemes":{"BuyerSession":{"type":"apiKey","in":"cookie","name":"relief_session","description":"HttpOnly buyer cookie from POST /api/auth/guest. Keep it in your own session cookie jar."}}},"servers":[{"url":"/"}]}