{"openapi":"3.1.0","info":{"title":"AIURION Agentic 3D Printing API","version":"1.0.0-beta","description":"Public agent API for creating an immediate guest session, requesting a free AIURION 3D print quote, obtaining explicit customer approval, creating a Stripe Checkout URL, and tracking model review and fulfillment. No invitation is required for guest access. Stripe Checkout authorizes the card; AIURION captures payment only after manually approving the model.","termsOfService":"https://aiurion.com/tos","contact":{"name":"AIURION","url":"https://aiurion.com/contact"}},"servers":[{"url":"https://aiurion.com/api/agent/v1","description":"AIURION production"}],"tags":[{"name":"Agent discovery","description":"Public capability and protocol discovery."},{"name":"Guest access","description":"Public, automatic issuance of short-lived tokens scoped to the print workflow."},{"name":"Print quotes","description":"Free-beta 3D print quoting using a guest or permanent token."},{"name":"Checkout","description":"Customer-approved creation of a Stripe Checkout URL. Stripe authorizes the card and AIURION captures payment only after model approval."},{"name":"Orders","description":"Order discovery and status using the originating quote ID."}],"externalDocs":{"description":"AIURION Agentic 3D Printing guide","url":"https://aiurion.com/ai-agents"},"x-mcp-endpoint":"https://aiurion.com/api/agent/v1/mcp","paths":{"/":{"get":{"operationId":"getPrintCapabilities","summary":"Get AIURION agent API capabilities","tags":["Agent discovery"],"security":[],"responses":{"200":{"description":"Agent API capabilities","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/sessions":{"post":{"operationId":"startGuestSession","summary":"Start a public guest agent session","description":"Immediately returns a scoped 24-hour Bearer token with three free quote attempts. No account, invitation, or payment method is required. Network-level issuance limits prevent repeatedly creating sessions to bypass the allowance.","tags":["Guest access"],"security":[],"parameters":[{"$ref":"#/components/parameters/AgentName"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"agentName":{"type":"string","minLength":1,"maxLength":120}},"additionalProperties":false}}}},"responses":{"201":{"description":"Guest session created","content":{"application/json":{"schema":{"type":"object","required":["success","requestId","session"],"properties":{"success":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid"},"session":{"type":"object","required":["accessToken","tokenType","accessTier","expiresAt","quoteAllowance","rateLimitPerMinute","scopes"],"properties":{"accessToken":{"type":"string","pattern":"^aiq_guest_[A-Za-z0-9_-]{24,128}$","x-sensitive":true,"description":"Short-lived secret returned once. Send it in the Authorization Bearer header."},"tokenType":{"type":"string","const":"Bearer"},"accessTier":{"type":"string","const":"guest"},"expiresAt":{"type":"string","format":"date-time"},"quoteAllowance":{"type":"integer","minimum":1},"rateLimitPerMinute":{"type":"integer","minimum":1},"scopes":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"401":{"description":"Missing, invalid, inactive, or expired token","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"403":{"description":"The credential lacks the required scope","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"409":{"description":"Request conflict","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"413":{"description":"Uploaded request is too large","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"415":{"description":"Unsupported request content type","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"429":{"description":"Rate or beta quota exceeded","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"503":{"description":"Agent API temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}}}}},"/print-quotes":{"post":{"operationId":"createPrintQuote","summary":"Upload a 3D model and create a free-beta print quote","description":"A successfully persisted quote counts against the credential's free allowance but is not billed. Use a new Idempotency-Key for each intended quote. Read quote.checkoutEligibility before asking for approval or creating checkout; it explains whether the configured base-print minimum or maximum has been met.","tags":["Print quotes"],"security":[{"agentApiKey":[]}],"parameters":[{"$ref":"#/components/parameters/AgentName"},{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique request key, 8-128 characters, used to safely retry quote creation.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","quantity"],"properties":{"file":{"type":"string","format":"binary","description":"STL, OBJ, STEP, STP, or 3MF model, up to 5 MB."},"quantity":{"type":"integer","minimum":1,"default":1}}}}}},"responses":{"200":{"description":"Existing quote returned for an idempotent replay","content":{"application/json":{"schema":{"type":"object","required":["success","requestId","idempotentReplay","usage","quote"],"properties":{"success":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid"},"idempotentReplay":{"type":"boolean"},"usage":{"type":"object","required":["remainingQuotes"],"properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0,"description":"Remaining free-beta quote allowance, or null for an unmetered beta key."}}},"quote":{"type":"object","description":"The authoritative AIURION quote, including selectable manufacturing and fulfillment options.","additionalProperties":true,"properties":{"quoteId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1},"currency":{"type":"string","example":"usd"},"expiresAt":{"type":"string","format":"date-time"},"checkoutEligibility":{"type":"object","required":["eligible","code","message","currentBasePrice","minimumBasePrice","minimumShortfall","maximumBasePrice","maximumExcess"],"description":"Machine-readable self-serve checkout eligibility. Limits apply to the base print price before production, fulfillment, and tax.","properties":{"eligible":{"type":"boolean"},"code":{"type":["string","null"],"enum":["minimum_order_not_met","maximum_order_exceeded",null]},"message":{"type":"string","description":"A customer-readable explanation of eligibility and any amount needed before checkout."},"currentBasePrice":{"type":"number","minimum":0},"minimumBasePrice":{"type":"number","minimum":0},"minimumShortfall":{"type":"number","minimum":0},"maximumBasePrice":{"type":"number","minimum":0},"maximumExcess":{"type":"number","minimum":0}}}}}}}}}},"201":{"description":"Quote created","content":{"application/json":{"schema":{"type":"object","required":["success","requestId","idempotentReplay","usage","quote"],"properties":{"success":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid"},"idempotentReplay":{"type":"boolean"},"usage":{"type":"object","required":["remainingQuotes"],"properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0,"description":"Remaining free-beta quote allowance, or null for an unmetered beta key."}}},"quote":{"type":"object","description":"The authoritative AIURION quote, including selectable manufacturing and fulfillment options.","additionalProperties":true,"properties":{"quoteId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1},"currency":{"type":"string","example":"usd"},"expiresAt":{"type":"string","format":"date-time"},"checkoutEligibility":{"type":"object","required":["eligible","code","message","currentBasePrice","minimumBasePrice","minimumShortfall","maximumBasePrice","maximumExcess"],"description":"Machine-readable self-serve checkout eligibility. Limits apply to the base print price before production, fulfillment, and tax.","properties":{"eligible":{"type":"boolean"},"code":{"type":["string","null"],"enum":["minimum_order_not_met","maximum_order_exceeded",null]},"message":{"type":"string","description":"A customer-readable explanation of eligibility and any amount needed before checkout."},"currentBasePrice":{"type":"number","minimum":0},"minimumBasePrice":{"type":"number","minimum":0},"minimumShortfall":{"type":"number","minimum":0},"maximumBasePrice":{"type":"number","minimum":0},"maximumExcess":{"type":"number","minimum":0}}}}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"401":{"description":"Missing, invalid, inactive, or expired token","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"403":{"description":"The credential lacks the required scope","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"409":{"description":"Request conflict","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"413":{"description":"Uploaded request is too large","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"415":{"description":"Unsupported request content type","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"429":{"description":"Rate or beta quota exceeded","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"503":{"description":"Agent API temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}}}}},"/print-quotes/{quoteId}":{"parameters":[{"$ref":"#/components/parameters/QuoteId"},{"$ref":"#/components/parameters/AgentName"}],"get":{"operationId":"getPrintQuote","summary":"Get a print quote","tags":["Print quotes"],"security":[{"agentApiKey":[]}],"responses":{"200":{"description":"Quote loaded","content":{"application/json":{"schema":{"type":"object","required":["success","requestId","quote"],"properties":{"success":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid"},"quote":{"type":"object","description":"The authoritative AIURION quote, including selectable manufacturing and fulfillment options.","additionalProperties":true,"properties":{"quoteId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1},"currency":{"type":"string","example":"usd"},"expiresAt":{"type":"string","format":"date-time"},"checkoutEligibility":{"type":"object","required":["eligible","code","message","currentBasePrice","minimumBasePrice","minimumShortfall","maximumBasePrice","maximumExcess"],"description":"Machine-readable self-serve checkout eligibility. Limits apply to the base print price before production, fulfillment, and tax.","properties":{"eligible":{"type":"boolean"},"code":{"type":["string","null"],"enum":["minimum_order_not_met","maximum_order_exceeded",null]},"message":{"type":"string","description":"A customer-readable explanation of eligibility and any amount needed before checkout."},"currentBasePrice":{"type":"number","minimum":0},"minimumBasePrice":{"type":"number","minimum":0},"minimumShortfall":{"type":"number","minimum":0},"maximumBasePrice":{"type":"number","minimum":0},"maximumExcess":{"type":"number","minimum":0}}}}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"401":{"description":"Missing, invalid, inactive, or expired token","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"403":{"description":"The credential lacks the required scope","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"409":{"description":"Request conflict","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"413":{"description":"Uploaded request is too large","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"415":{"description":"Unsupported request content type","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"429":{"description":"Rate or beta quota exceeded","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"503":{"description":"Agent API temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}}}},"patch":{"operationId":"updatePrintQuote","summary":"Update quote selections and obtain an authoritative total","tags":["Print quotes"],"security":[{"agentApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"quantity":{"type":"integer","minimum":1},"materialId":{"type":"string"},"productionSpeed":{"type":"string","description":"A production speed offered by the quote."},"fulfillmentMethod":{"type":"string","description":"A fulfillment method offered by the quote."}},"minProperties":1,"additionalProperties":false}}}},"responses":{"200":{"description":"Quote updated","content":{"application/json":{"schema":{"type":"object","required":["success","requestId","quote"],"properties":{"success":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid"},"quote":{"type":"object","description":"The authoritative AIURION quote, including selectable manufacturing and fulfillment options.","additionalProperties":true,"properties":{"quoteId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1},"currency":{"type":"string","example":"usd"},"expiresAt":{"type":"string","format":"date-time"},"checkoutEligibility":{"type":"object","required":["eligible","code","message","currentBasePrice","minimumBasePrice","minimumShortfall","maximumBasePrice","maximumExcess"],"description":"Machine-readable self-serve checkout eligibility. Limits apply to the base print price before production, fulfillment, and tax.","properties":{"eligible":{"type":"boolean"},"code":{"type":["string","null"],"enum":["minimum_order_not_met","maximum_order_exceeded",null]},"message":{"type":"string","description":"A customer-readable explanation of eligibility and any amount needed before checkout."},"currentBasePrice":{"type":"number","minimum":0},"minimumBasePrice":{"type":"number","minimum":0},"minimumShortfall":{"type":"number","minimum":0},"maximumBasePrice":{"type":"number","minimum":0},"maximumExcess":{"type":"number","minimum":0}}}}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"401":{"description":"Missing, invalid, inactive, or expired token","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"403":{"description":"The credential lacks the required scope","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"409":{"description":"Request conflict","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"413":{"description":"Uploaded request is too large","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"415":{"description":"Unsupported request content type","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"429":{"description":"Rate or beta quota exceeded","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"503":{"description":"Agent API temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}}}}},"/print-quotes/{quoteId}/checkout":{"parameters":[{"$ref":"#/components/parameters/QuoteId"},{"$ref":"#/components/parameters/AgentName"},{"$ref":"#/components/parameters/IdempotencyKey"}],"post":{"operationId":"createCheckout","summary":"Create a Stripe Checkout URL after customer approval","description":"The agent must show the customer the final quote and obtain explicit approval first. This operation only creates a Stripe Checkout URL. It does not charge the customer. The customer supplies payment details directly to Stripe, which places a temporary authorization hold. AIURION captures the payment only after manually approving the submitted model. The Idempotency-Key is durably bound to the quote and approved checkout selections; retrying the same payload replays the original result, while reusing the key with a different payload returns a conflict.","tags":["Checkout"],"security":[{"agentApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["approvalConfirmed"],"properties":{"approvalConfirmed":{"type":"boolean","const":true,"description":"Confirms the customer explicitly approved the final quote before this request."},"materialId":{"type":"string"},"productionSpeed":{"type":"string"},"fulfillmentMethod":{"type":"string"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Stripe Checkout URL created or reused","content":{"application/json":{"schema":{"type":"object","required":["success","requestId","idempotentReplay","checkout"],"properties":{"success":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid"},"idempotentReplay":{"type":"boolean","description":"True when the original successful response was replayed for this key and payload."},"checkout":{"type":"object","required":["checkoutSessionId","paymentCompleted","requiresCustomerAction","message"],"properties":{"url":{"type":"string","format":"uri","description":"Customer-facing Stripe Checkout URL. Checkout authorizes the card; AIURION captures it only after model approval."},"checkoutSessionId":{"type":"string"},"alreadyPaid":{"type":"boolean"},"paymentCompleted":{"type":"boolean"},"requiresCustomerAction":{"type":"boolean"},"message":{"type":"string"}}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"401":{"description":"Missing, invalid, inactive, or expired token","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"403":{"description":"The credential lacks the required scope","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"409":{"description":"Request conflict","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"413":{"description":"Uploaded request is too large","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"415":{"description":"Unsupported request content type","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"429":{"description":"Rate or beta quota exceeded","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"503":{"description":"Agent API temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}}}}},"/print-quotes/{quoteId}/order":{"parameters":[{"$ref":"#/components/parameters/QuoteId"},{"$ref":"#/components/parameters/AgentName"}],"get":{"operationId":"getOrderStatus","summary":"Find and track the order created from a quote","description":"Use the quote ID already known to the agent to discover whether payment produced an order and retrieve its current fulfillment state.","tags":["Orders"],"security":[{"agentApiKey":[]}],"responses":{"200":{"description":"Order status loaded","content":{"application/json":{"schema":{"type":"object","required":["success","requestId","state","quote","order"],"properties":{"success":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid"},"state":{"type":"string","enum":["awaiting_checkout","awaiting_payment","awaiting_manufacturing_review","authorization_expired","rejected","processing_payment","paid","queued","printing","ready","shipped","cancelled"]},"quote":{"type":"object","required":["quoteId","status","paymentStatus","checkoutCreated"],"properties":{"quoteId":{"type":"string","format":"uuid"},"status":{"type":"string"},"paymentStatus":{"type":"string"},"paymentReviewStatus":{"type":["string","null"]},"paymentAuthorizedAt":{"type":["string","null"],"format":"date-time"},"paymentAuthorizationExpiresAt":{"type":["string","null"],"format":"date-time"},"paymentReviewReason":{"type":["string","null"]},"checkoutCreated":{"type":"boolean"},"expiresAt":{"type":["string","null"],"format":"date-time"}}},"order":{"oneOf":[{"type":"object","description":"The order and fulfillment state associated with the print quote.","additionalProperties":true,"properties":{"orderId":{"type":"string","format":"uuid"},"quoteId":{"type":"string","format":"uuid"},"status":{"type":"string","description":"Current payment, production, shipment, or delivery state."}}},{"type":"null"}],"description":"Null when the customer has not completed payment or order creation is still pending."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"401":{"description":"Missing, invalid, inactive, or expired token","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"403":{"description":"The credential lacks the required scope","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"409":{"description":"Request conflict","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"413":{"description":"Uploaded request is too large","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"415":{"description":"Unsupported request content type","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"429":{"description":"Rate or beta quota exceeded","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}},"503":{"description":"Agent API temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"retryAfter":{"type":"integer","minimum":1,"description":"Seconds before retrying a rate-limited request."},"usage":{"type":"object","properties":{"remainingQuotes":{"type":["integer","null"],"minimum":0}}}}}}}}}}}},"components":{"securitySchemes":{"agentApiKey":{"type":"http","scheme":"bearer","bearerFormat":"AIURION guest token (aiq_guest_...) or permanent key (aiq_live_...)","description":"Use a guest token returned immediately by POST /sessions, or a permanent integration or partner key. Send as Authorization: Bearer <token>."}},"parameters":{"AgentName":{"name":"X-Agent-Name","in":"header","required":false,"description":"Optional agent or platform name used for attribution and support.","schema":{"type":"string","maxLength":120}},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable request key, 8-128 characters. Reuse it only when retrying the same operation and payload.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$"}},"QuoteId":{"name":"quoteId","in":"path","required":true,"description":"AIURION print quote UUID.","schema":{"type":"string","format":"uuid"}}}}}