{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"temporarysmsnumber.com API","version":"2026-08-27","summary":"Catalog discovery, configuration status and controlled account top-ups.","description":"Read endpoints expose either provider-backed records or reference catalog records. A response is live only when both data.live and meta.live are true and meta.source is provider. All number-order commands are currently disabled and return HTTP 501. Creating a payment invoice is conditional on bearer authentication, explicit OxaPay enablement and a persistent ledger; it does not allocate a number."},"servers":[{"url":"https://temporarysmsnumber.com/api","description":"Canonical production API base URL"}],"externalDocs":{"description":"Human-readable API documentation","url":"https://temporarysmsnumber.com/en/api"},"tags":[{"name":"Catalog","description":"Countries, services and offers, with explicit provider-confirmation metadata."},{"name":"System","description":"Non-sensitive configuration readiness. Connectivity is not probed by the status endpoint."},{"name":"Orders","description":"Reserved order routes. Every operation in this tag currently returns HTTP 501."},{"name":"Payments","description":"Authenticated account top-up invoice creation. This does not purchase or allocate a number."},{"name":"Webhooks","description":"Signed provider callbacks persisted through the configured ledger."},{"name":"Specification","description":"Machine-readable API description."}],"paths":{"/v1/countries":{"get":{"tags":["Catalog"],"operationId":"listCountries","summary":"List ISO markets","description":"Returns all referenced ISO markets. Without a configured number provider, records remain unconfirmed and live is false.","responses":{"200":{"description":"Country records with source and liveness metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryListEnvelope"},"example":{"data":[{"code":"FR","name":"France","calling_code":"+33","stock":56115,"availability":"catalog","live":false}],"meta":{"request_id":"00000000-0000-4000-8000-000000000001","source":"catalog","live":false,"provider_confirmed":false,"provider_configured":false,"provider_valid":true,"count":249,"available_markets":234}}}}},"502":{"description":"A configured number provider is unavailable or returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_unavailable","message":"The number provider is unreachable."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"503":{"description":"The number-provider configuration is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_configuration_invalid","message":"The number provider configuration is invalid."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001","live":false,"provider_valid":false}}}}},"504":{"description":"The configured number provider timed out.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_timeout","message":"The number provider timed out."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}}}}},"/v1/services":{"get":{"tags":["Catalog"],"operationId":"listServices","summary":"List supported service identifiers","description":"Returns provider-backed services when configured, otherwise the non-live service catalog. Visual initials and colors are optional metadata and are not provider guarantees.","responses":{"200":{"description":"Service records with source and liveness metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceListEnvelope"},"example":{"data":[{"id":"whatsapp","name":"WhatsApp","category":"messaging","initials":"W","color":"#20a66a","live":false}],"meta":{"request_id":"00000000-0000-4000-8000-000000000001","source":"catalog","live":false,"provider_configured":false,"provider_valid":true,"count":63}}}}},"502":{"description":"A configured number provider is unavailable or returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_unavailable","message":"The number provider is unreachable."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"503":{"description":"The number-provider configuration is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_configuration_invalid","message":"The number provider configuration is invalid."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001","live":false,"provider_valid":false}}}}},"504":{"description":"The configured number provider timed out.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_timeout","message":"The number provider timed out."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}}}}},"/v1/offers":{"get":{"tags":["Catalog"],"operationId":"listOffers","summary":"Search catalog and provider-confirmed offers","description":"Filters are optional. With no provider configured, at most 300 EUR catalog records are returned and every record has live=false. Availability and the final price require provider confirmation before reservation.","parameters":[{"name":"country","in":"query","required":false,"description":"Two-letter uppercase ISO 3166-1 market code.","schema":{"type":"string","pattern":"^[A-Z]{2}$"},"example":"FR"},{"name":"service","in":"query","required":false,"description":"Normalized service identifier returned by GET /v1/services.","schema":{"$ref":"#/components/schemas/Identifier"},"example":"whatsapp"}],"responses":{"200":{"description":"Matching offers. Inspect data.live, meta.live and meta.source before treating a record as current inventory.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferListEnvelope"},"example":{"data":[{"id":"cat_fr_whatsapp","country":"FR","service":"whatsapp","currency":"EUR","price":0.99,"available":1155,"success_rate_30d":97.2,"median_delivery_seconds":55,"live":false}],"meta":{"request_id":"00000000-0000-4000-8000-000000000001","source":"catalog","live":false,"provider_confirmed":false,"provider_configured":false,"provider_valid":true,"count":1,"available_markets":234,"catalog_offer_count":14742,"limit":300}}}}},"400":{"description":"A country or service filter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"invalid_query","message":"country must be a valid two-letter ISO market code."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001","source":"catalog","live":false}}}}},"502":{"description":"A configured number provider is unavailable or returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_unavailable","message":"The number provider is unreachable."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"503":{"description":"The number-provider configuration is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_configuration_invalid","message":"The number provider configuration is invalid."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001","live":false,"provider_valid":false}}}}},"504":{"description":"The configured number provider timed out.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"provider_timeout","message":"The number provider timed out."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}}}}},"/v1/orders":{"post":{"tags":["Orders"],"operationId":"createOrderNotEnabled","summary":"Order creation is not enabled","description":"This route does not process a request body and always returns HTTP 501. A future ordering workflow requires authentication, risk controls, idempotency and a persistent ledger, but those requirements are not active API behavior.","deprecated":true,"x-availability":"disabled","responses":{"501":{"description":"Ordering is deliberately unavailable. The server always returns HTTP 501 for this command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"ordering_not_enabled","message":"Provider ordering is not enabled until authentication, risk controls and a persistent order ledger are integrated."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}}}}},"/v1/orders/{id}":{"parameters":[{"$ref":"#/components/parameters/OrderId"}],"get":{"tags":["Orders"],"operationId":"getOrderNotEnabled","summary":"Order lookup is not enabled","description":"The identifier is validated as part of routing, but no order is read. The server always returns HTTP 501.","deprecated":true,"x-availability":"disabled","responses":{"501":{"description":"Ordering is deliberately unavailable. The server always returns HTTP 501 for this command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"ordering_not_enabled","message":"Provider ordering is not enabled until authentication, risk controls and a persistent order ledger are integrated."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}}}},"delete":{"tags":["Orders"],"operationId":"cancelOrderNotEnabled","summary":"Order cancellation is not enabled","description":"No cancellation is attempted and no funds are released. The server always returns HTTP 501.","deprecated":true,"x-availability":"disabled","responses":{"501":{"description":"Ordering is deliberately unavailable. The server always returns HTTP 501 for this command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"ordering_not_enabled","message":"Provider ordering is not enabled until authentication, risk controls and a persistent order ledger are integrated."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}}}}},"/v1/status":{"get":{"tags":["System"],"operationId":"getIntegrationStatus","summary":"Read non-sensitive integration readiness","description":"Reports configuration state only. The endpoint does not test provider, identity, ledger or payment connectivity, and ordering.enabled is always false in this API version.","responses":{"200":{"description":"Configuration-only readiness state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusEnvelope"},"example":{"data":{"provider":{"configured":false,"valid":true,"connectivity":"not_checked"},"payment":{"configured":false,"mode":null,"prerequisites_configured":false,"connectivity":"not_checked"},"authentication":{"configured":false,"valid":true,"connectivity":"not_checked"},"ledger":{"configured":false,"valid":true,"connectivity":"not_checked"},"ordering":{"enabled":false}},"meta":{"request_id":"00000000-0000-4000-8000-000000000001","configuration_only":true}}}}}}}},"/v1/openapi.json":{"get":{"tags":["Specification"],"operationId":"getOpenApiDocument","summary":"Read this OpenAPI document","description":"Returns the complete OpenAPI 3.1 document as JSON.","responses":{"200":{"description":"Machine-readable API contract.","content":{"application/json":{"schema":{"type":"object","required":["openapi","info","servers","paths","components"],"properties":{"openapi":{"type":"string","const":"3.1.0"},"info":{"type":"object"},"servers":{"type":"array","items":{"type":"object"}},"paths":{"type":"object"},"components":{"type":"object"}}}}}}}}},"/topups/oxapay":{"post":{"tags":["Payments"],"operationId":"createOxaPayTopUp","summary":"Create an authenticated account top-up invoice","description":"Creates an OxaPay live payment invoice only after number fulfillment, bearer identity validation and a persistent ledger reservation are operational. A successful invoice does not itself allocate a phone number.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"description":"Top-up amount in USD. At most two decimal places are accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUpRequest"},"example":{"amount":25}}}},"responses":{"201":{"description":"Invoice created and attached to a persistent top-up reservation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUpEnvelope"},"example":{"data":{"payment_url":"https://pay.oxapay.com/example","track_id":"example-track-id","expires_at":null},"meta":{"request_id":"00000000-0000-4000-8000-000000000001","mode":"live"}}}}},"400":{"description":"The body is not valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"invalid_json","message":"The request body must be valid JSON."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"401":{"description":"The bearer identity is missing, inactive or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"authentication_required","message":"A valid authenticated session is required."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"413":{"description":"The request body exceeds the one-megabyte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"body_too_large","message":"Request body too large."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"422":{"description":"The amount is outside the accepted range or has invalid precision.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"minimum_topup","message":"The minimum top-up is $25 USD."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"429":{"description":"More than five checkout attempts were made from the same address within one minute.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"rate_limited","message":"Too many checkout attempts. Try again in one minute."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"502":{"description":"OxaPay or a required internal integration is unavailable or returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"oxapay_unavailable","message":"OxaPay is unreachable."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"503":{"description":"OxaPay, authentication or the persistent ledger is not ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"ledger_not_configured","message":"A persistent ledger must be configured before accepting a top-up."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"504":{"description":"OxaPay or a required internal integration timed out.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"oxapay_timeout","message":"OxaPay timed out."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}}}}},"/webhooks/oxapay":{"post":{"tags":["Webhooks"],"operationId":"receiveOxaPayWebhook","summary":"Receive a signed OxaPay invoice event","description":"The raw JSON body must carry a valid HMAC-SHA512 signature in the HMAC header. The event must match an existing persistent reservation before it is recorded or settled idempotently.","security":[{"oxapayHmac":[]}],"requestBody":{"required":true,"description":"OxaPay invoice event. Additional provider fields are accepted but ignored by this contract.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OxaPayWebhook"},"example":{"type":"invoice","track_id":"example-track-id","status":"paid","order_id":"top_00000000-0000-4000-8000-000000000001","amount":25,"currency":"USD"}}}},"responses":{"200":{"description":"The matching event was persisted. Paid events were submitted for idempotent settlement.","content":{"text/plain":{"schema":{"type":"string","const":"ok"},"example":"ok"}}},"400":{"description":"The JSON or invoice event fields are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"invalid_webhook","message":"Invalid invoice webhook."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"401":{"description":"The HMAC signature is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"invalid_signature","message":"Invalid webhook signature."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"409":{"description":"The callback does not match the stored reservation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"invoice_mismatch","message":"The webhook does not match a persistent top-up reservation."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"413":{"description":"The request body exceeds the one-megabyte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"body_too_large","message":"Request body too large."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"502":{"description":"The persistent ledger is unavailable or returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"integration_unavailable","message":"Ledger service is unreachable."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"503":{"description":"The persistent ledger integration is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"ledger_not_configured","message":"Persistent ledger integration is not configured."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}},"504":{"description":"The persistent ledger timed out.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"data":null,"error":{"type":"integration_timeout","message":"Ledger service timed out."},"meta":{"request_id":"00000000-0000-4000-8000-000000000001"}}}}}}}}},"components":{"parameters":{"OrderId":{"name":"id","in":"path","required":true,"description":"Opaque order identifier. The route is reserved but ordering remains disabled.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$"},"example":"ord_example_001"}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Authenticated session token. Keep bearer credentials server-side."},"oxapayHmac":{"type":"apiKey","in":"header","name":"HMAC","description":"Lowercase or uppercase 128-character hexadecimal HMAC-SHA512 signature of the raw request body."}},"schemas":{"Identifier":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","readOnly":true,"description":"Unique identifier generated for this API response.","example":"00000000-0000-4000-8000-000000000001"},"source":{"type":"string","enum":["catalog","provider"],"description":"catalog means reference records; provider means records returned by the configured number provider."},"live":{"type":"boolean","description":"True only when the response data came from the configured provider."},"provider_confirmed":{"type":"boolean","description":"True when the connected provider confirmed the records as current inventory."},"provider_configured":{"type":"boolean"},"provider_valid":{"type":"boolean"},"count":{"type":"integer","minimum":0},"available_markets":{"type":"integer","minimum":0},"provider_records":{"type":"integer","minimum":0},"catalog_offer_count":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":300},"configuration_only":{"type":"boolean"},"mode":{"enum":["live",null]}},"additionalProperties":true},"Error":{"type":"object","required":["type","message"],"properties":{"type":{"type":"string","minLength":1,"description":"Stable machine-readable error category."},"message":{"type":"string","minLength":1,"description":"Human-readable explanation. Clients should branch on type, not this text."}},"additionalProperties":false},"Envelope":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/components/schemas/Meta"}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["data","error","meta"],"properties":{"data":{"type":"null"},"error":{"$ref":"#/components/schemas/Error"},"meta":{"$ref":"#/components/schemas/Meta"}},"additionalProperties":false},"Country":{"type":"object","required":["code","name","calling_code","stock","availability","live"],"properties":{"code":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 market code."},"name":{"type":"string","minLength":1,"maxLength":100},"calling_code":{"type":"string","maxLength":16,"description":"International calling code when assigned; an empty string means none is listed."},"stock":{"type":["integer","null"],"minimum":0,"maximum":10000000,"description":"Catalog total, provider stock, or null when a configured provider has no record."},"availability":{"type":"string","enum":["catalog","restricted","unavailable"],"description":"Static market classification. It does not by itself prove live availability."},"live":{"type":"boolean","description":"True only when a configured provider returned a record for this market."}},"additionalProperties":false},"Service":{"type":"object","required":["id","name","category","live"],"properties":{"id":{"$ref":"#/components/schemas/Identifier"},"name":{"type":"string","minLength":1,"maxLength":100},"category":{"$ref":"#/components/schemas/Identifier"},"initials":{"type":"string","minLength":1,"maxLength":3,"description":"Optional catalog display initials; provider responses may omit them."},"color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"Optional catalog display color; provider responses may omit it."},"live":{"type":"boolean","description":"True only for a normalized record returned by the configured provider."}},"additionalProperties":false},"Offer":{"type":"object","required":["id","country","service","currency","price","available","success_rate_30d","median_delivery_seconds","live"],"properties":{"id":{"$ref":"#/components/schemas/Identifier"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"service":{"$ref":"#/components/schemas/Identifier"},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"price":{"type":"number","minimum":0,"maximum":1000000,"description":"Requires provider confirmation when live is false. This value alone is not a purchasable quote."},"available":{"type":"integer","minimum":0,"maximum":10000000,"description":"Requires provider confirmation when live is false."},"success_rate_30d":{"type":["number","null"],"minimum":0,"maximum":100,"description":"Provider metric or deterministic catalog estimate."},"median_delivery_seconds":{"type":["integer","null"],"minimum":0,"maximum":86400,"description":"Provider metric or deterministic catalog estimate."},"live":{"type":"boolean","description":"False for every fallback catalog record."}},"additionalProperties":false},"IntegrationState":{"type":"object","required":["configured","valid","connectivity"],"properties":{"configured":{"type":"boolean"},"valid":{"type":"boolean"},"connectivity":{"type":"string","const":"not_checked","description":"The status endpoint does not perform a network probe."}},"additionalProperties":false},"PaymentState":{"type":"object","required":["configured","mode","prerequisites_configured","connectivity"],"properties":{"configured":{"type":"boolean"},"mode":{"enum":["live",null]},"prerequisites_configured":{"type":"boolean","description":"True only when OxaPay, number fulfillment, authentication and ledger configuration are all complete."},"connectivity":{"type":"string","const":"not_checked"}},"additionalProperties":false},"Status":{"type":"object","required":["provider","payment","authentication","ledger","ordering"],"properties":{"provider":{"$ref":"#/components/schemas/IntegrationState"},"payment":{"$ref":"#/components/schemas/PaymentState"},"authentication":{"$ref":"#/components/schemas/IntegrationState"},"ledger":{"$ref":"#/components/schemas/IntegrationState"},"ordering":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean","const":false,"description":"Ordering is not enabled in this API version."}},"additionalProperties":false}},"additionalProperties":false},"TopUpRequest":{"type":"object","required":["amount"],"properties":{"amount":{"type":"number","minimum":25,"maximum":10000,"multipleOf":0.01,"description":"USD account top-up amount."}},"additionalProperties":false},"TopUpInvoice":{"type":"object","required":["payment_url","track_id","expires_at"],"properties":{"payment_url":{"type":"string","format":"uri","pattern":"^https://","description":"HTTPS payment URL returned by OxaPay."},"track_id":{"type":"string","minLength":1,"maxLength":128},"expires_at":{"oneOf":[{"type":"string","minLength":1},{"type":"integer"},{"type":"null"}],"description":"Provider-supplied expiry representation, or null when omitted."}},"additionalProperties":false},"OxaPayWebhook":{"type":"object","required":["type","status","order_id","amount","currency"],"properties":{"type":{"type":"string","const":"invoice"},"track_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$"},"trackId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$"},"status":{"type":"string","minLength":1,"maxLength":64},"order_id":{"type":"string","pattern":"^top_[A-Za-z0-9-]{8,80}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"anyOf":[{"required":["track_id"]},{"required":["trackId"]}],"additionalProperties":true},"CountryListEnvelope":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Country"}}}}]},"ServiceListEnvelope":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Service"}}}}]},"OfferListEnvelope":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"properties":{"data":{"type":"array","maxItems":300,"items":{"$ref":"#/components/schemas/Offer"}}}}]},"StatusEnvelope":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"properties":{"data":{"$ref":"#/components/schemas/Status"}}}]},"TopUpEnvelope":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"properties":{"data":{"$ref":"#/components/schemas/TopUpInvoice"}}}]}}}}