{"openapi":"3.1.0","info":{"title":"Sīrū eSIM Public API","version":"1.0.0","description":"Anonymous public eSIM catalog plus customer-consented OAuth order summaries and purchase preparation. Authorization Code with PKCE S256. Purchases support customer-confirmed checkout or separately enabled automatic payment with a customer mandate and DPoP-bound token; no fixed merchant monetary cap. Partner APIs are not part of this production contract. The public test-card sandbox uses a separate origin, credentials and specification.","x-versioning-policy":"Read-only catalog of visible eSIM products and advertised plans. No account or key required. Filter by destination or region, paginate with limit and offset, and link the traveler to the product page for checkout. Daily plan prices apply to one day. Category filtering takes place after pagination. Version 1 uses a major version in the URL. Backward-compatible additions remain in v1; breaking changes require a new major URL. No version is currently deprecated. At least 90 days before removing a version, publish migration documentation, RFC 9745 Deprecation and a deprecation Link, and an RFC 8594 Sunset date. Both catalog aliases share 600 GET/HEAD requests per verified client IP per Node instance per fixed 60-second window. Unverified or capacity-overflow clients share fallback buckets. Counters reset on process restart and are not a global distributed quota. OPTIONS is unmetered. Responses are private/no-store; public catalog data is cached server-side for one hour. A 429 includes Retry-After and structured JSON recovery guidance.","contact":{"name":"Sīrū support","url":"https://www.siru.world/support","email":"support@siru.world"}},"servers":[{"url":"https://www.siru.world"}],"externalDocs":{"description":"Sīrū API and agent documentation","url":"https://www.siru.world/docs"},"paths":{"/api/v1/purchases":{"post":{"operationId":"executeSiruAutomaticPurchase","summary":"Purchase using customer-enabled automatic payment or return a confirmation link","description":"Requires payments:charge and an RFC 9449 DPoP-bound access token with a fresh proof matching this URL, POST method and token hash. Proof IDs are rejected on replay. The application must support automatic payments and the customer must separately enable a card mandate for that application. If either setting is off, returns requires_customer_confirmation without charging. No fixed Sīrū spending cap. Uses a single durable payment attempt per quote, server price and tax validation, persisted order/snapshot before payment, manual authorization then risk inspection before capture. Non-normal or unavailable Stripe risk outcomes are not captured. Bank authentication returns requires_customer_action and a customer-only checkout URL. Fraud/permission/database failures fail closed. Honor Retry-After. Retry only with the same Idempotency-Key and checkoutId after unknown outcomes. A successful payment is not a promise of completed eSIM provisioning.","servers":[{"url":"https://www.siru.world"}],"security":[{"siruOAuth":["payments:charge"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable per intended purchase, bound to the authenticated customer and client.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}},{"name":"DPoP","in":"header","required":true,"description":"Fresh RFC 9449 proof, signed with the key bound to the access token. Authorization uses DPoP TOKEN.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentAutomaticPurchaseRequest"}}}},"responses":{"200":{"description":"Payment state or safe confirmation fallback. Never includes card credentials or a payment client secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentAutomaticPurchaseResponse"}}}},"400":{"description":"Actionable authorization, input, state, quota or dependency error. Retain the original idempotency key; do not create a new charge after an unknown outcome.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"401":{"description":"Actionable authorization, input, state, quota or dependency error. Retain the original idempotency key; do not create a new charge after an unknown outcome.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"403":{"description":"Actionable authorization, input, state, quota or dependency error. Retain the original idempotency key; do not create a new charge after an unknown outcome.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"404":{"description":"Actionable authorization, input, state, quota or dependency error. Retain the original idempotency key; do not create a new charge after an unknown outcome.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"409":{"description":"Actionable authorization, input, state, quota or dependency error. Retain the original idempotency key; do not create a new charge after an unknown outcome.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"413":{"description":"Actionable authorization, input, state, quota or dependency error. Retain the original idempotency key; do not create a new charge after an unknown outcome.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"429":{"description":"Actionable authorization, input, state, quota or dependency error. Retain the original idempotency key; do not create a new charge after an unknown outcome.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"503":{"description":"Actionable authorization, input, state, quota or dependency error. Retain the original idempotency key; do not create a new charge after an unknown outcome.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}}}}},"/api/v1/me/orders":{"get":{"operationId":"listMySiruOrders","summary":"Read your Sīrū order summaries","description":"Returns only the consenting customer’s orders after verifying token issuer, API audience, current grant and orders:read scope. Excludes activation codes, QR codes, ICCIDs, installation tokens and payment credentials. Technical quota: 120 API requests per customer/client per minute. Persistence errors fail closed.","servers":[{"url":"https://www.siru.world"}],"security":[{"siruOAuth":["orders:read"]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Customer-bound order summaries","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOrderList"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"401":{"description":"Missing, expired or revoked token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"403":{"description":"Missing permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"409":{"description":"Quote or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"429":{"description":"Technical request quota exceeded; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"503":{"description":"Dependency unavailable; no authorization bypass","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}}}}},"/api/v1/checkouts":{"post":{"operationId":"prepareSiruPurchase","summary":"Prepare an eSIM purchase for customer payment","description":"Creates an expiring customer-bound review/payment request for one available plan with orders:purchase consent. No fixed Sīrū monetary spending cap. The customer must sign in, review the plan and authorize payment through existing Stripe checkout, including fraud checks and bank authentication. This operation does not charge a saved card, provision an eSIM, expose card data or grant refund rights. Supply a unique Idempotency-Key; repeat the same key/payload after uncertain results. A changed plan or grant conflicts. Technical quota: 20 API requests per customer/client per minute; quote lifetime 15 minutes and idempotency retention at least 365 days. No automatic purchase retries with new keys.","servers":[{"url":"https://www.siru.world"}],"security":[{"siruOAuth":["orders:purchase"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable per intended purchase, bound to the authenticated customer and client.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPurchaseRequest"}}}},"responses":{"201":{"description":"Purchase requires customer review and payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPurchaseResponse"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"401":{"description":"Missing, expired or revoked token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"403":{"description":"Missing permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"409":{"description":"Quote or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"413":{"description":"Request body exceeds 4096 bytes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"429":{"description":"Technical request quota exceeded; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}},"503":{"description":"Dependency unavailable; no authorization bypass","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiError"}}}}}}},"/api/v1/products":{"get":{"operationId":"listPublicProductsV1","summary":"Browse version 1 of the public Sīrū eSIM catalog","description":"Read-only catalog of visible eSIM products and advertised plans. No account or key required. Filter by destination or region, paginate with limit and offset, and link the traveler to the product page for checkout. Daily plan prices apply to one day. Category filtering takes place after pagination. Version 1 uses a major version in the URL. Backward-compatible additions remain in v1; breaking changes require a new major URL. No version is currently deprecated. At least 90 days before removing a version, publish migration documentation, RFC 9745 Deprecation and a deprecation Link, and an RFC 8594 Sunset date. Both catalog aliases share 600 GET/HEAD requests per verified client IP per Node instance per fixed 60-second window. Unverified or capacity-overflow clients share fallback buckets. Counters reset on process restart and are not a global distributed quota. OPTIONS is unmetered. Responses are private/no-store; public catalog data is cached server-side for one hour. A 429 includes Retry-After and structured JSON recovery guidance.","servers":[{"url":"https://www.siru.world"}],"security":[],"parameters":[{"name":"country_code","in":"query","description":"Two-letter destination country code, case-insensitive.","schema":{"type":"string","pattern":"^[A-Za-z]{2}$"},"example":"JP"},{"name":"region","in":"query","description":"Case-insensitive region substring.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"Asia"},{"name":"category","in":"query","description":"Local or Regional or Global; case-insensitive.","schema":{"type":"string","pattern":"^(?:[Ll][Oo][Cc][Aa][Ll]|[Rr][Ee][Gg][Ii][Oo][Nn][Aa][Ll]|[Gg][Ll][Oo][Bb][Aa][Ll])$"},"example":"Local"},{"name":"limit","in":"query","description":"Maximum products before category filtering.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"offset","in":"query","description":"Zero-based pagination offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740791,"default":0}}],"responses":{"200":{"description":"Public catalog page; an empty products array is a valid result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogResponse"}}},"headers":{"API-Version":{"$ref":"#/components/headers/PublicApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/PublicRateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/PublicRateLimit"},"X-RateLimit-Limit":{"$ref":"#/components/headers/PublicRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/PublicRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/PublicRateLimitReset"}}},"400":{"description":"Invalid filters or pagination; correct the parameters using the hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"}}},"headers":{"API-Version":{"$ref":"#/components/headers/PublicApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/PublicRateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/PublicRateLimit"},"X-RateLimit-Limit":{"$ref":"#/components/headers/PublicRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/PublicRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/PublicRateLimitReset"}}},"429":{"description":"Quota exhausted. Wait Retry-After seconds; both catalog aliases share one allowance.","headers":{"API-Version":{"$ref":"#/components/headers/PublicApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/PublicRateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/PublicRateLimit"},"X-RateLimit-Limit":{"$ref":"#/components/headers/PublicRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/PublicRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/PublicRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/PublicRetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"}}}},"503":{"description":"Temporary catalog outage; retain previous data and retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"}}},"headers":{"API-Version":{"$ref":"#/components/headers/PublicApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/PublicRateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/PublicRateLimit"},"X-RateLimit-Limit":{"$ref":"#/components/headers/PublicRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/PublicRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/PublicRateLimitReset"}}}}}},"/api/products":{"get":{"operationId":"listPublicProducts","summary":"Browse the public Sīrū eSIM catalog","description":"Read-only catalog of visible eSIM products and advertised plans. No account or key required. Filter by destination or region, paginate with limit and offset, and link the traveler to the product page for checkout. Daily plan prices apply to one day. Category filtering takes place after pagination. Compatibility alias for GET /api/v1/products. It remains supported with identical version-1 data and the same shared quota; no removal is scheduled.","servers":[{"url":"https://www.siru.world"}],"security":[],"parameters":[{"name":"country_code","in":"query","description":"Two-letter destination country code, case-insensitive.","schema":{"type":"string","pattern":"^[A-Za-z]{2}$"},"example":"JP"},{"name":"region","in":"query","description":"Case-insensitive region substring.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"Asia"},{"name":"category","in":"query","description":"Local or Regional or Global; case-insensitive.","schema":{"type":"string","pattern":"^(?:[Ll][Oo][Cc][Aa][Ll]|[Rr][Ee][Gg][Ii][Oo][Nn][Aa][Ll]|[Gg][Ll][Oo][Bb][Aa][Ll])$"},"example":"Local"},{"name":"limit","in":"query","description":"Maximum products before category filtering.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"offset","in":"query","description":"Zero-based pagination offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740791,"default":0}}],"responses":{"200":{"description":"Public catalog page; an empty products array is a valid result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogResponse"}}},"headers":{"API-Version":{"$ref":"#/components/headers/PublicApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/PublicRateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/PublicRateLimit"},"X-RateLimit-Limit":{"$ref":"#/components/headers/PublicRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/PublicRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/PublicRateLimitReset"}}},"400":{"description":"Invalid filters or pagination; correct the parameters using the hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"}}},"headers":{"API-Version":{"$ref":"#/components/headers/PublicApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/PublicRateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/PublicRateLimit"},"X-RateLimit-Limit":{"$ref":"#/components/headers/PublicRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/PublicRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/PublicRateLimitReset"}}},"429":{"description":"Quota exhausted. Wait Retry-After seconds; both catalog aliases share one allowance.","headers":{"API-Version":{"$ref":"#/components/headers/PublicApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/PublicRateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/PublicRateLimit"},"X-RateLimit-Limit":{"$ref":"#/components/headers/PublicRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/PublicRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/PublicRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/PublicRetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"}}}},"503":{"description":"Temporary catalog outage; retain previous data and retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"}}},"headers":{"API-Version":{"$ref":"#/components/headers/PublicApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/PublicRateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/PublicRateLimit"},"X-RateLimit-Limit":{"$ref":"#/components/headers/PublicRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/PublicRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/PublicRateLimitReset"}}}}}}},"components":{"schemas":{"AgentAutomaticPurchaseRequest":{"type":"object","additionalProperties":false,"required":["checkoutId"],"properties":{"checkoutId":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"Purchase quote ID from POST /api/v1/checkouts, bound to the same customer, client and grant."}}},"AgentAutomaticPurchaseResponse":{"type":"object","required":["id","status","amountEur","currency","checkoutUrl"],"properties":{"id":{"type":"string","pattern":"^[a-f0-9]{64}$"},"status":{"type":"string","enum":["paid","processing","requires_customer_action","payment_failed","canceled","requires_customer_confirmation","review_required"]},"orderId":{"type":"string","format":"uuid","description":"Order reference, when a payment attempt exists. Paid does not mean provisioning is finished."},"amountEur":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","const":"eur"},"checkoutUrl":{"type":"string","format":"uri","description":"Customer-only confirmation or bank authentication URL. Never contains a payment client secret."},"expiresAt":{"type":"string","format":"date-time"}}},"AgentApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"resolution":{"type":"string"}}}}},"AgentOrderList":{"type":"object","required":["orders","limit","offset"],"properties":{"orders":{"type":"array","items":{"$ref":"#/components/schemas/AgentOrderSummary"}},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"AgentOrderSummary":{"type":"object","required":["id","created_at","status","product_id","final_paid_amount"],"properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"status":{"type":["string","null"]},"product_id":{"type":["string","null"]},"final_paid_amount":{"type":["number","string","null"],"description":"Stored EUR reporting amount, when available; not a payment credential."}}},"AgentPurchaseRequest":{"type":"object","additionalProperties":false,"required":["planId"],"properties":{"planId":{"type":"string","format":"uuid","description":"Current product_plans[].id from the public catalog. One eSIM using this plan’s published duration per request; custom day counts, top-ups, discounts and free orders use the storefront."}}},"AgentPurchaseResponse":{"type":"object","required":["id","status","amountEur","currency","expiresAt","checkoutUrl"],"properties":{"id":{"type":"string","pattern":"^[a-f0-9]{64}$"},"status":{"type":"string","const":"requires_customer_confirmation"},"amountEur":{"type":"number","exclusiveMinimum":0,"description":"Server-quoted inclusive EUR price; changes require a new request."},"currency":{"type":"string","const":"eur"},"expiresAt":{"type":"string","format":"date-time"},"checkoutUrl":{"type":"string","format":"uri","description":"Customer-only review/payment URL requiring sign-in to the consenting account. Not a bearer payment credential."}}},"PublicCatalogResponse":{"type":"object","required":["products","total"],"properties":{"products":{"type":"array","items":{"$ref":"#/components/schemas/PublicProduct"}},"total":{"type":["integer","null"],"minimum":0,"description":"Count before pagination unless category is supplied; with category this is the filtered count on this page."}}},"PublicProduct":{"type":"object","required":["title","slug","coverage","region","country_codes","flag_image_url","is_popular","product_plans","category"],"properties":{"title":{"type":"string"},"slug":{"type":"string"},"coverage":{"type":["string","null"]},"region":{"type":["string","null"]},"country_codes":{"type":["array","null"],"items":{"type":"string"}},"flag_image_url":{"type":["string","null"],"format":"uri"},"is_popular":{"type":["boolean","null"]},"category":{"type":"string","enum":["Local","Regional","Global"]},"product_plans":{"type":"array","items":{"type":"object","required":["id","price","data_amount","duration","type"],"properties":{"id":{"type":"string","format":"uuid","description":"Plan identifier for preparing a purchase."},"price":{"type":"number","description":"Advertised EUR price. Daily plans quote one day; confirm the final amount at checkout."},"data_amount":{"type":["string","null"]},"duration":{"type":["string","null"]},"type":{"type":["string","null"]},"speed_reduction":{"type":["string","null"],"description":"Reduced speed after the plan's high-speed allowance, when supplied. Null does not guarantee unlimited high-speed data."},"price_basis":{"type":"string","enum":["per_day","total"],"description":"Whether the advertised EUR amount covers one day or the complete fixed-duration package."}}}}}},"PublicApiError":{"type":"object","required":["error","message","hint","docs"],"properties":{"error":{"type":"string","enum":["INVALID_PARAMETERS","NOT_FOUND","CATALOG_UNAVAILABLE","RATE_LIMITED"]},"message":{"type":"string","description":"Human-readable explanation without internal service details."},"hint":{"type":"string","description":"How the caller can resolve the error."},"docs":{"type":"string","const":"/docs"}}}},"headers":{"PublicApiVersion":{"description":"Major API version served by this response.","schema":{"type":"string","const":"1"}},"PublicRateLimitPolicy":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured quota policy; requests per 60-second fixed window, per verified client IP and Node instance.","schema":{"type":"string","example":"\"catalog\";q=600;w=60"}},"PublicRateLimit":{"description":"Structured service limit: remaining requests (r) and seconds until this window ends (t).","schema":{"type":"string","example":"\"catalog\";r=599;t=42"}},"PublicRateLimitLimit":{"description":"Compatibility header: request allowance per fixed window.","schema":{"type":"integer","const":600}},"PublicRateLimitRemaining":{"description":"Compatibility header: allowance remaining after this request.","schema":{"type":"integer","minimum":0,"maximum":599}},"PublicRateLimitReset":{"description":"Compatibility header: Unix seconds at the end of the current fixed window.","schema":{"type":"integer","minimum":0}},"PublicRetryAfter":{"description":"Delay in seconds before retrying an exhausted quota (RFC 9110).","schema":{"type":"integer","minimum":1,"maximum":60}}},"securitySchemes":{"siruOAuth":{"type":"oauth2","description":"Sīrū-owned portable OAuth server. Authorization Code with PKCE S256 and explicit customer consent. orders:purchase prepares customer-confirmed checkout. Automatic saved-card payments additionally require payments:charge, DPoP and a separate customer mandate.","flows":{"authorizationCode":{"authorizationUrl":"https://www.siru.world/oauth/auth","tokenUrl":"https://www.siru.world/oauth/token","refreshUrl":"https://www.siru.world/oauth/token","scopes":{"payments:charge":"Execute an eSIM purchase using a separately approved customer payment mandate and an application with automatic payments enabled. Requires DPoP. No fixed Sīrū monetary cap; fraud checks and bank authentication apply.","orders:read":"Read the consenting customer’s order summaries, excluding installation and payment secrets.","orders:purchase":"Prepare an eSIM purchase for the consenting customer to review and pay. No fixed merchant spending cap."}}}}}}}