{"openapi":"3.1.0","info":{"title":"VerifyWith API","version":"1.0.0","description":"Private, receive-only US phone numbers for verification texts. Everything the website does, your code or agent can do with an API key.\n\nAuthenticate with `Authorization: Bearer sk_...` (create keys on the Developers page). Key levels are cumulative: `read`; `manage` (rename, auto-renew, cancel, webhooks); `buy` (get and extend numbers, within the key's spending limits). Every buying call needs an `Idempotency-Key` header. Lists are paged with `limit` and `cursor` (pass `nextCursor`). Every error is `{ \"error\": code, \"message\": sentence, \"requestId\": id, \"url\"?: link }`; `url` is where the person must act in a browser. Money is integer cents in USD; dates are ISO 8601 in UTC; ids are ours (24 hex characters).","contact":{"email":"support@verifywith.io"}},"servers":[{"url":"https://api.verifywith.io"}],"tags":[{"name":"Numbers"},{"name":"Messages"},{"name":"Account"},{"name":"Payments"},{"name":"Cards"},{"name":"API keys"},{"name":"Webhooks"},{"name":"Connected apps"},{"name":"Live"}],"paths":{"/v1/prices":{"get":{"operationId":"listPrices","summary":"List durations and prices","description":"The four durations on sale and what each costs now. No sign-in needed.","tags":["Numbers"],"security":[{},{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Prices in force now, shortest first","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Price"}}},"required":["object","data"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers":{"post":{"operationId":"getNumber","summary":"Get a number","description":"Buys a private US number for the chosen duration. With an API key, the saved card is charged (held until the first text) within the key's spending limits. 201: paid and ordered; the number is `active`, or `provisioning` for a few seconds. 202 with `order.nextAction`: the bank wants the card holder to confirm; hand them the link, then repeat this request with the same Idempotency-Key. 202 with `checkout` (website only): mount the embedded payment form, then call confirm. Repeating a request with the same Idempotency-Key never buys twice.","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"buy","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (8 to 255 printable characters) you choose per purchase. Repeating a request with the same key returns the same purchase instead of buying again, for 24 hours. Reusing a key for a different request answers `idempotency_key_reused`.","schema":{"type":"string","minLength":8,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"duration":{"type":"string","enum":["day","week","month","year"]},"autoRenew":{"default":false,"type":"boolean"},"nickname":{"type":"string","minLength":1,"maxLength":100},"cardConsentText":{"type":"string","minLength":10,"maxLength":2000}},"required":["duration"],"additionalProperties":false}}}},"responses":{"201":{"description":"Paid and ordered","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"},"number":{"$ref":"#/components/schemas/Number"},"checkout":{"anyOf":[{"type":"object","properties":{"clientSecret":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["clientSecret","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["order","number","checkout"],"additionalProperties":false}}}},"202":{"description":"The person must act first (see `checkout` and `order.nextAction`)","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"},"number":{"$ref":"#/components/schemas/Number"},"checkout":{"anyOf":[{"type":"object","properties":{"clientSecret":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["clientSecret","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["order","number","checkout"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error: `card_required`, `payment_declined`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `account_suspended`, `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `idempotency_key_reused`, `idempotency_in_progress`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error: `spending_limit_exceeded`, `auto_renew_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error: `supplier_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: `sales_paused`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"listNumbers","summary":"List numbers","description":"Newest first. Numbers whose payment never went through are left out.","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":512}},{"name":"live","in":"query","required":false,"schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"A page of numbers","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Number"}},"nextCursor":{"type":["string","null"]}},"required":["object","data","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/orders/{orderId}/choice":{"put":{"operationId":"changeOrderChoice","summary":"Change what an unpaid website order is for","description":"Website only. While the payment form is open, the person changed the duration or auto-renew: the same order and the same payment form follow (the form's amount is replaced in place), so nothing is left behind. Once paid, this changes nothing and answers where the order stands.","tags":["Numbers"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"orderId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"duration":{"type":"string","enum":["day","week","month","year"]},"autoRenew":{"default":false,"type":"boolean"}},"required":["duration"],"additionalProperties":false}}}},"responses":{"201":{"description":"Already paid and ordered","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"},"number":{"$ref":"#/components/schemas/Number"},"checkout":{"anyOf":[{"type":"object","properties":{"clientSecret":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["clientSecret","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["order","number","checkout"],"additionalProperties":false}}}},"202":{"description":"Changed; the payment form to keep showing","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"},"number":{"$ref":"#/components/schemas/Number"},"checkout":{"anyOf":[{"type":"object","properties":{"clientSecret":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["clientSecret","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["order","number","checkout"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error: `payment_declined`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error: `auto_renew_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error: `supplier_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/orders/{orderId}/pay":{"post":{"operationId":"agreeToPay","summary":"Agree to pay for a website order","description":"Website only, when Pay is pressed and before the payment form is confirmed: records the card-saving wording shown beside the button with the time and the choice being paid for, and makes sure the form charges exactly that order's amount. 202 with `checkout`: confirm the form now.","tags":["Numbers"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"orderId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"duration":{"type":"string","enum":["day","week","month","year"]},"autoRenew":{"default":false,"type":"boolean"},"cardConsentText":{"type":"string","minLength":10,"maxLength":2000}},"required":["duration","cardConsentText"],"additionalProperties":false}}}},"responses":{"201":{"description":"Already paid and ordered","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"},"number":{"$ref":"#/components/schemas/Number"},"checkout":{"anyOf":[{"type":"object","properties":{"clientSecret":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["clientSecret","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["order","number","checkout"],"additionalProperties":false}}}},"202":{"description":"Agreed; confirm the payment form","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"},"number":{"$ref":"#/components/schemas/Number"},"checkout":{"anyOf":[{"type":"object","properties":{"clientSecret":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["clientSecret","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["order","number","checkout"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error: `payment_declined`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `account_suspended`, `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error: `supplier_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: `sales_paused`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/orders/{orderId}/confirm":{"post":{"operationId":"confirmOrder","summary":"Continue a purchase after the payment step","description":"After the embedded payment form finished in the browser, or after the person confirmed with their bank, this moves the order on and answers where it stands, like getting the number did. Safe to call more than once.","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"buy","parameters":[{"name":"orderId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"201":{"description":"Paid and ordered","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"},"number":{"$ref":"#/components/schemas/Number"},"checkout":{"anyOf":[{"type":"object","properties":{"clientSecret":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["clientSecret","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["order","number","checkout"],"additionalProperties":false}}}},"202":{"description":"Still waiting for the person","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"},"number":{"$ref":"#/components/schemas/Number"},"checkout":{"anyOf":[{"type":"object","properties":{"clientSecret":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["clientSecret","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["order","number","checkout"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error: `payment_declined`, `card_required`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error: `supplier_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}":{"get":{"operationId":"getNumberDetails","summary":"Get a number","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"The number","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Number"}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"renameNumber","summary":"Rename a number","description":"Set a nickname, or null to remove it.","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"manage","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nickname":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["nickname"],"additionalProperties":false}}}},"responses":{"200":{"description":"The number","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Number"}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}/auto-renew":{"put":{"operationId":"setAutoRenew","summary":"Turn auto-renew on or off","description":"Renewals repeat the duration bought at the price it was bought at. Choosing a different `duration` resets that locked price to today's price for it. Renewals never count against an API key's spending limits.","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"manage","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"autoRenew":{"type":"boolean"},"duration":{"type":"string","enum":["day","week","month","year"]}},"required":["autoRenew"],"additionalProperties":false}}}},"responses":{"200":{"description":"The number","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Number"}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error: `card_required`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `number_not_active`, `number_busy`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"422":{"description":"Error: `auto_renew_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}/extend":{"post":{"operationId":"extendNumber","summary":"Extend a number","description":"Adds the duration to the number's end date and charges the saved card at once (within the key's spending limits). 202 `requires_action`: hand the person `nextAction.url`, then repeat with the same Idempotency-Key.","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"buy","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (8 to 255 printable characters) you choose per purchase. Repeating a request with the same key returns the same purchase instead of buying again, for 24 hours. Reusing a key for a different request answers `idempotency_key_reused`.","schema":{"type":"string","minLength":8,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"duration":{"type":"string","enum":["day","week","month","year"]}},"required":["duration"],"additionalProperties":false}}}},"responses":{"200":{"description":"Extended","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"extension"},"status":{"type":"string","enum":["extended","pending","requires_action"]},"number":{"$ref":"#/components/schemas/Number"},"payment":{"$ref":"#/components/schemas/Payment"},"nextAction":{"anyOf":[{"$ref":"#/components/schemas/NextAction"},{"type":"null"}]},"clientSecret":{"type":["string","null"]},"message":{"type":["string","null"]}},"required":["object","status","number","payment","nextAction","clientSecret","message"],"additionalProperties":false}}}},"202":{"description":"Paid and being applied, or the person must confirm","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"extension"},"status":{"type":"string","enum":["extended","pending","requires_action"]},"number":{"$ref":"#/components/schemas/Number"},"payment":{"$ref":"#/components/schemas/Payment"},"nextAction":{"anyOf":[{"$ref":"#/components/schemas/NextAction"},{"type":"null"}]},"clientSecret":{"type":["string","null"]},"message":{"type":["string","null"]}},"required":["object","status","number","payment","nextAction","clientSecret","message"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error: `card_required`, `payment_declined`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `number_not_active`, `number_busy`, `idempotency_key_reused`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"422":{"description":"Error: `spending_limit_exceeded`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error: `supplier_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}/messages/check":{"post":{"operationId":"checkForTexts","summary":"Check for new texts now","description":"Asks the carrier for this number's texts now and stores any that were missed. Texts normally arrive by themselves within seconds; this is for a person (or an agent) who would rather not wait. One number is asked at most once every 15 seconds: a call in between answers at once with `asked: false`. Each account gets 12 checks a minute; beyond that, `rate_limited` with a Retry-After.","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"What the check found","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"inbox_check"},"asked":{"type":"boolean"},"found":{"type":"integer","minimum":0,"maximum":9007199254740991},"nextCheckAt":{"type":"string"}},"required":["object","asked","found","nextCheckAt"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `number_not_active`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}/renewal/retry":{"post":{"operationId":"retryRenewal","summary":"Try a declined renewal payment again","description":"After a renewal was declined (the number's `state` is `renewal_payment_failed`), charges the saved cards again for the same renewal, now, on the same payment, so it is never paid twice. Use it after the card holder fixed or added a card. 202 `requires_action`: the bank wants the card holder to confirm at `nextAction.url`. Renewals never count against an API key's spending limits.","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"buy","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"Renewed","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"renewal_retry"},"status":{"type":"string","enum":["renewed","pending","requires_action"]},"number":{"$ref":"#/components/schemas/Number"},"paymentId":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{24}$"},{"type":"null"}]},"nextAction":{"anyOf":[{"$ref":"#/components/schemas/NextAction"},{"type":"null"}]},"message":{"type":["string","null"]}},"required":["object","status","number","paymentId","nextAction","message"],"additionalProperties":false}}}},"202":{"description":"Paid and being applied, or the card holder must confirm","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"renewal_retry"},"status":{"type":"string","enum":["renewed","pending","requires_action"]},"number":{"$ref":"#/components/schemas/Number"},"paymentId":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{24}$"},{"type":"null"}]},"nextAction":{"anyOf":[{"$ref":"#/components/schemas/NextAction"},{"type":"null"}]},"message":{"type":["string","null"]}},"required":["object","status","number","paymentId","nextAction","message"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error: `card_required`, `payment_declined`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `conflict`, `number_not_active`, `number_busy`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error: `supplier_unavailable`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}/cancel":{"post":{"operationId":"cancelNumber","summary":"Cancel a number (with a refund when eligible)","description":"Offered on numbers with no texts, in their first 24 hours, from `cancellableFrom`. We ask our provider first: when it accepts, everything paid for the number goes back (a hold is released, so it never shows as a charge). When it refuses, the number stays active and paid (`not_cancellable`).","tags":["Numbers"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"manage","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","maxLength":500}},"additionalProperties":false}}}},"responses":{"200":{"description":"Cancelled","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"cancellation"},"status":{"type":"string","enum":["cancelled","in_progress"]},"number":{"$ref":"#/components/schemas/Number"},"refund":{"anyOf":[{"oneOf":[{"type":"object","properties":{"status":{"type":"string","const":"returned"},"amount":{"type":"integer","minimum":0,"maximum":100000000},"released":{"type":"boolean"}},"required":["status","amount","released"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"pending"}},"required":["status"],"additionalProperties":false}]},{"type":"null"}]},"message":{"type":["string","null"]}},"required":["object","status","number","refund","message"],"additionalProperties":false}}}},"202":{"description":"Our provider has not answered yet; we keep asking","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"cancellation"},"status":{"type":"string","enum":["cancelled","in_progress"]},"number":{"$ref":"#/components/schemas/Number"},"refund":{"anyOf":[{"oneOf":[{"type":"object","properties":{"status":{"type":"string","const":"returned"},"amount":{"type":"integer","minimum":0,"maximum":100000000},"released":{"type":"boolean"}},"required":["status","amount","released"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"pending"}},"required":["status"],"additionalProperties":false}]},{"type":"null"}]},"message":{"type":["string","null"]}},"required":["object","status","number","refund","message"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `not_cancellable`, `cancel_too_soon`, `cancel_window_closed`, `number_not_active`, `number_busy`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}/messages":{"get":{"operationId":"listMessages","summary":"List the texts a number received","description":"Newest first, with the full text and the code found in it.","tags":["Messages"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":512}}],"responses":{"200":{"description":"A page of messages","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Message"}},"nextCursor":{"type":["string","null"]}},"required":["object","data","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}/messages/next":{"get":{"operationId":"waitForCode","summary":"Wait for the next text and its code","description":"Holds the request open until a text arrives (then answers at once with it and its code) or until `timeoutSeconds` (at most 90) pass, then answers `timeout`. Pass the last message id you saw as `afterMessageId` so a text that arrived between two calls is never missed.","tags":["Messages"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}},{"name":"timeoutSeconds","in":"query","required":false,"schema":{"default":60,"type":"integer","minimum":1,"maximum":90}},{"name":"afterMessageId","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"A text arrived, or the wait timed out","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"code_wait"},"status":{"type":"string","enum":["received","timeout"]},"message":{"anyOf":[{"$ref":"#/components/schemas/Message"},{"type":"null"}]},"code":{"type":["string","null"]}},"required":["object","status","message","code"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `number_not_active`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/numbers/{numberId}/watch":{"post":{"operationId":"watchNumber","summary":"Say someone is looking at this number","description":"Call about every 30 seconds while a screen shows the number and waits for a text, when not using the live stream's `watch`. It makes us check with our provider if a text seems late.","tags":["Messages"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"numberId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"204":{"description":"Noted"},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me":{"get":{"operationId":"getMe","summary":"Who is calling","description":"The account, and either the website session or the API key in use.","tags":["Account"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"The caller","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"me"},"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"name":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","email","emailVerified","name","createdAt"],"additionalProperties":false},"session":{"anyOf":[{"type":"object","properties":{"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["expiresAt"],"additionalProperties":false},{"type":"null"}]},"apiKey":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["read","manage","buy"]}}},"required":["id","name","scopes"],"additionalProperties":false},{"type":"null"}]}},"required":["object","user","session","apiKey"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteAccount","summary":"Delete the account","description":"Cancels what can be cancelled (with refunds when our provider accepts), stops every renewal, revokes every API key, removes texts, cards and sign-in methods, and signs out. Payment records are kept as the law requires. Time left on numbers is not refunded.","tags":["Account"],"security":[{"cookieAuth":[]}],"x-session-only":true,"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"account_deletion"},"cancelled":{"type":"array","items":{"type":"string","pattern":"^[a-f0-9]{24}$"}},"keptUntilEnd":{"type":"array","items":{"type":"object","properties":{"numberId":{"type":"string","pattern":"^[a-f0-9]{24}$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["numberId","endsAt"],"additionalProperties":false}}},"required":["object","cancelled","keptUntilEnd"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/passkeys":{"get":{"operationId":"listPasskeys","summary":"List passkeys","description":"Adding a passkey is the browser ceremony under /auth/passkey (Better Auth's passkey plugin).","tags":["Account"],"security":[{"cookieAuth":[]}],"x-session-only":true,"responses":{"200":{"description":"Passkeys","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"type":"object","properties":{"object":{"type":"string","const":"passkey"},"id":{"type":"string"},"name":{"type":"string"},"deviceType":{"type":["string","null"]},"backedUp":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["object","id","name","deviceType","backedUp","createdAt"],"additionalProperties":false}}},"required":["object","data"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/passkeys/{passkeyId}":{"delete":{"operationId":"removePasskey","summary":"Remove a passkey","tags":["Account"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"passkeyId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64}}],"responses":{"204":{"description":"Removed"},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payments":{"get":{"operationId":"listPayments","summary":"Payment history","description":"Every charge against its number, newest first. Refunds are on the same payment (`refundedAmount`).","tags":["Payments"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":512}},{"name":"numberId","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"A page of payments","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Payment"}},"nextCursor":{"type":["string","null"]}},"required":["object","data","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payments/{paymentId}/confirmation":{"get":{"operationId":"getPaymentConfirmation","summary":"What the bank-confirmation page needs","description":"Behind the link an agent hands its person (`order.nextAction.url`). While the payment needs confirming, `clientSecret` lets the page confirm it with the payment processor's script; afterwards repeat the original request (or confirm the order).","tags":["Payments"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"paymentId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"The payment's confirmation state","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"payment_confirmation"},"paymentId":{"type":"string","pattern":"^[a-f0-9]{24}$"},"status":{"type":"string","enum":["needs_confirmation","already_paid","cancelled","processing"]},"amount":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000000},{"type":"null"}]},"currency":{"type":"string","const":"usd"},"purpose":{"anyOf":[{"type":"string","enum":["purchase","renewal","extension"]},{"type":"null"}]},"numberId":{"type":"string","pattern":"^[a-f0-9]{24}$"},"clientSecret":{"type":["string","null"]}},"required":["object","paymentId","status","amount","currency","purpose","numberId","clientSecret"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"checkPaymentConfirmation","summary":"Say the bank confirmation is done","description":"Call after the payment processor's script finished the bank's check on the confirmation page. We read the payment from the processor (the browser's word is not taken) and move the purchase, extension or renewal on at once, then answer like the GET.","tags":["Payments"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"paymentId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"The payment's confirmation state, after checking","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"payment_confirmation"},"paymentId":{"type":"string","pattern":"^[a-f0-9]{24}$"},"status":{"type":"string","enum":["needs_confirmation","already_paid","cancelled","processing"]},"amount":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000000},{"type":"null"}]},"currency":{"type":"string","const":"usd"},"purpose":{"anyOf":[{"type":"string","enum":["purchase","renewal","extension"]},{"type":"null"}]},"numberId":{"type":"string","pattern":"^[a-f0-9]{24}$"},"clientSecret":{"type":["string","null"]}},"required":["object","paymentId","status","amount","currency","purpose","numberId","clientSecret"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cards":{"get":{"operationId":"listCards","summary":"Saved cards","description":"In charging order: the default first, then backups in the order they are tried. `fresh=true` re-reads them from the payment processor.","tags":["Cards"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"fresh","in":"query","required":false,"schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Cards","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Card"}}},"required":["object","data"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/card-setups":{"post":{"operationId":"startCardSetup","summary":"Start adding a card","description":"Returns the client secret for the embedded card form. Send the exact card-saving wording shown next to the form as `consentText`; it is recorded with the time. When the form finishes, complete the setup.","tags":["Cards"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (8 to 255 printable characters) you choose per purchase. Repeating a request with the same key returns the same purchase instead of buying again, for 24 hours. Reusing a key for a different request answers `idempotency_key_reused`.","schema":{"type":"string","minLength":8,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"consentText":{"type":"string","minLength":10,"maxLength":2000}},"required":["consentText"],"additionalProperties":false}}}},"responses":{"201":{"description":"Mount the form with `clientSecret`","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"card_setup"},"id":{"type":"string"},"clientSecret":{"type":"string"}},"required":["object","id","clientSecret"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `account_suspended`, `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/card-setups/{setupId}/complete":{"post":{"operationId":"completeCardSetup","summary":"Finish adding a card","tags":["Cards"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"setupId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64}}],"responses":{"200":{"description":"The card was saved","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"card_setup"},"id":{"type":"string"},"status":{"type":"string","const":"added"},"cards":{"type":"array","items":{"$ref":"#/components/schemas/Card"}}},"required":["object","id","status","cards"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error: `payment_declined`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `conflict`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cards/order":{"put":{"operationId":"setCardOrder","summary":"Set the charging order","description":"Every card id, in the new order. The first becomes the default; the rest are backups, tried in order.","tags":["Cards"],"security":[{"cookieAuth":[]}],"x-session-only":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cardIds":{"minItems":1,"maxItems":15,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}}},"required":["cardIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Cards in the new order","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Card"}}},"required":["object","data"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cards/{cardId}/default":{"post":{"operationId":"setDefaultCard","summary":"Make a card the default","description":"The others keep their order behind it.","tags":["Cards"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"cardId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64}}],"responses":{"200":{"description":"Cards in the new order","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Card"}}},"required":["object","data"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cards/{cardId}":{"delete":{"operationId":"removeCard","summary":"Remove a card","description":"The only saved card can't be removed while a number renews by itself or a payment is not finished (`card_in_use`): add another card first, or turn auto-renew off. `willStopRenewing` is always empty and kept for older clients.","tags":["Cards"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"cardId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64}}],"responses":{"200":{"description":"The cards left","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Card"}},"willStopRenewing":{"type":"array","items":{"type":"string","pattern":"^[a-f0-9]{24}$"}}},"required":["object","data","willStopRenewing"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `card_in_use`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api-keys":{"get":{"operationId":"listApiKeys","summary":"List API keys and connected apps","description":"One list, newest first: keys (`kind: \"key\"`) and apps connected in the browser (`kind: \"connection\"`, with `app`). Both are renamed, limited and revoked with the routes below.","tags":["API keys"],"security":[{"cookieAuth":[]}],"x-session-only":true,"responses":{"200":{"description":"Keys and connections that still work","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}}},"required":["object","data"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createApiKey","summary":"Create an API key","description":"Levels are cumulative: `read`; `manage` (rename, auto-renew, cancel, webhooks); `buy` (get and extend numbers). A key that can buy always has spending limits, $12.99 per number and $40.00 a day unless set. The secret is shown once.","tags":["API keys"],"security":[{"cookieAuth":[]}],"x-session-only":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scopes":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["read","manage","buy"]}},"limits":{"type":"object","properties":{"perNumber":{"anyOf":[{"type":"integer","minimum":50,"maximum":50000},{"type":"null"}]},"perDay":{"anyOf":[{"type":"integer","minimum":50,"maximum":200000},{"type":"null"}]}},"additionalProperties":false}},"required":["name","scopes"],"additionalProperties":false}}}},"responses":{"201":{"description":"The key and its secret (shown once)","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/ApiKey"},"secret":{"type":"string"}},"required":["key","secret"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `account_suspended`, `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `conflict`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api-keys/{apiKeyId}":{"patch":{"operationId":"updateApiKey","summary":"Rename a key or change its limits","tags":["API keys"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"apiKeyId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"limits":{"type":"object","properties":{"perNumber":{"type":"integer","minimum":50,"maximum":50000},"perDay":{"type":"integer","minimum":50,"maximum":200000}},"additionalProperties":false}},"additionalProperties":false}}}},"responses":{"200":{"description":"The key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"revokeApiKey","summary":"Revoke an API key or disconnect an app","description":"At once: the next request with it is refused. A connected app's sign-in is ended too, so it cannot refresh.","tags":["API keys"],"security":[{"cookieAuth":[]}],"x-session-only":true,"parameters":[{"name":"apiKeyId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"204":{"description":"Revoked"},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook-endpoints":{"get":{"operationId":"listWebhookEndpoints","summary":"List webhook endpoints","tags":["Webhooks"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","responses":{"200":{"description":"Endpoints, newest first","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}},"required":["object","data"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createWebhookEndpoint","summary":"Add a webhook endpoint","description":"We POST each subscribed event to the https URL, signed with the Standard Webhooks spec (`webhook-id`, `webhook-timestamp`, `webhook-signature`), retrying for about a day. The signing secret is shown once.","tags":["Webhooks"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"manage","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"format":"uri"},"events":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","enum":["number.active","number.failed","number.renewed","number.renewal_failed","number.expired","number.cancelled","message.received","payment.action_required"]}},"description":{"type":"string","maxLength":200}},"required":["url","events"],"additionalProperties":false}}}},"responses":{"201":{"description":"The endpoint and its signing secret (shown once)","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"webhook_endpoint"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"url":{"type":"string","format":"uri"},"description":{"type":["string","null"]},"events":{"type":"array","items":{"type":"string","enum":["number.active","number.failed","number.renewed","number.renewal_failed","number.expired","number.cancelled","message.received","payment.action_required"]}},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"secret":{"type":"string"}},"required":["object","id","url","description","events","enabled","createdAt","secret"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `conflict`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook-endpoints/{endpointId}":{"get":{"operationId":"getWebhookEndpoint","summary":"Get a webhook endpoint","tags":["Webhooks"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"The endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateWebhookEndpoint","summary":"Change a webhook endpoint","description":"Turning an endpoint back on (`enabled: true`) also clears its failure count.","tags":["Webhooks"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"manage","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"format":"uri"},"events":{"minItems":1,"type":"array","items":{"type":"string","enum":["number.active","number.failed","number.renewed","number.renewal_failed","number.expired","number.cancelled","message.received","payment.action_required"]}},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"enabled":{"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"The endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteWebhookEndpoint","summary":"Delete a webhook endpoint","description":"Deliveries still waiting are dropped.","tags":["Webhooks"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"manage","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"204":{"description":"Deleted"},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook-endpoints/{endpointId}/deliveries":{"get":{"operationId":"listWebhookDeliveries","summary":"Recent deliveries to an endpoint","description":"Newest first, up to `limit` (at most 100). Deliveries are kept 7 days.","tags":["Webhooks"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Deliveries","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}},"required":["object","data"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook-deliveries/{deliveryId}/resend":{"post":{"operationId":"resendWebhookDelivery","summary":"Send an event again","description":"A new attempt within seconds, with the same `webhook-id`, so a receiver that already handled it can tell.","tags":["Webhooks"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"manage","parameters":[{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: `not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `conflict`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connect/request":{"get":{"operationId":"getConnectRequest","summary":"Read an app's request to connect","description":"Used by the website's consent page when an AI app connects through the browser (OAuth). `request` is the query string the sign-in server sent the browser to the page with.","tags":["Connected apps"],"security":[{},{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"request","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":8192}}],"responses":{"200":{"description":"Who is asking, and what for","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"connect_request"},"app":{"type":"object","properties":{"name":{"type":"string"},"clientId":{"type":"string"},"identifiedBy":{"type":"string","enum":["metadata_document","registration"]},"host":{"type":["string","null"]},"verified":{"type":"boolean"},"redirectHost":{"type":"string"}},"required":["name","clientId","identifiedBy","host","verified","redirectHost"],"additionalProperties":false},"maxLevel":{"type":"string","enum":["read","manage","buy"]},"defaultLevel":{"type":"string","enum":["read","manage","buy"]},"defaultLimits":{"type":"object","properties":{"perNumber":{"type":"integer","minimum":0,"maximum":100000000},"perDay":{"type":"integer","minimum":0,"maximum":100000000}},"required":["perNumber","perDay"],"additionalProperties":false},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["object","app","maxLevel","defaultLevel","defaultLimits","expiresAt"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error: `request_expired`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connect/decision":{"post":{"operationId":"decideConnectRequest","summary":"Approve or deny an app's request to connect","description":"Approving creates a connection (listed with API keys, `kind: \"connection\"`) with the chosen level and, for `buy`, spending limits ($12.99 per number and $40.00 a day unless set). Answers with the address to send the browser to: the app's own, with the result.","tags":["Connected apps"],"security":[{"cookieAuth":[]}],"x-session-only":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"request":{"type":"string","minLength":1,"maxLength":8192},"accept":{"type":"boolean"},"level":{"type":"string","enum":["read","manage","buy"]},"limits":{"type":"object","properties":{"perNumber":{"type":"integer","minimum":50,"maximum":50000},"perDay":{"type":"integer","minimum":50,"maximum":200000}},"additionalProperties":false}},"required":["request","accept"],"additionalProperties":false}}}},"responses":{"200":{"description":"Where the browser goes next","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","const":"connect_decision"},"redirectTo":{"type":"string"},"connection":{"anyOf":[{"$ref":"#/components/schemas/ApiKey"},{"type":"null"}]}},"required":["object","redirectTo","connection"],"additionalProperties":false}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `account_suspended`, `forbidden`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error: `conflict`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error: `request_expired`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/stream":{"get":{"operationId":"openLiveStream","summary":"Live updates (server-sent events)","description":"One `text/event-stream` for the whole account: `message.received` (the number and the text) and `number.updated` (the number), then `ready` once caught up. Reconnect with `Last-Event-ID` and every event since is replayed first; `resync` means the gap was too long, so re-read your numbers. Comments (`: ping`) every 25 seconds keep proxies from closing it. At most 10 streams per person.","tags":["Live"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-required-scope":"read","parameters":[{"name":"watch","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"lastEventId","in":"query","required":false,"schema":{"type":"string","maxLength":40}}],"responses":{"200":{"description":"An event stream. Each event's `data` is one of these, its `event` is the `type`.","content":{"text/event-stream":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"message.received"},"number":{"$ref":"#/components/schemas/Number"},"message":{"$ref":"#/components/schemas/Message"}},"required":["type","number","message"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"number.updated"},"number":{"$ref":"#/components/schemas/Number"}},"required":["type","number"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"ready"},"replayed":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type","replayed"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"resync"}},"required":["type"],"additionalProperties":false}]}}}},"400":{"description":"Error: `invalid_request`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error: `unauthenticated`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: `insufficient_scope`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: `rate_limited`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before trying again","schema":{"type":"integer"}}}},"500":{"description":"Error: `internal_error`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Price":{"type":"object","properties":{"object":{"type":"string","const":"price"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"duration":{"type":"string","enum":["day","week","month","year"]},"label":{"type":"string"},"amount":{"type":"integer","minimum":0,"maximum":100000000},"currency":{"type":"string","const":"usd"},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"activeFrom":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"renewable":{"type":"boolean"}},"required":["object","id","duration","label","amount","currency","version","activeFrom","renewable"],"additionalProperties":false},"Order":{"type":"object","properties":{"object":{"type":"string","const":"order"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"status":{"type":"string","enum":["pending_payment","submitting","provisioning","reconciling","completed","failed","abandoned"]},"duration":{"type":"string","enum":["day","week","month","year"]},"amount":{"type":"integer","minimum":0,"maximum":100000000},"currency":{"type":"string","const":"usd"},"autoRenew":{"type":"boolean"},"numberId":{"type":"string","pattern":"^[a-f0-9]{24}$"},"paymentId":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{24}$"},{"type":"null"}]},"source":{"type":"string","enum":["web","api","mcp"]},"apiKeyId":{"type":["string","null"]},"failure":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"nextAction":{"anyOf":[{"$ref":"#/components/schemas/NextAction"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["object","id","status","duration","amount","currency","autoRenew","numberId","paymentId","source","apiKeyId","failure","nextAction","createdAt","completedAt"],"additionalProperties":false},"NextAction":{"type":"object","properties":{"type":{"type":"string","enum":["confirm_payment","add_card"]},"url":{"type":"string","format":"uri"}},"required":["type","url"],"additionalProperties":false},"Number":{"type":"object","properties":{"object":{"type":"string","const":"number"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"phoneNumber":{"anyOf":[{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"},{"type":"null"}]},"displayNumber":{"type":["string","null"]},"status":{"type":"string","enum":["provisioning","active","cancelling","cancelled","expired","failed"]},"state":{"type":"string","enum":["getting_number","waiting_for_text","code_arrived","more_messages","ending_soon","ended","renewal_payment_failed","cancelled","failed"]},"duration":{"type":"string","enum":["day","week","month","year"]},"startsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"autoRenew":{"type":"boolean"},"renewDuration":{"type":"string","enum":["day","week","month","year"]},"renewalAmount":{"type":"integer","minimum":0,"maximum":100000000},"currency":{"type":"string","const":"usd"},"nickname":{"type":["string","null"]},"messageCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"firstMessageAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"lastMessageAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"latestCode":{"type":["string","null"]},"cancellableFrom":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"cancellableUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"lastCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"services":{"type":"array","items":{"type":"string"}},"endedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"endReason":{"anyOf":[{"type":"string","enum":["expired","renewal_unpaid","cancelled","cancelled_by_staff","cancelled_by_supplier","supplier_failed","payment_failed"]},{"type":"null"}]},"source":{"type":"string","enum":["web","api","mcp"]},"apiKeyId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["object","id","phoneNumber","displayNumber","status","state","duration","startsAt","endsAt","autoRenew","renewDuration","renewalAmount","currency","nickname","messageCount","firstMessageAt","lastMessageAt","latestCode","cancellableFrom","cancellableUntil","endedAt","endReason","source","apiKeyId","createdAt"],"additionalProperties":false},"Payment":{"type":"object","properties":{"object":{"type":"string","const":"payment"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"kind":{"type":"string","enum":["purchase","renewal","extension"]},"status":{"type":"string","enum":["pending","requires_action","processing","authorized","succeeded","failed","canceled","partially_refunded","refunded"]},"amount":{"type":"integer","minimum":0,"maximum":100000000},"refundedAmount":{"type":"integer","minimum":0,"maximum":100000000},"currency":{"type":"string","const":"usd"},"duration":{"type":"string","enum":["day","week","month","year"]},"card":{"anyOf":[{"$ref":"#/components/schemas/CardSummary"},{"type":"null"}]},"receiptUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"numberId":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{24}$"},{"type":"null"}]},"orderId":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{24}$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["object","id","kind","status","amount","refundedAmount","currency","duration","card","receiptUrl","numberId","orderId","createdAt"],"additionalProperties":false},"CardSummary":{"type":"object","properties":{"brand":{"type":"string"},"last4":{"type":"string","pattern":"^\\d{4}$"},"expMonth":{"type":"integer","minimum":1,"maximum":12},"expYear":{"type":"integer","minimum":2000,"maximum":2200}},"required":["brand","last4","expMonth","expYear"],"additionalProperties":false},"Message":{"type":"object","properties":{"object":{"type":"string","const":"message"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"numberId":{"type":"string","pattern":"^[a-f0-9]{24}$"},"sender":{"type":"string"},"body":{"type":"string"},"code":{"type":["string","null"]},"receivedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["object","id","numberId","sender","body","code","receivedAt"],"additionalProperties":false},"Card":{"type":"object","properties":{"brand":{"type":"string"},"last4":{"type":"string","pattern":"^\\d{4}$"},"expMonth":{"type":"integer","minimum":1,"maximum":12},"expYear":{"type":"integer","minimum":2000,"maximum":2200},"object":{"type":"string","const":"card"},"id":{"type":"string","pattern":"^card_[A-Za-z0-9_-]{16,40}$"},"isDefault":{"type":"boolean"},"expiresBeforeRenewal":{"type":"boolean"}},"required":["brand","last4","expMonth","expYear","object","id","isDefault","expiresBeforeRenewal"],"additionalProperties":false},"ApiKey":{"type":"object","properties":{"object":{"type":"string","const":"api_key"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"kind":{"type":"string","enum":["key","connection"]},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["read","manage","buy"]}},"limits":{"type":"object","properties":{"perNumber":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000000},{"type":"null"}]},"perDay":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000000},{"type":"null"}]}},"required":["perNumber","perDay"],"additionalProperties":false},"app":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"clientId":{"type":"string"},"identifiedBy":{"type":"string","enum":["metadata_document","registration"]},"host":{"type":["string","null"]},"verified":{"type":"boolean"},"redirectHost":{"type":"string"}},"required":["name","clientId","identifiedBy","host","verified","redirectHost"],"additionalProperties":false},{"type":"null"}]},"numbersBought":{"type":"integer","minimum":0,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["object","id","kind","name","prefix","scopes","limits","app","numbersBought","createdAt","lastUsedAt"],"additionalProperties":false},"WebhookEndpoint":{"type":"object","properties":{"object":{"type":"string","const":"webhook_endpoint"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"url":{"type":"string","format":"uri"},"description":{"type":["string","null"]},"events":{"type":"array","items":{"type":"string","enum":["number.active","number.failed","number.renewed","number.renewal_failed","number.expired","number.cancelled","message.received","payment.action_required"]}},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["object","id","url","description","events","enabled","createdAt"],"additionalProperties":false},"WebhookDelivery":{"type":"object","properties":{"object":{"type":"string","const":"webhook_delivery"},"id":{"type":"string","pattern":"^[a-f0-9]{24}$"},"endpointId":{"type":"string","pattern":"^[a-f0-9]{24}$"},"eventId":{"type":"string"},"eventType":{"type":"string","enum":["number.active","number.failed","number.renewed","number.renewal_failed","number.expired","number.cancelled","message.received","payment.action_required"]},"status":{"type":"string","enum":["pending","retrying","succeeded","failed"]},"attempts":{"type":"integer","minimum":0,"maximum":9007199254740991},"responseStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"lastAttemptAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"nextAttemptAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"deliveredAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["object","id","endpointId","eventId","eventType","status","attempts","responseStatus","error","createdAt","lastAttemptAt","nextAttemptAt","deliveredAt"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_request","unauthenticated","card_required","payment_declined","forbidden","insufficient_scope","account_suspended","not_found","conflict","card_in_use","request_expired","idempotency_key_reused","idempotency_in_progress","not_cancellable","cancel_too_soon","cancel_window_closed","number_not_active","number_busy","auto_renew_unavailable","spending_limit_exceeded","purchase_limit_exceeded","rate_limited","internal_error","supplier_unavailable","sales_paused"]},"message":{"type":"string","minLength":1},"requestId":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"}},"required":["error","message","requestId"],"additionalProperties":false}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key: `sk_` followed by 40 characters."},"cookieAuth":{"type":"apiKey","in":"cookie","name":"__Secure-app.session_token","description":"The website's session (set by signing in under /auth)."}}}}