{"openapi":"3.1.0","info":{"title":"Portproof API","version":"0.0.1","description":"Proxy traffic by the GB. One prepaid GB balance per organisation, usable on two shared pools: mobile 4G/5G and residential. Pool, country, rotation and session are chosen in the proxy username (`POST /v1/traffic/build-url`); the pools are shared and we do not sell fixed IP addresses. Customer routes accept an API key (`Authorization: Bearer pk_...`) or the shop session cookie. Errors are RFC 9457 `application/problem+json` with a machine `code`. Digital products use digital:read and digital:write; billing:read reads orders and wallet history. Use POST /v1/digital/purchases for isolated reseller purchases. There is no sandbox: all keys use real funds. Listed device rentals follow current catalogue availability."},"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","description":"Customer API key `pk_live_…` / `pk_test_…`. Scopes: `digital:read` reads owned SMS/eSIM data and prices; `digital:write` buys digital products and performs supported actions; `billing:read` reads wallet/orders. `ports:read` and `billing:read` read; `ports:write` is needed to buy traffic, check out, top up, cancel an order and to read, build or regenerate proxy credentials; account, password and session routes need a signed-in session. Customer payout requests are retired; only the authenticated site owner can authorise manual payouts."},"SessionCookie":{"type":"apiKey","in":"cookie","name":"pp_session","description":"Customer session cookie set by POST /v1/auth/login; state-changing requests also send the `pp_csrf` cookie value as `X-CSRF-Token`."}},"schemas":{}},"paths":{"/health":{"get":{"summary":"Health check","tags":["meta"],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]},"driver":{"type":"string","enum":["pglite","pg"]},"time":{"type":"string","format":"date-time"},"uptime_s":{"type":"integer","minimum":0},"version":{"type":"string"},"release":{"anyOf":[{"type":"string","pattern":"^\\d{14}-[0-9a-f]{10}$"},{"type":"null"}]}},"required":["status","driver","time","uptime_s","version","release"],"additionalProperties":false}}}}}}},"/.well-known/portproof-keys.json":{"get":{"summary":"Ed25519 keys that sign rotation records","tags":["meta"],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"key_id":{"type":"string","minLength":1},"site_code":{"type":"string","minLength":1},"alg":{"type":"string","enum":["Ed25519"]},"public_key_b64":{"type":"string","minLength":1},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"type":"string","format":"date-time"}},"required":["key_id","site_code","alg","public_key_b64","valid_from","valid_to"],"additionalProperties":false}}},"required":["keys"],"additionalProperties":false}}}}}}},"/.well-known/security.txt":{"get":{"summary":"Security contact (RFC 9116)","tags":["meta"],"security":[],"responses":{"200":{"description":"Default Response"}}}},"/v1/pricing":{"get":{"summary":"Public price table","tags":["public"],"description":"Dedicated ports from the partner network are listed only while they can be bought; organisations with early access see them when they call with their session or API key.","security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"currency_note":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"skus":{"type":"array","items":{"type":"object","properties":{"sku":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"operator":{"type":"string","enum":["owned","partner"]},"term":{"type":"string","enum":["monthly","weekly","daily","hourly"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"floor_cents":{"type":"integer","minimum":0},"evidence":{"type":"string","enum":["signed","observed"]},"buy_via":{"type":"string","enum":["ports","cart"]},"terms":{"type":"object","properties":{"monthly":{"type":"integer","minimum":0},"weekly":{"type":"integer","minimum":0},"daily":{"type":"integer","minimum":0}},"required":["monthly","weekly","daily"],"additionalProperties":false}},"required":["sku","country","operator","term","price_cents","currency","evidence","buy_via"],"additionalProperties":false}},"ladder":{"type":"array","items":{"type":"object","properties":{"min_ports":{"type":"integer","minimum":1},"discount_pct":{"type":"number","minimum":0,"maximum":100}},"required":["min_ports","discount_pct"],"additionalProperties":false}},"term_ratios":{"type":"object","properties":{"weekly":{"type":"number","minimum":0,"maximum":1},"daily":{"type":"number","minimum":0,"maximum":1}},"required":["weekly","daily"],"additionalProperties":false},"trial":{"type":"object","properties":{"price_cents":{"type":"integer","minimum":0},"hours":{"type":"integer","minimum":1}},"required":["price_cents","hours"],"additionalProperties":false},"traffic":{"anyOf":[{"type":"object","properties":{"sku":{"type":"string","minLength":1},"currency":{"type":"string","enum":["EUR"]},"tiers":{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},"packages_gb":{"type":"array","items":{"type":"integer","minimum":1}},"max_order_gb":{"type":"integer","minimum":1},"validity_days":{"type":"integer","minimum":0},"t0_monthly_gb_cap":{"type":"number","minimum":0},"trial":{"anyOf":[{"type":"object","properties":{"sku":{"type":"string","minLength":1},"gb":{"type":"number","exclusiveMinimum":0},"price_cents":{"type":"integer","minimum":0}},"required":["sku","gb","price_cents"],"additionalProperties":false},{"type":"null"}]},"available":{"type":"boolean"}},"required":["sku","currency","tiers","packages_gb","max_order_gb","validity_days","t0_monthly_gb_cap","trial","available"],"additionalProperties":false},{"type":"null"}]}},"required":["currency_note","updated_at","skus","ladder","term_ratios","trial"],"additionalProperties":false}}}}}}},"/v1/inventory":{"get":{"summary":"Available proven ports per site and carrier","tags":["public"],"parameters":[{"schema":{"type":"string","pattern":"^[A-Z]{2}$"},"in":"query","name":"country","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"carrier","required":false}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","pattern":"^[A-Z]{2}$"},"site_code":{"type":"string","minLength":1},"operator":{"type":"string","enum":["owned","partner"]},"carrier":{"type":"string","minLength":1},"carrier_id":{"type":"string"},"available":{"type":"integer","minimum":0},"telemetry_hours_min":{"type":"integer","minimum":0,"default":72},"waitlist":{"type":"boolean"}},"required":["country","site_code","operator","carrier","carrier_id","available","waitlist"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}}}}},"/v1/quotes":{"post":{"summary":"Quote a quantity of ports (volume ladder applied)","tags":["public"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"term":{"type":"string","enum":["monthly","weekly","daily"]},"quantity":{"type":"integer","minimum":1,"maximum":1000}},"required":["sku","term","quantity"],"additionalProperties":false}}}},"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"unit_cents":{"type":"integer","minimum":0},"discount_pct":{"type":"number","minimum":0,"maximum":100},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]}},"required":["unit_cents","discount_pct","total_cents","currency"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/echo-ip":{"get":{"summary":"Echo the caller IP","tags":["public"],"description":"The address the request came from, as the API sees it. `country` is present only when a Cloudflare edge in front of the API sets it (`TRUST_CF_IPCOUNTRY`); the API does no geolocation of its own, so a client-sent `CF-IPCountry` header is ignored.","security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"family":{"type":"string","enum":["v4","v6"]},"ts":{"type":"string","format":"date-time"},"country":{"type":"string","minLength":2,"maxLength":2}},"required":["ip","family","ts"],"additionalProperties":false}}}}}}},"/v1/r/{token}":{"get":{"summary":"Rotate via the per-port token URL","tags":["public"],"description":"Waits for the signed rotation record (up to 180 s). 200 with the record only when the IP changed; otherwise 502 `{ reason }`.","parameters":[{"schema":{"type":"string","minLength":8,"maxLength":128},"in":"path","name":"token","required":true}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"port_id":{"type":"string"},"site_code":{"type":"string","minLength":1},"requested_by":{"type":"string","enum":["manual","api","token","schedule","health","migration"]},"old_ip4":{"type":["string","null"]},"new_ip4":{"type":["string","null"]},"old_ip6_prefix":{"type":["string","null"]},"new_ip6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"rotated":{"type":"boolean"},"attempts":{"type":"integer","minimum":0},"elapsed_ms":{"type":"integer","minimum":0},"reason":{"type":"string","enum":["ok","carrier_sticky","attach_timeout","driver_error","cooldown"]},"driver":{"type":"string","minLength":1},"carrier":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"asn":{"type":["string","null"]},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"sources":{"type":"integer","minimum":0}},"required":["country","region","sources"],"additionalProperties":false},"reputation":{"anyOf":[{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["flagged","hosting","scored_at"],"additionalProperties":false},{"type":"null"}]},"sticky_window_s":{"type":"integer","minimum":0},"ip_shared_with_own_ports":{"type":"integer","minimum":0},"sim_contract_class":{"type":"string","enum":["prepaid","business","m2m"]},"signed_at":{"type":"string","format":"date-time"},"key_id":{"type":"string","pattern":"^[a-z0-9-]+-\\d{4}$"},"attestation":{"type":"string","enum":["signed","observed"]},"sig":{"type":"string","pattern":"^[A-Za-z0-9+/]+={0,2}$","minLength":86}},"required":["id","port_id","site_code","requested_by","old_ip4","new_ip4","old_ip6_prefix","new_ip6_prefix","v4_is_nat64","rotated","attempts","elapsed_ms","reason","driver","carrier","mcc_mnc","asn","geo","reputation","sticky_window_s","ip_shared_with_own_ports","sim_contract_class","signed_at","key_id","sig"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"],"additionalProperties":false}}}}}}},"/v1/passport/public/{token}":{"get":{"summary":"Shared port details (no credentials)","tags":["public"],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":128},"in":"path","name":"token","required":true}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"port_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"operator":{"type":"string","enum":["owned","partner"]},"evidence":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"carrier":{"type":"object","properties":{"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"asn":{"type":["string","null"]},"gateway_region":{"type":["string","null"]},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["name","mcc_mnc","asn","gateway_region","ip_stack"],"additionalProperties":false},"sim_contract_class":{"type":"string","enum":["prepaid","business","m2m"]},"egress":{"type":"object","properties":{"v4":{"type":["string","null"]},"v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"type":"string","format":"date-time"}},"required":["v4","v6_prefix","v4_is_nat64","ip_since"],"additionalProperties":false},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"city":{"type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","minLength":1},"country":{"type":["string","null"]},"region":{"type":["string","null"]},"city":{"type":["string","null"]}},"required":["provider","country","region","city"],"additionalProperties":false}}},"required":["country","region","city","sources"],"additionalProperties":false},"reputation":{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"providers":{"type":"array","items":{"type":"string"}},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["flagged","hosting","providers","scored_at"],"additionalProperties":false},"rotation":{"type":"object","properties":{"interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_30d":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"first_attempt_success_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"p50_ms":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["count","first_attempt_success_pct","p50_ms"],"additionalProperties":false}},"required":["interval_s","sticky_until","last_rotation_at","last_30d"],"additionalProperties":false},"uptime":{"type":"object","properties":{"d30_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"d90_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"probes_30d":{"type":"integer","minimum":0}},"required":["d30_pct","d90_pct","probes_30d"],"additionalProperties":false},"throughput":{"type":"object","properties":{"last_sample_mbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"p50_7d_mbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["last_sample_mbps","p50_7d_mbps"],"additionalProperties":false},"usage":{"type":"object","properties":{"bytes_today":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes_today","cap_bytes"],"additionalProperties":false},"sessions":{"type":"object","properties":{"concurrent_now":{"type":"integer","minimum":0},"peak_24h":{"type":"integer","minimum":0}},"required":["concurrent_now","peak_24h"],"additionalProperties":false},"ip_shared_with_own_ports":{"type":"integer","minimum":0},"exclusivity":{"type":"string","enum":["modem+sim+credentials"]},"receipts_url":{"type":"string","format":"uri"}},"required":["port_id","generated_at","site_code","country","operator","carrier","sim_contract_class","egress","geo","reputation","rotation","uptime","throughput","usage","sessions","ip_shared_with_own_ports","exclusivity","receipts_url"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports":{"get":{"summary":"List the ports your organisation owns","tags":["ports"],"description":"Cursor-paginated: `?limit=` (default 50, max 200) and `?cursor=` from the previous `next_cursor`.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"cursor","required":false}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["provisioning","available","reserved","sold","leased","migrating","quarantined","retired"]},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"carrier":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["id","name","mcc_mnc","ip_stack"],"additionalProperties":false},"operator":{"type":"string","enum":["owned","partner"]},"listeners":{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"type":"integer","minimum":1,"maximum":65535},"socks_port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","http_port","socks_port"],"additionalProperties":false},"credentials":{"anyOf":[{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["username","password"],"additionalProperties":false},{"type":"null"}]},"allowlist":{"type":"array","items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(\\/\\d{1,2})?$|^[0-9a-fA-F:]+(\\/\\d{1,3})?$"},"maxItems":10},"egress_v4":{"type":["string","null"]},"egress_v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"rotation_interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"cooldown_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"telemetry_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"usage_today":{"type":"object","properties":{"bytes":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes","cap_bytes"],"additionalProperties":false},"uptime_30d_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"subscription":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"port_id":{"type":"string"},"sku":{"type":"string","minLength":1},"term":{"type":"string","enum":["monthly","weekly","daily"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"auto_renew":{"type":"boolean"},"state":{"type":"string","enum":["active","grace","suspended","ended"]},"provider_ref":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","port_id","sku","term","price_cents","currency","starts_at","ends_at","auto_renew","state","provider_ref","created_at","updated_at"],"additionalProperties":false},{"type":"null"}]},"evidence":{"type":"string","enum":["signed","observed"]},"attestation":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"capabilities":{"anyOf":[{"type":"object","properties":{"replace":{"type":"boolean"},"cancel":{"type":"boolean"},"allowlist":{"type":"boolean"},"auto_swap":{"type":"boolean"},"rotation_interval":{"type":"boolean"},"password_change":{"type":"boolean"}},"required":["replace","cancel","allowlist","auto_swap","rotation_interval","password_change"],"additionalProperties":false},{"type":"null"}]},"renewal":{"anyOf":[{"type":"object","properties":{"auto_renew":{"type":"boolean"},"ends_at":{"type":"string","format":"date-time"},"price_cents":{"type":"integer","minimum":0},"can_renew":{"type":"boolean"}},"required":["auto_renew","ends_at","price_cents","can_renew"],"additionalProperties":false},{"type":"null"}]},"rotation_url":{"type":"string","format":"uri"}},"required":["id","state","site_code","country","carrier","operator","listeners","credentials","allowlist","egress_v4","egress_v6_prefix","v4_is_nat64","ip_since","rotation_interval_s","sticky_until","cooldown_until","last_rotation_at","telemetry_since","usage_today","uptime_30d_pct","subscription","evidence","attestation"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}},"post":{"summary":"Buy a port (coming soon: not on sale yet)","tags":["ports"],"description":"Allocates one proven port for the SKU and term, charges the project and returns it in state `sold`. For API-key organisations billed by invoice. A shop account and any catalogue SKU buy through the cart (POST /v1/cart/items, then POST /v1/checkout) and get problem `use_cart` here; while owned ports are hidden a shop account gets `launch_waitlist`. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"term":{"type":"string","enum":["monthly","weekly","daily"]},"quantity":{"type":"number","default":1,"enum":[1]},"carrier_id":{"type":"string"},"auto_renew":{"type":"boolean"}},"required":["sku","term"],"additionalProperties":false}}}},"security":[{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["provisioning","available","reserved","sold","leased","migrating","quarantined","retired"]},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"carrier":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["id","name","mcc_mnc","ip_stack"],"additionalProperties":false},"operator":{"type":"string","enum":["owned","partner"]},"listeners":{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"type":"integer","minimum":1,"maximum":65535},"socks_port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","http_port","socks_port"],"additionalProperties":false},"credentials":{"anyOf":[{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["username","password"],"additionalProperties":false},{"type":"null"}]},"allowlist":{"type":"array","items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(\\/\\d{1,2})?$|^[0-9a-fA-F:]+(\\/\\d{1,3})?$"},"maxItems":10},"egress_v4":{"type":["string","null"]},"egress_v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"rotation_interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"cooldown_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"telemetry_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"usage_today":{"type":"object","properties":{"bytes":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes","cap_bytes"],"additionalProperties":false},"uptime_30d_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"subscription":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"port_id":{"type":"string"},"sku":{"type":"string","minLength":1},"term":{"type":"string","enum":["monthly","weekly","daily"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"auto_renew":{"type":"boolean"},"state":{"type":"string","enum":["active","grace","suspended","ended"]},"provider_ref":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","port_id","sku","term","price_cents","currency","starts_at","ends_at","auto_renew","state","provider_ref","created_at","updated_at"],"additionalProperties":false},{"type":"null"}]},"evidence":{"type":"string","enum":["signed","observed"]},"attestation":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"capabilities":{"anyOf":[{"type":"object","properties":{"replace":{"type":"boolean"},"cancel":{"type":"boolean"},"allowlist":{"type":"boolean"},"auto_swap":{"type":"boolean"},"rotation_interval":{"type":"boolean"},"password_change":{"type":"boolean"}},"required":["replace","cancel","allowlist","auto_swap","rotation_interval","password_change"],"additionalProperties":false},{"type":"null"}]},"renewal":{"anyOf":[{"type":"object","properties":{"auto_renew":{"type":"boolean"},"ends_at":{"type":"string","format":"date-time"},"price_cents":{"type":"integer","minimum":0},"can_renew":{"type":"boolean"}},"required":["auto_renew","ends_at","price_cents","can_renew"],"additionalProperties":false},{"type":"null"}]},"rotation_url":{"type":"string","format":"uri"}},"required":["id","state","site_code","country","carrier","operator","listeners","credentials","allowlist","egress_v4","egress_v6_prefix","v4_is_nat64","ip_since","rotation_interval_s","sticky_until","cooldown_until","last_rotation_at","telemetry_since","usage_today","uptime_30d_pct","subscription","evidence","attestation"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}":{"get":{"summary":"Get a port","tags":["ports"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["provisioning","available","reserved","sold","leased","migrating","quarantined","retired"]},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"carrier":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["id","name","mcc_mnc","ip_stack"],"additionalProperties":false},"operator":{"type":"string","enum":["owned","partner"]},"listeners":{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"type":"integer","minimum":1,"maximum":65535},"socks_port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","http_port","socks_port"],"additionalProperties":false},"credentials":{"anyOf":[{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["username","password"],"additionalProperties":false},{"type":"null"}]},"allowlist":{"type":"array","items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(\\/\\d{1,2})?$|^[0-9a-fA-F:]+(\\/\\d{1,3})?$"},"maxItems":10},"egress_v4":{"type":["string","null"]},"egress_v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"rotation_interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"cooldown_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"telemetry_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"usage_today":{"type":"object","properties":{"bytes":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes","cap_bytes"],"additionalProperties":false},"uptime_30d_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"subscription":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"port_id":{"type":"string"},"sku":{"type":"string","minLength":1},"term":{"type":"string","enum":["monthly","weekly","daily"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"auto_renew":{"type":"boolean"},"state":{"type":"string","enum":["active","grace","suspended","ended"]},"provider_ref":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","port_id","sku","term","price_cents","currency","starts_at","ends_at","auto_renew","state","provider_ref","created_at","updated_at"],"additionalProperties":false},{"type":"null"}]},"evidence":{"type":"string","enum":["signed","observed"]},"attestation":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"capabilities":{"anyOf":[{"type":"object","properties":{"replace":{"type":"boolean"},"cancel":{"type":"boolean"},"allowlist":{"type":"boolean"},"auto_swap":{"type":"boolean"},"rotation_interval":{"type":"boolean"},"password_change":{"type":"boolean"}},"required":["replace","cancel","allowlist","auto_swap","rotation_interval","password_change"],"additionalProperties":false},{"type":"null"}]},"renewal":{"anyOf":[{"type":"object","properties":{"auto_renew":{"type":"boolean"},"ends_at":{"type":"string","format":"date-time"},"price_cents":{"type":"integer","minimum":0},"can_renew":{"type":"boolean"}},"required":["auto_renew","ends_at","price_cents","can_renew"],"additionalProperties":false},{"type":"null"}]},"rotation_url":{"type":"string","format":"uri"}},"required":["id","state","site_code","country","carrier","operator","listeners","credentials","allowlist","egress_v4","egress_v6_prefix","v4_is_nat64","ip_since","rotation_interval_s","sticky_until","cooldown_until","last_rotation_at","telemetry_since","usage_today","uptime_30d_pct","subscription","evidence","attestation"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/billing":{"get":{"summary":"What the port has cost and what it will cost","tags":["ports"],"description":"The order that bought the port (with its invoice once paid), every renewal and refund of its term, the total paid so far, the next automatic renewal (when it runs, the price, whether the wallet covers it) and what happens when the term ends.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"port_id":{"type":"string"},"currency":{"type":"string","enum":["EUR","USD"]},"term":{"anyOf":[{"type":"string","enum":["monthly","weekly","daily"]},{"type":"null"}]},"term_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"term_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"paid_cents":{"type":"integer","minimum":0},"order":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","minLength":1},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"invoice_url":{"type":["string","null"]}},"required":["id","number","status","paid_at","invoice_url"],"additionalProperties":false},{"type":"null"}]},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","enum":["purchase","renewal","refund"]},"state":{"type":"string","enum":["paid","awaiting_payment","confirming","failed","refunded","cancelled"]},"amount_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"paid_from":{"anyOf":[{"type":"string","enum":["wallet","crypto","invoice","other"]},{"type":"null"}]},"at":{"type":"string","format":"date-time"},"order":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","minLength":1},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"invoice_url":{"type":["string","null"]}},"required":["id","number","status","paid_at","invoice_url"],"additionalProperties":false},{"type":"null"}]}},"required":["id","kind","state","amount_cents","currency","paid_from","at","order"],"additionalProperties":false}},"next_renewal":{"anyOf":[{"type":"object","properties":{"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"from":{"type":"string","format":"date-time"},"until":{"type":"string","format":"date-time"},"paid_from":{"type":"string","enum":["wallet","crypto","invoice","other"]},"wallet_balance_cents":{"anyOf":[{"type":"integer"},{"type":"null"}]},"covered":{"type":["boolean","null"]}},"required":["price_cents","currency","from","until","paid_from","wallet_balance_cents","covered"],"additionalProperties":false},{"type":"null"}]},"at_expiry":{"type":"string","enum":["renews","ends","ended"]},"grace_hours":{"type":"integer","minimum":0}},"required":["port_id","currency","term","term_started_at","term_ends_at","paid_cents","order","entries","next_renewal","at_expiry","grace_hours"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/renew":{"post":{"summary":"Renew the subscription for one more term","tags":["ports"],"description":"A dedicated port from the partner network is renewed on the network first and paid from the wallet; the new end of the term is the one the network confirmed. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"port_id":{"type":"string"},"sku":{"type":"string","minLength":1},"term":{"type":"string","enum":["monthly","weekly","daily"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"auto_renew":{"type":"boolean"},"state":{"type":"string","enum":["active","grace","suspended","ended"]},"provider_ref":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","port_id","sku","term","price_cents","currency","starts_at","ends_at","auto_renew","state","provider_ref","created_at","updated_at"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/renew-quote":{"get":{"summary":"What one more term costs from the wallet, and whether the port can be renewed now","tags":["ports"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"port_id":{"type":"string"},"term":{"type":"string","enum":["monthly","weekly","daily"]},"days":{"type":"integer","minimum":1,"maximum":90},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"ends_at":{"type":"string","format":"date-time"},"wallet_balance_cents":{"type":"integer"},"can_renew":{"type":"boolean"},"reason":{"type":["string","null"]}},"required":["port_id","term","days","price_cents","currency","ends_at","wallet_balance_cents","can_renew","reason"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/auto-renew":{"put":{"summary":"Switch auto-renew on or off","tags":["ports"],"description":"Off means the port ends at the end of its term. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"port_id":{"type":"string"},"sku":{"type":"string","minLength":1},"term":{"type":"string","enum":["monthly","weekly","daily"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"auto_renew":{"type":"boolean"},"state":{"type":"string","enum":["active","grace","suspended","ended"]},"provider_ref":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","port_id","sku","term","price_cents","currency","starts_at","ends_at","auto_renew","state","provider_ref","created_at","updated_at"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/cancel":{"post":{"summary":"Cancel a port","tags":["ports"],"description":"A paid first-month pro-rata cancellation requires an email-confirmed refund request and owner review through /refund-requests. Other cancellations switch auto-renew off and the port runs to term end. This endpoint cannot issue a customer-requested refund. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ends_at":{"type":"string","format":"date-time"},"refund_cents":{"type":"integer","minimum":0}},"required":["ends_at","refund_cents"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/replace":{"post":{"summary":"Replace with a fresh port on the same carrier","tags":["ports"],"description":"The old port is retired and the subscription moves to the new one. A dedicated port from the partner network keeps its id: the device is swapped and host, ports and credentials change. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["provisioning","available","reserved","sold","leased","migrating","quarantined","retired"]},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"carrier":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["id","name","mcc_mnc","ip_stack"],"additionalProperties":false},"operator":{"type":"string","enum":["owned","partner"]},"listeners":{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"type":"integer","minimum":1,"maximum":65535},"socks_port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","http_port","socks_port"],"additionalProperties":false},"credentials":{"anyOf":[{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["username","password"],"additionalProperties":false},{"type":"null"}]},"allowlist":{"type":"array","items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(\\/\\d{1,2})?$|^[0-9a-fA-F:]+(\\/\\d{1,3})?$"},"maxItems":10},"egress_v4":{"type":["string","null"]},"egress_v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"rotation_interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"cooldown_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"telemetry_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"usage_today":{"type":"object","properties":{"bytes":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes","cap_bytes"],"additionalProperties":false},"uptime_30d_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"subscription":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"port_id":{"type":"string"},"sku":{"type":"string","minLength":1},"term":{"type":"string","enum":["monthly","weekly","daily"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"auto_renew":{"type":"boolean"},"state":{"type":"string","enum":["active","grace","suspended","ended"]},"provider_ref":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","port_id","sku","term","price_cents","currency","starts_at","ends_at","auto_renew","state","provider_ref","created_at","updated_at"],"additionalProperties":false},{"type":"null"}]},"evidence":{"type":"string","enum":["signed","observed"]},"attestation":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"capabilities":{"anyOf":[{"type":"object","properties":{"replace":{"type":"boolean"},"cancel":{"type":"boolean"},"allowlist":{"type":"boolean"},"auto_swap":{"type":"boolean"},"rotation_interval":{"type":"boolean"},"password_change":{"type":"boolean"}},"required":["replace","cancel","allowlist","auto_swap","rotation_interval","password_change"],"additionalProperties":false},{"type":"null"}]},"renewal":{"anyOf":[{"type":"object","properties":{"auto_renew":{"type":"boolean"},"ends_at":{"type":"string","format":"date-time"},"price_cents":{"type":"integer","minimum":0},"can_renew":{"type":"boolean"}},"required":["auto_renew","ends_at","price_cents","can_renew"],"additionalProperties":false},{"type":"null"}]},"rotation_url":{"type":"string","format":"uri"}},"required":["id","state","site_code","country","carrier","operator","listeners","credentials","allowlist","egress_v4","egress_v6_prefix","v4_is_nat64","ip_since","rotation_interval_s","sticky_until","cooldown_until","last_rotation_at","telemetry_since","usage_today","uptime_30d_pct","subscription","evidence","attestation"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/rotation":{"put":{"summary":"Set the rotation schedule (0 = sticky, else 60..86400 s)","tags":["ports"],"description":"Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"interval_s":{"type":"integer"}},"required":["interval_s"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["provisioning","available","reserved","sold","leased","migrating","quarantined","retired"]},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"carrier":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["id","name","mcc_mnc","ip_stack"],"additionalProperties":false},"operator":{"type":"string","enum":["owned","partner"]},"listeners":{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"type":"integer","minimum":1,"maximum":65535},"socks_port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","http_port","socks_port"],"additionalProperties":false},"credentials":{"anyOf":[{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["username","password"],"additionalProperties":false},{"type":"null"}]},"allowlist":{"type":"array","items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(\\/\\d{1,2})?$|^[0-9a-fA-F:]+(\\/\\d{1,3})?$"},"maxItems":10},"egress_v4":{"type":["string","null"]},"egress_v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"rotation_interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"cooldown_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"telemetry_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"usage_today":{"type":"object","properties":{"bytes":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes","cap_bytes"],"additionalProperties":false},"uptime_30d_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"subscription":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"port_id":{"type":"string"},"sku":{"type":"string","minLength":1},"term":{"type":"string","enum":["monthly","weekly","daily"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"auto_renew":{"type":"boolean"},"state":{"type":"string","enum":["active","grace","suspended","ended"]},"provider_ref":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","port_id","sku","term","price_cents","currency","starts_at","ends_at","auto_renew","state","provider_ref","created_at","updated_at"],"additionalProperties":false},{"type":"null"}]},"evidence":{"type":"string","enum":["signed","observed"]},"attestation":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"capabilities":{"anyOf":[{"type":"object","properties":{"replace":{"type":"boolean"},"cancel":{"type":"boolean"},"allowlist":{"type":"boolean"},"auto_swap":{"type":"boolean"},"rotation_interval":{"type":"boolean"},"password_change":{"type":"boolean"}},"required":["replace","cancel","allowlist","auto_swap","rotation_interval","password_change"],"additionalProperties":false},{"type":"null"}]},"renewal":{"anyOf":[{"type":"object","properties":{"auto_renew":{"type":"boolean"},"ends_at":{"type":"string","format":"date-time"},"price_cents":{"type":"integer","minimum":0},"can_renew":{"type":"boolean"}},"required":["auto_renew","ends_at","price_cents","can_renew"],"additionalProperties":false},{"type":"null"}]},"rotation_url":{"type":"string","format":"uri"}},"required":["id","state","site_code","country","carrier","operator","listeners","credentials","allowlist","egress_v4","egress_v6_prefix","v4_is_nat64","ip_since","rotation_interval_s","sticky_until","cooldown_until","last_rotation_at","telemetry_since","usage_today","uptime_30d_pct","subscription","evidence","attestation"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/credentials":{"put":{"summary":"Regenerate the proxy password","tags":["ports"],"description":"Also regenerates the per-port rotation URL token. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"regenerate":{"type":"boolean","enum":[true]}},"required":["regenerate"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"version":{"type":"integer","minimum":1}},"required":["username","password","version"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/allowlist":{"put":{"summary":"Replace the source-IP allowlist (max 10 CIDRs)","tags":["ports"],"description":"Not available for dedicated ports from the partner network (409). Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cidrs":{"type":"array","items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(\\/\\d{1,2})?$|^[0-9a-fA-F:]+(\\/\\d{1,3})?$"},"maxItems":10}},"required":["cidrs"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["provisioning","available","reserved","sold","leased","migrating","quarantined","retired"]},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"carrier":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["id","name","mcc_mnc","ip_stack"],"additionalProperties":false},"operator":{"type":"string","enum":["owned","partner"]},"listeners":{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"type":"integer","minimum":1,"maximum":65535},"socks_port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","http_port","socks_port"],"additionalProperties":false},"credentials":{"anyOf":[{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["username","password"],"additionalProperties":false},{"type":"null"}]},"allowlist":{"type":"array","items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(\\/\\d{1,2})?$|^[0-9a-fA-F:]+(\\/\\d{1,3})?$"},"maxItems":10},"egress_v4":{"type":["string","null"]},"egress_v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"rotation_interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"cooldown_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"telemetry_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"usage_today":{"type":"object","properties":{"bytes":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes","cap_bytes"],"additionalProperties":false},"uptime_30d_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"subscription":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"port_id":{"type":"string"},"sku":{"type":"string","minLength":1},"term":{"type":"string","enum":["monthly","weekly","daily"]},"price_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"auto_renew":{"type":"boolean"},"state":{"type":"string","enum":["active","grace","suspended","ended"]},"provider_ref":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","port_id","sku","term","price_cents","currency","starts_at","ends_at","auto_renew","state","provider_ref","created_at","updated_at"],"additionalProperties":false},{"type":"null"}]},"evidence":{"type":"string","enum":["signed","observed"]},"attestation":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"capabilities":{"anyOf":[{"type":"object","properties":{"replace":{"type":"boolean"},"cancel":{"type":"boolean"},"allowlist":{"type":"boolean"},"auto_swap":{"type":"boolean"},"rotation_interval":{"type":"boolean"},"password_change":{"type":"boolean"}},"required":["replace","cancel","allowlist","auto_swap","rotation_interval","password_change"],"additionalProperties":false},{"type":"null"}]},"renewal":{"anyOf":[{"type":"object","properties":{"auto_renew":{"type":"boolean"},"ends_at":{"type":"string","format":"date-time"},"price_cents":{"type":"integer","minimum":0},"can_renew":{"type":"boolean"}},"required":["auto_renew","ends_at","price_cents","can_renew"],"additionalProperties":false},{"type":"null"}]},"rotation_url":{"type":"string","format":"uri"}},"required":["id","state","site_code","country","carrier","operator","listeners","credentials","allowlist","egress_v4","egress_v6_prefix","v4_is_nat64","ip_since","rotation_interval_s","sticky_until","cooldown_until","last_rotation_at","telemetry_since","usage_today","uptime_30d_pct","subscription","evidence","attestation"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/rescore":{"post":{"summary":"Re-run the reputation score for the current IP","tags":["ports"],"description":"One included rescore per port per UTC day. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"reputation":{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"providers":{"type":"array","items":{"type":"string"}}},"required":["flagged","hosting","providers"],"additionalProperties":false},"scored_at":{"type":"string","format":"date-time"}},"required":["reputation","scored_at"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/wireguard":{"get":{"summary":"WireGuard profile (reserved, not in v0)","tags":["ports"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/rotate":{"post":{"summary":"Rotate the egress IP","tags":["ports"],"description":"Rotates the port and waits for the Ed25519-signed rotation record (default `wait=true`). Own-farm ports wait up to 180 s; partner-network ports up to 30 s, because their IP change takes about a minute. On timeout, or with `wait=false`, the answer is 202 with `rotation_id`: poll `GET /v1/ports/{id}/rotation/{rotation_id}` for the record. Rate limit: 1 per 60 s per port, taken before the rotation starts (429 `port_cooldown` with `retry_after`). Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"wait":{"type":"boolean","default":true}},"additionalProperties":false,"default":{"wait":true}}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"port_id":{"type":"string"},"site_code":{"type":"string","minLength":1},"requested_by":{"type":"string","enum":["manual","api","token","schedule","health","migration"]},"old_ip4":{"type":["string","null"]},"new_ip4":{"type":["string","null"]},"old_ip6_prefix":{"type":["string","null"]},"new_ip6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"rotated":{"type":"boolean"},"attempts":{"type":"integer","minimum":0},"elapsed_ms":{"type":"integer","minimum":0},"reason":{"type":"string","enum":["ok","carrier_sticky","attach_timeout","driver_error","cooldown"]},"driver":{"type":"string","minLength":1},"carrier":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"asn":{"type":["string","null"]},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"sources":{"type":"integer","minimum":0}},"required":["country","region","sources"],"additionalProperties":false},"reputation":{"anyOf":[{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["flagged","hosting","scored_at"],"additionalProperties":false},{"type":"null"}]},"sticky_window_s":{"type":"integer","minimum":0},"ip_shared_with_own_ports":{"type":"integer","minimum":0},"sim_contract_class":{"type":"string","enum":["prepaid","business","m2m"]},"signed_at":{"type":"string","format":"date-time"},"key_id":{"type":"string","pattern":"^[a-z0-9-]+-\\d{4}$"},"attestation":{"type":"string","enum":["signed","observed"]},"sig":{"type":"string","pattern":"^[A-Za-z0-9+/]+={0,2}$","minLength":86}},"required":["id","port_id","site_code","requested_by","old_ip4","new_ip4","old_ip6_prefix","new_ip6_prefix","v4_is_nat64","rotated","attempts","elapsed_ms","reason","driver","carrier","mcc_mnc","asn","geo","reputation","sticky_window_s","ip_shared_with_own_ports","sim_contract_class","signed_at","key_id","sig"],"additionalProperties":false}}}},"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rotation_id":{"type":"string"},"status":{"type":"string","enum":["pending"]}},"required":["rotation_id","status"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/rotation/{rid}":{"get":{"summary":"Status of a pending rotation","tags":["ports"],"description":"The signed rotation record once the rotation has finished (200), or 202 `pending` while it still runs. Records from before your ownership of the port are not found.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true},{"schema":{"type":"string","minLength":1,"maxLength":64},"in":"path","name":"rid","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"port_id":{"type":"string"},"site_code":{"type":"string","minLength":1},"requested_by":{"type":"string","enum":["manual","api","token","schedule","health","migration"]},"old_ip4":{"type":["string","null"]},"new_ip4":{"type":["string","null"]},"old_ip6_prefix":{"type":["string","null"]},"new_ip6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"rotated":{"type":"boolean"},"attempts":{"type":"integer","minimum":0},"elapsed_ms":{"type":"integer","minimum":0},"reason":{"type":"string","enum":["ok","carrier_sticky","attach_timeout","driver_error","cooldown"]},"driver":{"type":"string","minLength":1},"carrier":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"asn":{"type":["string","null"]},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"sources":{"type":"integer","minimum":0}},"required":["country","region","sources"],"additionalProperties":false},"reputation":{"anyOf":[{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["flagged","hosting","scored_at"],"additionalProperties":false},{"type":"null"}]},"sticky_window_s":{"type":"integer","minimum":0},"ip_shared_with_own_ports":{"type":"integer","minimum":0},"sim_contract_class":{"type":"string","enum":["prepaid","business","m2m"]},"signed_at":{"type":"string","format":"date-time"},"key_id":{"type":"string","pattern":"^[a-z0-9-]+-\\d{4}$"},"attestation":{"type":"string","enum":["signed","observed"]},"sig":{"type":"string","pattern":"^[A-Za-z0-9+/]+={0,2}$","minLength":86}},"required":["id","port_id","site_code","requested_by","old_ip4","new_ip4","old_ip6_prefix","new_ip6_prefix","v4_is_nat64","rotated","attempts","elapsed_ms","reason","driver","carrier","mcc_mnc","asn","geo","reputation","sticky_window_s","ip_shared_with_own_ports","sim_contract_class","signed_at","key_id","sig"],"additionalProperties":false}}}},"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rotation_id":{"type":"string"},"status":{"type":"string","enum":["pending"]}},"required":["rotation_id","status"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/passport":{"get":{"summary":"Port details (API object `passport`)","tags":["ports"],"description":"`?format=json` (default) returns the port details document; `?format=card` returns a self-contained `text/html` share card.","parameters":[{"schema":{"type":"string","enum":["json","card"],"default":"json"},"in":"query","name":"format","required":false},{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"port_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"operator":{"type":"string","enum":["owned","partner"]},"evidence":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"carrier":{"type":"object","properties":{"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"asn":{"type":["string","null"]},"gateway_region":{"type":["string","null"]},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["name","mcc_mnc","asn","gateway_region","ip_stack"],"additionalProperties":false},"sim_contract_class":{"type":"string","enum":["prepaid","business","m2m"]},"egress":{"type":"object","properties":{"v4":{"type":["string","null"]},"v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"type":"string","format":"date-time"}},"required":["v4","v6_prefix","v4_is_nat64","ip_since"],"additionalProperties":false},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"city":{"type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","minLength":1},"country":{"type":["string","null"]},"region":{"type":["string","null"]},"city":{"type":["string","null"]}},"required":["provider","country","region","city"],"additionalProperties":false}}},"required":["country","region","city","sources"],"additionalProperties":false},"reputation":{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"providers":{"type":"array","items":{"type":"string"}},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["flagged","hosting","providers","scored_at"],"additionalProperties":false},"rotation":{"type":"object","properties":{"interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_30d":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"first_attempt_success_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"p50_ms":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["count","first_attempt_success_pct","p50_ms"],"additionalProperties":false}},"required":["interval_s","sticky_until","last_rotation_at","last_30d"],"additionalProperties":false},"uptime":{"type":"object","properties":{"d30_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"d90_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"probes_30d":{"type":"integer","minimum":0}},"required":["d30_pct","d90_pct","probes_30d"],"additionalProperties":false},"throughput":{"type":"object","properties":{"last_sample_mbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"p50_7d_mbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["last_sample_mbps","p50_7d_mbps"],"additionalProperties":false},"usage":{"type":"object","properties":{"bytes_today":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes_today","cap_bytes"],"additionalProperties":false},"sessions":{"type":"object","properties":{"concurrent_now":{"type":"integer","minimum":0},"peak_24h":{"type":"integer","minimum":0}},"required":["concurrent_now","peak_24h"],"additionalProperties":false},"ip_shared_with_own_ports":{"type":"integer","minimum":0},"exclusivity":{"type":"string","enum":["modem+sim+credentials"]},"receipts_url":{"type":"string","format":"uri"}},"required":["port_id","generated_at","site_code","country","operator","carrier","sim_contract_class","egress","geo","reputation","rotation","uptime","throughput","usage","sessions","ip_shared_with_own_ports","exclusivity","receipts_url"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/passport/share":{"post":{"summary":"Create (or return) the public share link for these port details","tags":["ports"],"description":"The public document never includes credentials. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"public_token":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"}},"required":["public_token","url"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ports/{id}/receipts":{"get":{"summary":"Rotation log of a port: signed rotation records, newest first","tags":["ports"],"description":"Only rotation records signed since your subscription started are visible. Cursor-paginated: `?limit=` (default 50, max 200) and `?cursor=` from the previous `next_cursor`.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"cursor","required":false},{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"port_id":{"type":"string"},"site_code":{"type":"string","minLength":1},"requested_by":{"type":"string","enum":["manual","api","token","schedule","health","migration"]},"old_ip4":{"type":["string","null"]},"new_ip4":{"type":["string","null"]},"old_ip6_prefix":{"type":["string","null"]},"new_ip6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"rotated":{"type":"boolean"},"attempts":{"type":"integer","minimum":0},"elapsed_ms":{"type":"integer","minimum":0},"reason":{"type":"string","enum":["ok","carrier_sticky","attach_timeout","driver_error","cooldown"]},"driver":{"type":"string","minLength":1},"carrier":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"asn":{"type":["string","null"]},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"sources":{"type":"integer","minimum":0}},"required":["country","region","sources"],"additionalProperties":false},"reputation":{"anyOf":[{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["flagged","hosting","scored_at"],"additionalProperties":false},{"type":"null"}]},"sticky_window_s":{"type":"integer","minimum":0},"ip_shared_with_own_ports":{"type":"integer","minimum":0},"sim_contract_class":{"type":"string","enum":["prepaid","business","m2m"]},"signed_at":{"type":"string","format":"date-time"},"key_id":{"type":"string","pattern":"^[a-z0-9-]+-\\d{4}$"},"attestation":{"type":"string","enum":["signed","observed"]},"sig":{"type":"string","pattern":"^[A-Za-z0-9+/]+={0,2}$","minLength":86}},"required":["id","port_id","site_code","requested_by","old_ip4","new_ip4","old_ip6_prefix","new_ip6_prefix","v4_is_nat64","rotated","attempts","elapsed_ms","reason","driver","carrier","mcc_mnc","asn","geo","reputation","sticky_window_s","ip_shared_with_own_ports","sim_contract_class","signed_at","key_id","sig"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/receipts/{id}":{"get":{"summary":"One rotation record by id (`rot_...`)","tags":["ports"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"port_id":{"type":"string"},"site_code":{"type":"string","minLength":1},"requested_by":{"type":"string","enum":["manual","api","token","schedule","health","migration"]},"old_ip4":{"type":["string","null"]},"new_ip4":{"type":["string","null"]},"old_ip6_prefix":{"type":["string","null"]},"new_ip6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"rotated":{"type":"boolean"},"attempts":{"type":"integer","minimum":0},"elapsed_ms":{"type":"integer","minimum":0},"reason":{"type":"string","enum":["ok","carrier_sticky","attach_timeout","driver_error","cooldown"]},"driver":{"type":"string","minLength":1},"carrier":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"asn":{"type":["string","null"]},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"sources":{"type":"integer","minimum":0}},"required":["country","region","sources"],"additionalProperties":false},"reputation":{"anyOf":[{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["flagged","hosting","scored_at"],"additionalProperties":false},{"type":"null"}]},"sticky_window_s":{"type":"integer","minimum":0},"ip_shared_with_own_ports":{"type":"integer","minimum":0},"sim_contract_class":{"type":"string","enum":["prepaid","business","m2m"]},"signed_at":{"type":"string","format":"date-time"},"key_id":{"type":"string","pattern":"^[a-z0-9-]+-\\d{4}$"},"attestation":{"type":"string","enum":["signed","observed"]},"sig":{"type":"string","pattern":"^[A-Za-z0-9+/]+={0,2}$","minLength":86}},"required":["id","port_id","site_code","requested_by","old_ip4","new_ip4","old_ip6_prefix","new_ip6_prefix","v4_is_nat64","rotated","attempts","elapsed_ms","reason","driver","carrier","mcc_mnc","asn","geo","reputation","sticky_window_s","ip_shared_with_own_ports","sim_contract_class","signed_at","key_id","sig"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/usage":{"get":{"summary":"Usage time series for one port","tags":["billing"],"description":"Defaults: `granularity=hour`, `to=now`, `from` = 6 h (minute), 24 h (hour) or 30 d (day) before `to`.","parameters":[{"schema":{"type":"string"},"in":"query","name":"port_id","required":true},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"from","required":false},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"to","required":false},{"schema":{"type":"string","enum":["minute","hour","day"],"default":"hour"},"in":"query","name":"granularity","required":false}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"ts":{"type":"string","format":"date-time"},"bytes_in":{"type":"integer","minimum":0},"bytes_out":{"type":"integer","minimum":0},"sessions_peak":{"type":"integer","minimum":0},"conns_new":{"type":"integer","minimum":0},"rotations":{"type":"integer","minimum":0}},"required":["ts","bytes_in","bytes_out","sessions_peak","conns_new","rotations"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/invoices":{"get":{"summary":"Invoices","tags":["billing"],"description":"Cursor-paginated: `?limit=` (default 50, max 200) and `?cursor=` from the previous `next_cursor`.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"cursor","required":false}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"provider":{"type":"string","enum":["manual","paddle","stripe","coingate","sepa"]},"total_cents":{"type":"integer"},"currency":{"type":"string","enum":["EUR","USD"]},"state":{"type":"string","enum":["draft","open","paid","void"]},"due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lines":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer"},"total_cents":{"type":"integer"},"ref_type":{"type":["string","null"],"default":null},"ref_id":{"type":["string","null"],"default":null}},"required":["description","quantity","unit_cents","total_cents"],"additionalProperties":false}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","provider","total_cents","currency","state","due_at","lines","created_at","updated_at"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/ledger":{"get":{"summary":"Ledger entries (charges, SLA credits, refunds)","tags":["billing"],"description":"Cursor-paginated: `?limit=` (default 50, max 200) and `?cursor=` from the previous `next_cursor`.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"cursor","required":false}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"org_id":{"type":"string"},"type":{"type":"string","enum":["charge","credit_sla","credit_support","refund","payout","topup","order_debit","affiliate_credit","adjustment"]},"amount_cents":{"type":"integer"},"ref_type":{"type":["string","null"]},"ref_id":{"type":["string","null"]},"idempotency_key":{"type":"string","minLength":1},"created_at":{"type":"string","format":"date-time"}},"required":["id","org_id","type","amount_cents","ref_type","ref_id","idempotency_key","created_at"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/leases":{"post":{"summary":"Leases (reserved, not in v0)","tags":["billing"],"security":[{"ApiKey":[]}],"responses":{"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/projects":{"get":{"summary":"List projects","tags":["projects"],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100},"monthly_budget_cents":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"spent_cents_mtd":{"type":"integer","minimum":0},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","name","monthly_budget_cents","spent_cents_mtd","created_at","updated_at"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create a project","tags":["projects"],"description":"Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"monthly_budget_cents":{"type":"integer","minimum":0}},"required":["name"],"additionalProperties":false}}}},"security":[{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100},"monthly_budget_cents":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"spent_cents_mtd":{"type":"integer","minimum":0},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","name","monthly_budget_cents","spent_cents_mtd","created_at","updated_at"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/projects/{id}/keys":{"post":{"summary":"Mint an API key for a project","tags":["projects"],"description":"The secret is shown once. A key can only grant scopes it holds itself. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scopes":{"type":"array","items":{"type":"string","enum":["ports:read","ports:write","billing:read","webhooks:write","kyb:write","digital:read","digital:write"]},"minItems":1},"expires_at":{"type":"string","format":"date-time"}},"required":["scopes"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"prefix":{"type":"string","minLength":1},"secret":{"type":"string","minLength":1},"scopes":{"type":"array","items":{"type":"string","enum":["ports:read","ports:write","billing:read","webhooks:write","kyb:write","digital:read","digital:write"]}}},"required":["id","prefix","secret","scopes"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/keys":{"get":{"summary":"List the API keys of your organisation","tags":["projects"],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"project_id":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","project_id","prefix","scopes","expires_at","last_used_at","revoked_at","created_at"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}}}}},"/v1/keys/{id}":{"delete":{"summary":"Revoke an API key","tags":["projects"],"description":"Revocation is immediate and permanent. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"204":{"description":"Revoked"},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/webhooks":{"get":{"summary":"List active webhooks","tags":["webhooks"],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["ip.changed","port.down","port.restored","port.migrated","rotation.failed","usage.80pct","usage.cap_reached","subscription.renewing","subscription.expired","sla.credit_posted","kyb.updated","order.paid","order.fulfilled","order.item_failed","wallet.credited","wallet.debited","kyb.required"]}},"active":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","url","events","active","created_at","updated_at"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}}}},"post":{"summary":"Register a webhook endpoint","tags":["webhooks"],"description":"The signing secret is shown once; deliveries carry `Portproof-Signature: t=<unix>,v1=<hex hmac-sha256(secret, t + \".\" + body)>`. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["ip.changed","port.down","port.restored","port.migrated","rotation.failed","usage.80pct","usage.cap_reached","subscription.renewing","subscription.expired","sla.credit_posted","kyb.updated","order.paid","order.fulfilled","order.item_failed","wallet.credited","wallet.debited","kyb.required"]},"minItems":1}},"required":["url","events"],"additionalProperties":false}}}},"security":[{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["ip.changed","port.down","port.restored","port.migrated","rotation.failed","usage.80pct","usage.cap_reached","subscription.renewing","subscription.expired","sla.credit_posted","kyb.updated","order.paid","order.fulfilled","order.item_failed","wallet.credited","wallet.debited","kyb.required"]}},"secret":{"type":"string","minLength":1}},"required":["id","url","events","secret"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/webhooks/{id}":{"delete":{"summary":"Delete a webhook","tags":["webhooks"],"description":"Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"204":{"description":"Deleted"},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/webhooks/{id}/test":{"post":{"summary":"Queue a test delivery","tags":["webhooks"],"description":"Sends a `webhook.test` event on the worker's next tick. Requires an `Idempotency-Key` header (CONTRACT §1): the same key with the same body within 24 h replays the stored response; a different body returns 409 `idempotency_conflict`.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"delivery_id":{"type":"string","minLength":1}},"required":["delivery_id"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/kyb":{"post":{"summary":"New identity verification requests are no longer accepted","tags":["kyb"],"description":"Portproof purchases do not require identity verification. Existing historical records remain readable through GET /kyb. No submitted identity data is saved by this retired operation.","deprecated":true,"security":[{"ApiKey":[]}],"responses":{"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}},"get":{"summary":"Historical tier and pending request","tags":["kyb"],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"tier":{"type":"string","enum":["t0","t1","t2","t3"]},"pending":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1},"org_id":{"type":"string"},"requested_tier":{"type":"string","enum":["t0","t1","t2","t3"]},"data":{"type":"object","properties":{"requested_tier":{"type":"string","enum":["t1","t2"]},"legal_name":{"type":"string","minLength":2,"maxLength":200},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"registry_id":{"type":"string","minLength":1,"maxLength":64},"vat_id":{"type":"string","minLength":1,"maxLength":32},"address":{"type":"string","minLength":5,"maxLength":500},"ubo_declaration":{"type":"boolean"},"use_case":{"type":"string","minLength":10,"maxLength":2000}},"required":["requested_tier","legal_name","country","address","ubo_declaration","use_case"],"additionalProperties":false},"state":{"type":"string","enum":["pending","approved","rejected"]},"reviewed_by":{"type":["string","null"]},"notes":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","org_id","requested_tier","data","state","reviewed_by","notes","created_at","updated_at"],"additionalProperties":false},{"type":"null"}]}},"required":["tier","pending"],"additionalProperties":false}}}}}}},"/v1/status":{"get":{"summary":"Platform, site and carrier status","tags":["status"],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"updated_at":{"type":"string","format":"date-time"},"platform":{"type":"string","enum":["ok","degraded","outage"]},"sites":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"operator":{"type":"string","enum":["owned","partner"]},"status":{"type":"string","enum":["provisioning","live","degraded","offline"]},"ports_live":{"type":"integer","minimum":0},"uptime_30d_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]}},"required":["code","country","operator","status","ports_live","uptime_30d_pct"],"additionalProperties":false}},"carriers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"uptime_30d_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rotation_first_attempt_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rotation_p50_ms":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"rotation_floor_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]}},"required":["id","name","country","uptime_30d_pct","rotation_first_attempt_pct","rotation_p50_ms","rotation_floor_pct"],"additionalProperties":false}},"incidents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"scope":{"type":"string","enum":["port","site","carrier","platform"]},"scope_id":{"type":["string","null"]},"title":{"type":"string","minLength":1},"cause":{"type":["string","null"]},"started_at":{"type":"string","format":"date-time"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sla_excluded":{"type":"boolean"},"public":{"type":"boolean"}},"required":["id","scope","scope_id","title","cause","started_at","resolved_at","sla_excluded","public"],"additionalProperties":false}},"support":{"type":"object","properties":{"median_first_response_min_30d":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["median_first_response_min_30d"],"additionalProperties":false},"traffic":{"type":"object","properties":{"health":{"anyOf":[{"type":"string","enum":["ok","degraded","down","unknown"]},{"type":"null"}]},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"countries_generated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["health","last_sync_at","countries_generated_at"],"additionalProperties":false}},"required":["updated_at","platform","sites","carriers","incidents","support","traffic"],"additionalProperties":false}}}}}}},"/v1/status/carriers/{id}/history":{"get":{"summary":"Daily uptime and first-attempt rotation success for a carrier","tags":["status"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":365,"default":90},"in":"query","name":"days","required":false},{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"carrier_id":{"type":"string"},"days":{"type":"integer","minimum":1},"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"uptime_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rotation_first_attempt_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]}},"required":["date","uptime_pct","rotation_first_attempt_pct"],"additionalProperties":false}}},"required":["carrier_id","days","data"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/sla/{month}":{"get":{"summary":"SLA periods for a month (YYYY-MM), computed on demand","tags":["status"],"description":"Credits show `posted_at: null` until a founder posts them (`POST /admin/sla/{month}/post`).","parameters":[{"schema":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},"in":"path","name":"month","required":true}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"org_id":{"type":"string"},"port_id":{"type":"string"},"month":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},"uptime_pct":{"type":"number","minimum":0,"maximum":100},"rotation_success_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"credit_pct":{"type":"number","minimum":0,"maximum":100},"credit_cents":{"type":"integer","minimum":0},"posted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"evidence":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{}},{"type":"object","additionalProperties":{}}]}}},"required":["id","org_id","port_id","month","uptime_pct","rotation_success_pct","credit_pct","credit_cents","posted_at","evidence"],"additionalProperties":false}},"total_credit_cents":{"type":"integer","minimum":0}},"required":["month","ports","total_credit_cents"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/auth/signup":{"post":{"summary":"Create an account and session, retaining optional email confirmation","tags":["auth"],"description":"Rate-limited per IP and per email. Sets the `pp_session` (httpOnly) and `pp_csrf` cookies; send the `pp_csrf` value as `X-CSRF-Token` on every later state change.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":254},"password":{"type":"string","minLength":10,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":120},"referral_code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"marketing_opt_in":{"type":"boolean","default":false},"verification_return":{"type":"string","enum":["checkout","refunds"],"description":"Continue to the named checkout or refund-request page after email verification; otherwise continue to the dashboard."}},"required":["email","password"],"additionalProperties":false}}}},"security":[],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","format":"email","maxLength":254},"email_verified":{"type":"boolean"},"name":{"type":["string","null"]},"locale":{"type":"string","pattern":"^[a-z]{2}(-[A-Z]{2})?$"},"referral_code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"marketing_opt_in":{"type":"boolean"},"status":{"type":"string","enum":["active","suspended","closed"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","org_id","email","email_verified","name","locale","referral_code","marketing_opt_in","status","created_at"],"additionalProperties":false},"verification_sent":{"type":"boolean"}},"required":["customer","verification_sent"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/auth/login":{"post":{"summary":"Sign in with email and password","tags":["auth"],"description":"Rate-limited per IP and per email. Sets the `pp_session` (httpOnly) and `pp_csrf` cookies; send the `pp_csrf` value as `X-CSRF-Token` on every later state change.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":254},"password":{"type":"string","minLength":1,"maxLength":200}},"required":["email","password"],"additionalProperties":false}}}},"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","format":"email","maxLength":254},"email_verified":{"type":"boolean"},"name":{"type":["string","null"]},"locale":{"type":"string","pattern":"^[a-z]{2}(-[A-Z]{2})?$"},"referral_code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"marketing_opt_in":{"type":"boolean"},"status":{"type":"string","enum":["active","suspended","closed"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","org_id","email","email_verified","name","locale","referral_code","marketing_opt_in","status","created_at"],"additionalProperties":false}},"required":["customer"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/auth/logout":{"post":{"summary":"Revoke the current session and clear the cookies","tags":["auth"],"security":[{"SessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false}}}}}}},"/v1/auth/verify":{"post":{"summary":"Confirm an email address with the token from the verification mail (also signs in)","tags":["auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","minLength":16,"maxLength":256}},"required":["token"],"additionalProperties":false}}}},"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","format":"email","maxLength":254},"email_verified":{"type":"boolean"},"name":{"type":["string","null"]},"locale":{"type":"string","pattern":"^[a-z]{2}(-[A-Z]{2})?$"},"referral_code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"marketing_opt_in":{"type":"boolean"},"status":{"type":"string","enum":["active","suspended","closed"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","org_id","email","email_verified","name","locale","referral_code","marketing_opt_in","status","created_at"],"additionalProperties":false}},"required":["customer"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/auth/resend-verification":{"post":{"summary":"Send the verification mail again","tags":["auth"],"description":"Requires a signed-in customer. Optional verification_return: \"checkout\" keeps the checkout destination in the email link; no body keeps the default dashboard destination. A definite mail-delivery failure returns 500 internal; an already-verified address succeeds without sending another message. Existing unused, unexpired verification links remain valid.","requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"not":{}},{"anyOf":[{"type":"object","properties":{"verification_return":{"type":"string","enum":["checkout","refunds"],"description":"Continue to the named checkout or refund-request page after email verification; otherwise continue to the dashboard."}},"additionalProperties":false},{"type":"null"}]}]}}}},"security":[{"SessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/auth/forgot":{"post":{"summary":"Send a password-reset mail (always answers ok)","tags":["auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":254}},"required":["email"],"additionalProperties":false}}}},"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/auth/reset":{"post":{"summary":"Set a new password with a reset token (revokes other sessions, signs in)","tags":["auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","minLength":16,"maxLength":256},"password":{"type":"string","minLength":10,"maxLength":200}},"required":["token","password"],"additionalProperties":false}}}},"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","format":"email","maxLength":254},"email_verified":{"type":"boolean"},"name":{"type":["string","null"]},"locale":{"type":"string","pattern":"^[a-z]{2}(-[A-Z]{2})?$"},"referral_code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"marketing_opt_in":{"type":"boolean"},"status":{"type":"string","enum":["active","suspended","closed"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","org_id","email","email_verified","name","locale","referral_code","marketing_opt_in","status","created_at"],"additionalProperties":false}},"required":["customer"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/auth/magic":{"post":{"summary":"Send a one-time sign-in link (always answers ok)","tags":["auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":254}},"required":["email"],"additionalProperties":false}}}},"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/auth/magic/consume":{"post":{"summary":"Exchange a magic-link token for a session","tags":["auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","minLength":16,"maxLength":256}},"required":["token"],"additionalProperties":false}}}},"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","format":"email","maxLength":254},"email_verified":{"type":"boolean"},"name":{"type":["string","null"]},"locale":{"type":"string","pattern":"^[a-z]{2}(-[A-Z]{2})?$"},"referral_code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"marketing_opt_in":{"type":"boolean"},"status":{"type":"string","enum":["active","suspended","closed"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","org_id","email","email_verified","name","locale","referral_code","marketing_opt_in","status","created_at"],"additionalProperties":false}},"required":["customer"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/me":{"get":{"summary":"Current customer, org, KYB tier, wallet and referral summary","tags":["account"],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","format":"email","maxLength":254},"email_verified":{"type":"boolean"},"name":{"type":["string","null"]},"locale":{"type":"string","pattern":"^[a-z]{2}(-[A-Z]{2})?$"},"referral_code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"marketing_opt_in":{"type":"boolean"},"status":{"type":"string","enum":["active","suspended","closed"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","org_id","email","email_verified","name","locale","referral_code","marketing_opt_in","status","created_at"],"additionalProperties":false},"org":{"type":"object","properties":{"id":{"type":"string"},"legal_name":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"vat_id":{"type":["string","null"]},"vat_id_valid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"billing_address":{"anyOf":[{"type":"object","properties":{"line1":{"type":"string","minLength":1,"maxLength":200},"line2":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"default":null},"city":{"type":"string","minLength":1,"maxLength":120},"postal_code":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","pattern":"^[A-Z]{2}$"}},"required":["line1","city","postal_code","country"],"additionalProperties":false},{"type":"null"}]},"country_of_supply":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"kyb_tier":{"type":"string","enum":["t0","t1","t2","t3"]}},"required":["id","legal_name","country","vat_id","vat_id_valid_at","billing_address","country_of_supply","kyb_tier"],"additionalProperties":false},"kyb_tier":{"type":"string","enum":["t0","t1","t2","t3"]},"wallet":{"type":"object","properties":{"balance_cents":{"type":"integer"},"currency":{"type":"string","enum":["EUR","USD"]}},"required":["balance_cents","currency"],"additionalProperties":false},"referral":{"type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"url":{"type":"string","format":"uri"},"earned_cents":{"type":"integer","minimum":0}},"required":["code","url","earned_cents"],"additionalProperties":false}},"required":["customer","org","kyb_tier","wallet","referral"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update name, locale, marketing opt-in","tags":["account"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","minLength":1,"maxLength":120},{"type":"null"}]},"locale":{"type":"string","pattern":"^[a-z]{2}(-[A-Z]{2})?$"},"marketing_opt_in":{"type":"boolean"}},"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","format":"email","maxLength":254},"email_verified":{"type":"boolean"},"name":{"type":["string","null"]},"locale":{"type":"string","pattern":"^[a-z]{2}(-[A-Z]{2})?$"},"referral_code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"marketing_opt_in":{"type":"boolean"},"status":{"type":"string","enum":["active","suspended","closed"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","org_id","email","email_verified","name","locale","referral_code","marketing_opt_in","status","created_at"],"additionalProperties":false}},"required":["customer"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/me/org":{"patch":{"summary":"Update legal name, country, VAT id and billing address","tags":["account"],"description":"The VAT id is checked against VIES when `VIES_ENABLED=true` and the service answers; `vat_id_valid_at` is set on success. Reverse charge applies only to validated EU VAT ids outside Lithuania.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"legal_name":{"type":"string","minLength":2,"maxLength":200},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"vat_id":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{2,12}$"},{"type":"null"}]},"billing_address":{"anyOf":[{"type":"object","properties":{"line1":{"type":"string","minLength":1,"maxLength":200},"line2":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"default":null},"city":{"type":"string","minLength":1,"maxLength":120},"postal_code":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","pattern":"^[A-Z]{2}$"}},"required":["line1","city","postal_code","country"],"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"org":{"type":"object","properties":{"id":{"type":"string"},"legal_name":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"vat_id":{"type":["string","null"]},"vat_id_valid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"billing_address":{"anyOf":[{"type":"object","properties":{"line1":{"type":"string","minLength":1,"maxLength":200},"line2":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"default":null},"city":{"type":"string","minLength":1,"maxLength":120},"postal_code":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","pattern":"^[A-Z]{2}$"}},"required":["line1","city","postal_code","country"],"additionalProperties":false},{"type":"null"}]},"country_of_supply":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"kyb_tier":{"type":"string","enum":["t0","t1","t2","t3"]}},"required":["id","legal_name","country","vat_id","vat_id_valid_at","billing_address","country_of_supply","kyb_tier"],"additionalProperties":false}},"required":["org"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/me/password":{"post":{"summary":"Change the password","tags":["account"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"current":{"type":"string","minLength":1,"maxLength":200},"new":{"type":"string","minLength":10,"maxLength":200}},"required":["current","new"],"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/me/sessions":{"get":{"summary":"Active sessions","tags":["account"],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ip":{"type":["string","null"]},"user_agent":{"type":["string","null"]},"current":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"}},"required":["id","ip","user_agent","current","created_at","expires_at"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/me/sessions/{id}":{"delete":{"summary":"Revoke a session","tags":["account"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/reseller/catalog":{"get":{"summary":"Full reseller catalogue (digital:read), independent of website featured listings","tags":["digital"],"description":"All imported eSIM and SMS categories, including unavailable and discontinued products. Pages use stable SKU tie-breaks; sort supports price_asc, price_desc and title. catalogue reports refresh freshness independently of product availability. Refresh runs every 15 minutes; failed refresh retains the last successful snapshot. Top-up options belong to an owned eSIM. See /docs/sms-esim-api on portproof.org.","parameters":[{"schema":{"type":"string","enum":["esim","sms"]},"in":"query","name":"family","required":true},{"schema":{"type":"string","enum":["price_asc","price_desc","title"]},"in":"query","name":"sort","required":false},{"schema":{"type":"string","maxLength":160},"in":"query","name":"q","required":false},{"schema":{"type":"string","pattern":"^[A-Z]{2}$"},"in":"query","name":"country","required":false},{"schema":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"in":"query","name":"digital_kind","required":false},{"schema":{"type":"integer","minimum":1,"maximum":3650},"in":"query","name":"duration_days","required":false},{"schema":{"type":"string","maxLength":160},"in":"query","name":"service_name","required":false},{"schema":{"type":"string","enum":["true","false"]},"in":"query","name":"available_only","required":false},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"in":"query","name":"limit","required":false}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"products":{"type":"array","items":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false}},"total":{"type":"integer","minimum":0},"page":{"type":"integer","exclusiveMinimum":0},"page_size":{"type":"integer","exclusiveMinimum":0},"has_more":{"type":"boolean"},"catalogue":{"type":"object","properties":{"status":{"type":"string","enum":["current","stale","unknown"]},"last_success_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["status","last_success_at"],"additionalProperties":false},"facets":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"}},"durations":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}},"services":{"type":"array","items":{"type":"string"}}},"required":["countries","durations","services"],"additionalProperties":false}},"required":["products","total","page","page_size","has_more","facets"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/catalog":{"get":{"summary":"Browse digital plans with filters and bounded pages","tags":["catalog"],"parameters":[{"schema":{"type":"string","enum":["esim","sms"]},"in":"query","name":"family","required":true},{"schema":{"type":"string","enum":["price_asc","price_desc","title"]},"in":"query","name":"sort","required":false},{"schema":{"type":"string","maxLength":160},"in":"query","name":"q","required":false},{"schema":{"type":"string","pattern":"^[A-Z]{2}$"},"in":"query","name":"country","required":false},{"schema":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"in":"query","name":"digital_kind","required":false},{"schema":{"type":"integer","minimum":1,"maximum":3650},"in":"query","name":"duration_days","required":false},{"schema":{"type":"string","maxLength":160},"in":"query","name":"service_name","required":false},{"schema":{"type":"string","enum":["true","false"]},"in":"query","name":"available_only","required":false},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"in":"query","name":"limit","required":false}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"products":{"type":"array","items":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false}},"total":{"type":"integer","minimum":0},"page":{"type":"integer","exclusiveMinimum":0},"page_size":{"type":"integer","exclusiveMinimum":0},"has_more":{"type":"boolean"},"catalogue":{"type":"object","properties":{"status":{"type":"string","enum":["current","stale","unknown"]},"last_success_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["status","last_success_at"],"additionalProperties":false},"facets":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"}},"durations":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}},"services":{"type":"array","items":{"type":"string"}}},"required":["countries","durations","services"],"additionalProperties":false}},"required":["products","total","page","page_size","has_more","facets"],"additionalProperties":false}}}}}}},"/v1/catalog":{"get":{"summary":"Sellable products with sell price, evidence level and live availability","tags":["catalog"],"description":"Never exposes upstream cost, markup or source credentials. `evidence` is `signed` for ports on farms running the Portproof agent and `observed` for resold upstream ports. Dedicated ports from the partner network appear only while they are on sale; organisations with early access see them when they call with their session or API key.","parameters":[{"schema":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"in":"query","name":"kind","required":false},{"schema":{"type":"string","pattern":"^[A-Z]{2}$"},"in":"query","name":"country","required":false}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"products":{"type":"array","items":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false}}},"required":["products"],"additionalProperties":false}}}}}}},"/v1/catalog/{sku}":{"get":{"summary":"Product detail with the evidence explanation and sample port details for Own network ports","tags":["catalog"],"description":"Dedicated ports from the partner network appear only while they are on sale; organisations with early access see them when they call with their session or API key.","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"in":"path","name":"sku","required":true}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]},"description":{"type":"string"},"evidence_explanation":{"type":"string","minLength":1},"sample_passport":{"anyOf":[{"type":"object","properties":{"port_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"site_code":{"type":"string","minLength":1},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"operator":{"type":"string","enum":["owned","partner"]},"evidence":{"type":"string","enum":["signed","observed"]},"network":{"type":"string","enum":["own","partner"]},"carrier":{"type":"object","properties":{"name":{"type":"string","minLength":1},"mcc_mnc":{"type":"string","pattern":"^\\d{5,6}$"},"asn":{"type":["string","null"]},"gateway_region":{"type":["string","null"]},"ip_stack":{"type":"string","enum":["v4","v6_464xlat","dual"]}},"required":["name","mcc_mnc","asn","gateway_region","ip_stack"],"additionalProperties":false},"sim_contract_class":{"type":"string","enum":["prepaid","business","m2m"]},"egress":{"type":"object","properties":{"v4":{"type":["string","null"]},"v6_prefix":{"type":["string","null"]},"v4_is_nat64":{"type":"boolean"},"ip_since":{"type":"string","format":"date-time"}},"required":["v4","v6_prefix","v4_is_nat64","ip_since"],"additionalProperties":false},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"city":{"type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","minLength":1},"country":{"type":["string","null"]},"region":{"type":["string","null"]},"city":{"type":["string","null"]}},"required":["provider","country","region","city"],"additionalProperties":false}}},"required":["country","region","city","sources"],"additionalProperties":false},"reputation":{"type":"object","properties":{"flagged":{"type":"boolean"},"hosting":{"type":"boolean"},"providers":{"type":"array","items":{"type":"string"}},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["flagged","hosting","providers","scored_at"],"additionalProperties":false},"rotation":{"type":"object","properties":{"interval_s":{"type":"integer","minimum":0},"sticky_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_rotation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_30d":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"first_attempt_success_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"p50_ms":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["count","first_attempt_success_pct","p50_ms"],"additionalProperties":false}},"required":["interval_s","sticky_until","last_rotation_at","last_30d"],"additionalProperties":false},"uptime":{"type":"object","properties":{"d30_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"d90_pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"probes_30d":{"type":"integer","minimum":0}},"required":["d30_pct","d90_pct","probes_30d"],"additionalProperties":false},"throughput":{"type":"object","properties":{"last_sample_mbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"p50_7d_mbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["last_sample_mbps","p50_7d_mbps"],"additionalProperties":false},"usage":{"type":"object","properties":{"bytes_today":{"type":"integer","minimum":0},"cap_bytes":{"type":"integer","minimum":0}},"required":["bytes_today","cap_bytes"],"additionalProperties":false},"sessions":{"type":"object","properties":{"concurrent_now":{"type":"integer","minimum":0},"peak_24h":{"type":"integer","minimum":0}},"required":["concurrent_now","peak_24h"],"additionalProperties":false},"ip_shared_with_own_ports":{"type":"integer","minimum":0},"exclusivity":{"type":"string","enum":["modem+sim+credentials"]},"receipts_url":{"type":"string","format":"uri"}},"required":["port_id","generated_at","site_code","country","operator","carrier","sim_contract_class","egress","geo","reputation","rotation","uptime","throughput","usage","sessions","ip_shared_with_own_ports","exclusivity","receipts_url"],"additionalProperties":false},{"type":"null"}]},"terms":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"}},"required":["term","sell_cents"],"additionalProperties":false}},"includes":{"type":"array","items":{"type":"string"}}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health","description","evidence_explanation","sample_passport","terms","includes"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/prices/{sku}":{"get":{"summary":"Current price for one digital SKU (digital:read)","tags":["digital"],"description":"Account VAT rules and the same Portproof selling price as checkout. This is a snapshot, not a stock reservation or expiring guaranteed quote. Confirm total_cents with POST /v1/digital/purchases.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":160},"in":"path","name":"sku","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"sku":{"type":"string"},"quantity":{"type":"number","enum":[1]},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"vat_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR"]}},"required":["sku","quantity","unit_cents","total_cents","vat_cents","currency"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/purchases":{"post":{"summary":"Buy one SMS or eSIM product from wallet (digital:write; spends funds)","tags":["digital"],"description":"Isolated purchase: never reads or clears the browser cart. Required Idempotency-Key (1–200 characters), scoped to this customer and endpoint. Same key/SKU/expected total replays the current order, including concurrent requests; changed SKU or total is 409 idempotency_conflict. Server rechecks the final EUR total, availability and balance under purchase locks. No coupon field; existing checkout coupon handling is unchanged. Paid means accepted for fulfilment, not delivered. See https://portproof.org/docs/sms-esim-api.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sku":{"type":"string","minLength":1,"maxLength":160},"expected_total_cents":{"type":"integer","minimum":0},"accept_terms":{"type":"boolean","enum":[true]}},"required":["sku","expected_total_cents","accept_terms"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"header","name":"idempotency-key","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["wallet"]},"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"payment_id":{"type":"string"},"replayed":{"type":"boolean"}},"required":["method","order","payment_id","replayed"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/assets":{"get":{"tags":["digital"],"parameters":[{"schema":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"in":"query","name":"kind","required":false},{"schema":{"type":"string","enum":["esim","sms"]},"in":"query","name":"family","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":30},"in":"query","name":"limit","required":false}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"title":{"type":"string"},"status":{"type":"string","enum":["processing","active","code_received","completed","expired","cancelled","refunded","unknown"]},"order_id":{"type":"string"},"order_item_id":{"type":"string"},"product_sku":{"type":"string"},"unit":{"type":"integer","exclusiveMinimum":0},"details":{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},"phone_number":{"type":["string","null"]},"iccid":{"type":["string","null"]},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sync_state":{"type":"string","enum":["current","stale","unknown"]},"installation_available":{"type":"boolean"},"usage":{"anyOf":[{"type":"object","properties":{"remaining_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"used_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"total_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["remaining_gb","used_gb","total_gb","updated_at"],"additionalProperties":false},{"type":"null"}]},"actions":{"type":"array","items":{"type":"string","enum":["esim_topup","sms_reuse","sms_paid_reuse","sms_complete","sms_cancel","sms_rerent"]}},"auto_renew":{"type":"boolean"},"attention":{"type":["string","null"]}},"required":["id","kind","title","status","order_id","order_item_id","product_sku","unit","details","phone_number","iccid","expires_at","created_at","updated_at","last_synced_at","sync_state","installation_available","usage","actions","auto_renew","attention"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/assets/{id}":{"get":{"tags":["digital"],"description":"Requires digital:read for GET and refresh; digital:write for quotes and execute. Owned resources only. Asset, installation and message GETs read saved data; QR, top-up options, quotes, execute and refresh can contact the product service.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"asset":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"title":{"type":"string"},"status":{"type":"string","enum":["processing","active","code_received","completed","expired","cancelled","refunded","unknown"]},"order_id":{"type":"string"},"order_item_id":{"type":"string"},"product_sku":{"type":"string"},"unit":{"type":"integer","exclusiveMinimum":0},"details":{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},"phone_number":{"type":["string","null"]},"iccid":{"type":["string","null"]},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sync_state":{"type":"string","enum":["current","stale","unknown"]},"installation_available":{"type":"boolean"},"usage":{"anyOf":[{"type":"object","properties":{"remaining_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"used_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"total_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["remaining_gb","used_gb","total_gb","updated_at"],"additionalProperties":false},{"type":"null"}]},"actions":{"type":"array","items":{"type":"string","enum":["esim_topup","sms_reuse","sms_paid_reuse","sms_complete","sms_cancel","sms_rerent"]}},"auto_renew":{"type":"boolean"},"attention":{"type":["string","null"]}},"required":["id","kind","title","status","order_id","order_item_id","product_sku","unit","details","phone_number","iccid","expires_at","created_at","updated_at","last_synced_at","sync_state","installation_available","usage","actions","auto_renew","attention"],"additionalProperties":false}},"required":["asset"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/assets/{id}/installation":{"get":{"tags":["digital"],"description":"Requires digital:read for GET and refresh; digital:write for quotes and execute. Owned resources only. Asset, installation and message GETs read saved data; QR, top-up options, quotes, execute and refresh can contact the product service.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"installation":{"type":"object","properties":{"activation_code":{"type":["string","null"]},"smdp_address":{"type":["string","null"]},"lpa_uri":{"type":["string","null"]},"qr_url":{"type":["string","null"]},"iccid":{"type":["string","null"]}},"required":["activation_code","smdp_address","lpa_uri","qr_url","iccid"],"additionalProperties":false}},"required":["installation"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/assets/{id}/qr.png":{"get":{"tags":["digital"],"description":"Requires digital:read for GET and refresh; digital:write for quotes and execute. Owned resources only. Asset, installation and message GETs read saved data; QR, top-up options, quotes, execute and refresh can contact the product service.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response"}}}},"/v1/digital/assets/{id}/messages":{"get":{"tags":["digital"],"description":"Requires digital:read for GET and refresh; digital:write for quotes and execute. Owned resources only. Asset, installation and message GETs read saved data; QR, top-up options, quotes, execute and refresh can contact the product service.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":["string","null"]},"code":{"type":["string","null"]},"content_withheld":{"type":"boolean"},"received_at":{"type":"string","format":"date-time"}},"required":["id","text","code","content_withheld","received_at"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["data","next_cursor","last_synced_at"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/assets/{id}/refresh":{"post":{"tags":["digital"],"description":"Requires digital:read for GET and refresh; digital:write for quotes and execute. Owned resources only. Asset, installation and message GETs read saved data; QR, top-up options, quotes, execute and refresh can contact the product service.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"asset":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"title":{"type":"string"},"status":{"type":"string","enum":["processing","active","code_received","completed","expired","cancelled","refunded","unknown"]},"order_id":{"type":"string"},"order_item_id":{"type":"string"},"product_sku":{"type":"string"},"unit":{"type":"integer","exclusiveMinimum":0},"details":{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},"phone_number":{"type":["string","null"]},"iccid":{"type":["string","null"]},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sync_state":{"type":"string","enum":["current","stale","unknown"]},"installation_available":{"type":"boolean"},"usage":{"anyOf":[{"type":"object","properties":{"remaining_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"used_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"total_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["remaining_gb","used_gb","total_gb","updated_at"],"additionalProperties":false},{"type":"null"}]},"actions":{"type":"array","items":{"type":"string","enum":["esim_topup","sms_reuse","sms_paid_reuse","sms_complete","sms_cancel","sms_rerent"]}},"auto_renew":{"type":"boolean"},"attention":{"type":["string","null"]}},"required":["id","kind","title","status","order_id","order_item_id","product_sku","unit","details","phone_number","iccid","expires_at","created_at","updated_at","last_synced_at","sync_state","installation_available","usage","actions","auto_renew","attention"],"additionalProperties":false}},"required":["asset"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/assets/{id}/topups":{"get":{"tags":["digital"],"description":"Requires digital:read for GET and refresh; digital:write for quotes and execute. Owned resources only. Asset, installation and message GETs read saved data; QR, top-up options, quotes, execute and refresh can contact the product service.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string"},"title":{"type":"string"},"details":{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR"]}},"required":["product_id","title","details","total_cents","currency"],"additionalProperties":false}},"available":{"type":"boolean"}},"required":["data","available"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/assets/{id}/quotes":{"post":{"tags":["digital"],"description":"Requires digital:read for GET and refresh; digital:write for quotes and execute. Owned resources only. Asset, installation and message GETs read saved data; QR, top-up options, quotes, execute and refresh can contact the product service.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["esim_topup","sms_reuse","sms_paid_reuse","sms_complete","sms_cancel","sms_rerent"]},"product_id":{"type":"string","maxLength":128}},"required":["action"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"quote":{"type":"object","properties":{"id":{"type":"string"},"asset_id":{"type":"string"},"action":{"type":"string","enum":["esim_topup","sms_reuse","sms_paid_reuse","sms_complete","sms_cancel","sms_rerent"]},"title":{"type":"string"},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR"]},"expires_at":{"type":"string","format":"date-time"},"refund_cents":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"default":null}},"required":["id","asset_id","action","title","total_cents","currency","expires_at"],"additionalProperties":false}},"required":["quote"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/assets/{id}/execute":{"post":{"tags":["digital"],"description":"Requires digital:write and Idempotency-Key (1–255 printable ASCII characters). Paid actions spend wallet funds. Send quote_id, exact expected_total_cents, confirm:true and accept_terms:true. Same key/body replays the durable operation; changed body conflicts. Quotes expire after five minutes; pending/unknown outcomes require reconciliation, never a new purchase key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"quote_id":{"type":"string"},"expected_total_cents":{"type":"integer","minimum":0},"confirm":{"type":"boolean","enum":[true]},"accept_terms":{"type":"boolean","enum":[true]}},"required":["quote_id","expected_total_cents","confirm","accept_terms"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object","properties":{"id":{"type":"string"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"action":{"type":"string"},"state":{"type":"string","enum":["pending","submitted","succeeded","failed","unknown"]},"charged_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR"]},"attention":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"receipt_url":{"type":["string","null"]}},"required":["id","asset_id","action","state","charged_cents","currency","attention","created_at"],"additionalProperties":false},"asset":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"title":{"type":"string"},"status":{"type":"string","enum":["processing","active","code_received","completed","expired","cancelled","refunded","unknown"]},"order_id":{"type":"string"},"order_item_id":{"type":"string"},"product_sku":{"type":"string"},"unit":{"type":"integer","exclusiveMinimum":0},"details":{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},"phone_number":{"type":["string","null"]},"iccid":{"type":["string","null"]},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sync_state":{"type":"string","enum":["current","stale","unknown"]},"installation_available":{"type":"boolean"},"usage":{"anyOf":[{"type":"object","properties":{"remaining_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"used_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"total_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["remaining_gb","used_gb","total_gb","updated_at"],"additionalProperties":false},{"type":"null"}]},"actions":{"type":"array","items":{"type":"string","enum":["esim_topup","sms_reuse","sms_paid_reuse","sms_complete","sms_cancel","sms_rerent"]}},"auto_renew":{"type":"boolean"},"attention":{"type":["string","null"]}},"required":["id","kind","title","status","order_id","order_item_id","product_sku","unit","details","phone_number","iccid","expires_at","created_at","updated_at","last_synced_at","sync_state","installation_available","usage","actions","auto_renew","attention"],"additionalProperties":false},{"type":"null"}]}},"required":["operation","asset"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/digital/operations/{id}":{"get":{"tags":["digital"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object","properties":{"id":{"type":"string"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"action":{"type":"string"},"state":{"type":"string","enum":["pending","submitted","succeeded","failed","unknown"]},"charged_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR"]},"attention":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"receipt_url":{"type":["string","null"]}},"required":["id","asset_id","action","state","charged_cents","currency","attention","created_at"],"additionalProperties":false},"asset":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"title":{"type":"string"},"status":{"type":"string","enum":["processing","active","code_received","completed","expired","cancelled","refunded","unknown"]},"order_id":{"type":"string"},"order_item_id":{"type":"string"},"product_sku":{"type":"string"},"unit":{"type":"integer","exclusiveMinimum":0},"details":{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},"phone_number":{"type":["string","null"]},"iccid":{"type":["string","null"]},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sync_state":{"type":"string","enum":["current","stale","unknown"]},"installation_available":{"type":"boolean"},"usage":{"anyOf":[{"type":"object","properties":{"remaining_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"used_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"total_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["remaining_gb","used_gb","total_gb","updated_at"],"additionalProperties":false},{"type":"null"}]},"actions":{"type":"array","items":{"type":"string","enum":["esim_topup","sms_reuse","sms_paid_reuse","sms_complete","sms_cancel","sms_rerent"]}},"auto_renew":{"type":"boolean"},"attention":{"type":["string","null"]}},"required":["id","kind","title","status","order_id","order_item_id","product_sku","unit","details","phone_number","iccid","expires_at","created_at","updated_at","last_synced_at","sync_state","installation_available","usage","actions","auto_renew","attention"],"additionalProperties":false},{"type":"null"}]}},"required":["operation","asset"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"501":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/cart":{"get":{"summary":"Current cart","tags":["cart"],"description":"Carts of signed-out visitors are keyed by the `pp_cart` cookie (set on first write) and merged into the customer cart at login.","security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"cart":{"type":"object","properties":{"id":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1,"maximum":1000},"term_override":{"anyOf":[{"type":"string","enum":["monthly","weekly","daily","gb","none"]},{"type":"null"}]},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0}},"required":["id","product","quantity","term_override","unit_cents","total_cents"],"additionalProperties":false}},"subtotal_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"requires_kyb":{"type":"boolean"},"expires_at":{"type":"string","format":"date-time"}},"required":["id","items","subtotal_cents","currency","requires_kyb","expires_at"],"additionalProperties":false}},"required":["cart"],"additionalProperties":false}}}}}}},"/v1/cart/items":{"post":{"summary":"Add a product (by SKU) to the cart","tags":["cart"],"description":"Carts of signed-out visitors are keyed by the `pp_cart` cookie (set on first write) and merged into the customer cart at login. A signed-in customer who already bought the trial (or holds an unpaid trial order) gets 409 `trial_already_used` for `traffic-trial`. A dedicated port from the partner network is sold for its own term only (no `term_override`; each term is its own SKU), a few units per line, and only while it is on sale.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"quantity":{"type":"integer","minimum":1,"maximum":1000,"default":1},"term_override":{"type":"string","enum":["monthly","weekly","daily","gb","none"]}},"required":["sku"],"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"cart":{"type":"object","properties":{"id":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1,"maximum":1000},"term_override":{"anyOf":[{"type":"string","enum":["monthly","weekly","daily","gb","none"]},{"type":"null"}]},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0}},"required":["id","product","quantity","term_override","unit_cents","total_cents"],"additionalProperties":false}},"subtotal_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"requires_kyb":{"type":"boolean"},"expires_at":{"type":"string","format":"date-time"}},"required":["id","items","subtotal_cents","currency","requires_kyb","expires_at"],"additionalProperties":false}},"required":["cart"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/cart/items/{id}":{"patch":{"summary":"Change quantity or term of a cart line","tags":["cart"],"description":"A dedicated port from the partner network is sold for its own term only (no `term_override`; each term is its own SKU), a few units per line, and only while it is on sale.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"quantity":{"type":"integer","minimum":1,"maximum":1000},"term_override":{"anyOf":[{"type":"string","enum":["monthly","weekly","daily","gb","none"]},{"type":"null"}]}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"cart":{"type":"object","properties":{"id":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1,"maximum":1000},"term_override":{"anyOf":[{"type":"string","enum":["monthly","weekly","daily","gb","none"]},{"type":"null"}]},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0}},"required":["id","product","quantity","term_override","unit_cents","total_cents"],"additionalProperties":false}},"subtotal_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"requires_kyb":{"type":"boolean"},"expires_at":{"type":"string","format":"date-time"}},"required":["id","items","subtotal_cents","currency","requires_kyb","expires_at"],"additionalProperties":false}},"required":["cart"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Remove a cart line","tags":["cart"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"cart":{"type":"object","properties":{"id":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1,"maximum":1000},"term_override":{"anyOf":[{"type":"string","enum":["monthly","weekly","daily","gb","none"]},{"type":"null"}]},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0}},"required":["id","product","quantity","term_override","unit_cents","total_cents"],"additionalProperties":false}},"subtotal_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"requires_kyb":{"type":"boolean"},"expires_at":{"type":"string","format":"date-time"}},"required":["id","items","subtotal_cents","currency","requires_kyb","expires_at"],"additionalProperties":false}},"required":["cart"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/checkout/methods":{"get":{"summary":"Payment methods usable right now: configured providers, plus `wallet` when the signed-in customer has a balance","tags":["checkout"],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"methods":{"type":"array","items":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]}}},"required":["methods"],"additionalProperties":false}}}}}}},"/v1/checkout":{"post":{"summary":"Create an order from the cart and start the payment","tags":["checkout"],"description":"`accept_terms: true` is required: it records that the customer accepts the terms and the acceptable-use policy and asks for the service to start at once (optional `terms_version` names the version shown). While `LAUNCH_MODE=waitlist` every cart (traffic or ports) is refused with 409 `launch_waitlist` and stays intact. Response shape depends on `payment_method`: `stripe` / `coingate` / `nowpayments` / `mock` return `redirect_url`; `wallet` debits the balance in a transaction and returns the order as `paid`; `bank_transfer` returns `bank` instructions. When the provider refuses the checkout (502 `payment_provider_error`) the order is cancelled and the cart restored. An open unpaid trial order reserves trial eligibility until it is cancelled or expires. VAT: none while the seller is not registered for VAT (`SELLER_VAT_ID` empty; `GET /v1/launch` reports `seller.vat_registered`); otherwise 21 % for Lithuania and EU customers without a validated VAT id, reverse charge (0 %) for validated EU VAT ids outside LT, 0 % outside the EU. An `Idempotency-Key` header makes the call replay-safe; the same key with a different payment method or coupon is 409 `idempotency_conflict`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":"string","pattern":"^[A-Z0-9-]{3,32}$"},"org_billing":{"type":"object","properties":{"legal_name":{"type":"string","minLength":2,"maxLength":200},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"vat_id":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{2,12}$"},{"type":"null"}]},"billing_address":{"anyOf":[{"type":"object","properties":{"line1":{"type":"string","minLength":1,"maxLength":200},"line2":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"default":null},"city":{"type":"string","minLength":1,"maxLength":120},"postal_code":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","pattern":"^[A-Z]{2}$"}},"required":["line1","city","postal_code","country"],"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},"accept_terms":{"type":"boolean","enum":[true]},"terms_version":{"type":"string","minLength":1,"maxLength":40}},"required":["payment_method","accept_terms"],"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"payment_id":{"type":"string"},"redirect_url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["stripe"]}},"required":["order","payment_id","redirect_url","method"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"payment_id":{"type":"string"},"redirect_url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["coingate"]}},"required":["order","payment_id","redirect_url","method"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"payment_id":{"type":"string"},"redirect_url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["nowpayments"]}},"required":["order","payment_id","redirect_url","method"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"payment_id":{"type":"string"},"redirect_url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["mock"]}},"required":["order","payment_id","redirect_url","method"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"payment_id":{"type":"string"},"method":{"type":"string","enum":["wallet"]}},"required":["order","payment_id","method"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"payment_id":{"type":"string"},"bank":{"type":"object","properties":{"iban":{"type":"string","minLength":15},"bic":{"type":"string","minLength":8,"maxLength":11},"beneficiary":{"type":"string","minLength":1},"reference":{"type":"string","minLength":1},"amount_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"amount":{"type":"string","minLength":1}},"required":["iban","bic","beneficiary","reference","amount_cents","currency","amount"],"additionalProperties":false},"method":{"type":"string","enum":["bank_transfer"]}},"required":["order","payment_id","bank","method"],"additionalProperties":false}]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/wallet/topup":{"post":{"summary":"Top up the wallet (min EUR 5, max EUR 5,000; wallet cap EUR 20,000 for every account)","tags":["wallet"],"description":"Same response shapes as checkout with `kind: topup`. Unused credit is refundable to the original method within 14 days.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount_cents":{"type":"integer","minimum":500,"maximum":500000},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","bank_transfer","mock"]}},"required":["amount_cents","payment_method"],"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"topup":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["topup"]},"amount_cents":{"type":"integer","minimum":500},"currency":{"type":"string","enum":["EUR","USD"]},"provider":{"type":"string","enum":["stripe","coingate","nowpayments","bank_transfer","mock"]},"provider_ref":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","succeeded","failed","refunded","expired"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","kind","amount_cents","currency","provider","provider_ref","status","created_at"],"additionalProperties":false},"redirect_url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["stripe"]}},"required":["topup","redirect_url","method"],"additionalProperties":false},{"type":"object","properties":{"topup":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["topup"]},"amount_cents":{"type":"integer","minimum":500},"currency":{"type":"string","enum":["EUR","USD"]},"provider":{"type":"string","enum":["stripe","coingate","nowpayments","bank_transfer","mock"]},"provider_ref":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","succeeded","failed","refunded","expired"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","kind","amount_cents","currency","provider","provider_ref","status","created_at"],"additionalProperties":false},"redirect_url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["coingate"]}},"required":["topup","redirect_url","method"],"additionalProperties":false},{"type":"object","properties":{"topup":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["topup"]},"amount_cents":{"type":"integer","minimum":500},"currency":{"type":"string","enum":["EUR","USD"]},"provider":{"type":"string","enum":["stripe","coingate","nowpayments","bank_transfer","mock"]},"provider_ref":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","succeeded","failed","refunded","expired"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","kind","amount_cents","currency","provider","provider_ref","status","created_at"],"additionalProperties":false},"redirect_url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["nowpayments"]}},"required":["topup","redirect_url","method"],"additionalProperties":false},{"type":"object","properties":{"topup":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["topup"]},"amount_cents":{"type":"integer","minimum":500},"currency":{"type":"string","enum":["EUR","USD"]},"provider":{"type":"string","enum":["stripe","coingate","nowpayments","bank_transfer","mock"]},"provider_ref":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","succeeded","failed","refunded","expired"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","kind","amount_cents","currency","provider","provider_ref","status","created_at"],"additionalProperties":false},"redirect_url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["mock"]}},"required":["topup","redirect_url","method"],"additionalProperties":false},{"type":"object","properties":{"topup":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["topup"]},"amount_cents":{"type":"integer","minimum":500},"currency":{"type":"string","enum":["EUR","USD"]},"provider":{"type":"string","enum":["stripe","coingate","nowpayments","bank_transfer","mock"]},"provider_ref":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","succeeded","failed","refunded","expired"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","kind","amount_cents","currency","provider","provider_ref","status","created_at"],"additionalProperties":false},"bank":{"type":"object","properties":{"iban":{"type":"string","minLength":15},"bic":{"type":"string","minLength":8,"maxLength":11},"beneficiary":{"type":"string","minLength":1},"reference":{"type":"string","minLength":1},"amount_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"amount":{"type":"string","minLength":1}},"required":["iban","bic","beneficiary","reference","amount_cents","currency","amount"],"additionalProperties":false},"method":{"type":"string","enum":["bank_transfer"]}},"required":["topup","bank","method"],"additionalProperties":false}]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/orders":{"get":{"summary":"Your orders","tags":["orders"],"description":"Cursor-paginated: `?limit=` (default 50, max 200) and `?cursor=` from the previous `next_cursor`.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"cursor","required":false},{"schema":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"in":"query","name":"status","required":false},{"schema":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"in":"query","name":"item_kind","required":false}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"item_count":{"type":"integer","minimum":0},"item_kinds":{"type":"array","items":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]}}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","paid_at","notes","invoice_url","created_at","updated_at","item_count"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/orders/{id}":{"get":{"summary":"One order with items, fulfilment status and credentials once delivered","tags":["orders"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false}},"required":["order"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/orders/{id}/cancel":{"post":{"summary":"Cancel an unpaid order","tags":["orders"],"description":"Paid orders require an email-confirmed refund request and owner review through /refund-requests. This endpoint cannot issue a customer-requested refund.","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"refunded_cents":{"type":"integer","minimum":0}},"required":["order","refunded_cents"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/orders/{id}/invoice":{"get":{"summary":"HTML invoice (PDF later)","tags":["orders"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/refund-requests":{"get":{"summary":"Your refund requests and owner decisions","tags":["orders"],"parameters":[{"schema":{"type":"string","enum":["pending","approved","rejected"]},"in":"query","name":"status","required":false},{"schema":{"type":"string","maxLength":512},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":30},"in":"query","name":"limit","required":false}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["wallet","order","asset","port"]},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"order_number":{"type":["string","null"]},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"port_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"amount_cents":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"currency":{"type":"string","enum":["EUR"]},"reason":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected"]},"review_note":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"reviewed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","kind","order_id","order_number","asset_id","port_id","amount_cents","currency","reason","status","review_note","created_at","reviewed_at"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}},"post":{"summary":"Request owner review of a refund; confirmed email required","tags":["orders"],"description":"Creates a pending request only. No funds move and no service is cancelled. Purchases do not require email confirmation. An optional Idempotency-Key replays the same request; a duplicate pending target returns its existing request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"order_id":{"type":"string"},"asset_id":{"type":"string"},"port_id":{"type":"string"},"amount_cents":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"reason":{"type":"string","minLength":10,"maxLength":2000}},"required":["reason"],"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"request":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["wallet","order","asset","port"]},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"order_number":{"type":["string","null"]},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"port_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"amount_cents":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"currency":{"type":"string","enum":["EUR"]},"reason":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected"]},"review_note":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"reviewed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","kind","order_id","order_number","asset_id","port_id","amount_cents","currency","reason","status","review_note","created_at","reviewed_at"],"additionalProperties":false}},"required":["request"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/wallet":{"get":{"summary":"Wallet balance and ledger entries","tags":["wallet"],"description":"Cursor-paginated: `?limit=` (default 50, max 200) and `?cursor=` from the previous `next_cursor`.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"cursor","required":false}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"balance_cents":{"type":"integer"},"currency":{"type":"string","enum":["EUR","USD"]},"cap_cents":{"type":"integer","minimum":0},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["charge","credit_sla","credit_support","refund","payout","topup","order_debit","affiliate_credit","adjustment"]},"amount_cents":{"type":"integer"},"balance_after_cents":{"anyOf":[{"type":"integer"},{"type":"null"}]},"ref_type":{"type":["string","null"]},"ref_id":{"type":["string","null"]},"description":{"type":["string","null"]},"item_kinds":{"type":"array","items":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]}},"port_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","type","amount_cents","balance_after_cents","ref_type","ref_id","description","created_at"],"additionalProperties":false}},"next_cursor":{"type":["string","null"],"default":null}},"required":["balance_cents","currency","cap_cents","entries"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/bandwidth":{"get":{"summary":"Pool credentials and usage per product","tags":["bandwidth"],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false},"host":{"type":"string","minLength":1},"port":{"type":"integer","exclusiveMinimum":0},"username":{"type":"string","minLength":1},"password":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"gb_purchased":{"type":"number","minimum":0},"gb_used":{"type":"number","minimum":0},"gb_remaining":{"type":"number","minimum":0},"status":{"type":"string","enum":["active","exhausted","revoked"]},"proxy_url":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product","host","port","username","password","gb_purchased","gb_used","gb_remaining","status","proxy_url","created_at","updated_at"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/bandwidth/{id}/regenerate":{"post":{"summary":"Regenerate the pool password","tags":["bandwidth"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true}],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"credential":{"type":"object","properties":{"id":{"type":"string"},"product":{"type":"object","properties":{"availability_note":{"type":["string","null"]},"id":{"type":"string"},"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"stock":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"available":{"type":"boolean"},"supply_health":{"type":"string","enum":["ok","degraded","down","unknown"]},"tiers":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"min_qty":{"type":"integer","minimum":1,"maximum":100000},"unit_cents":{"type":"integer","minimum":0}},"required":["min_qty","unit_cents"],"additionalProperties":false}},{"type":"null"}]},"gb_per_unit":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"once_per_customer":{"type":"boolean"},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["id","sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","stock","available","supply_health"],"additionalProperties":false},"host":{"type":"string","minLength":1},"port":{"type":"integer","exclusiveMinimum":0},"username":{"type":"string","minLength":1},"password":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"gb_purchased":{"type":"number","minimum":0},"gb_used":{"type":"number","minimum":0},"gb_remaining":{"type":"number","minimum":0},"status":{"type":"string","enum":["active","exhausted","revoked"]},"proxy_url":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product","host","port","username","password","gb_purchased","gb_used","gb_remaining","status","proxy_url","created_at","updated_at"],"additionalProperties":false}},"required":["credential"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/affiliate":{"get":{"summary":"Referral code, signups, earned and pending commission","tags":["affiliate"],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z0-9-]{4,32}$"},"url":{"type":"string","format":"uri"},"clicks":{"type":"integer","minimum":0},"signups":{"type":"integer","minimum":0},"earned_cents":{"type":"integer","minimum":0},"pending_cents":{"type":"integer","minimum":0},"terms":{"type":"object","properties":{"first_order_pct":{"type":"number","minimum":0,"maximum":100},"recurring_pct":{"type":"number","minimum":0,"maximum":100},"recurring_months":{"type":"integer","minimum":0},"cap_cents_per_referred":{"type":"integer","minimum":0},"payout_min_cents":{"type":"integer","minimum":0}},"required":["first_order_pct","recurring_pct","recurring_months","cap_cents_per_referred","payout_min_cents"],"additionalProperties":false},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order_id":{"type":"string"},"referred":{"type":"string","minLength":1},"commission_cents":{"type":"integer","minimum":0},"kind":{"type":"string","enum":["first","recurring"]},"credited_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","order_id","referred","commission_cents","kind","credited_at","created_at"],"additionalProperties":false}}},"required":["code","url","clicks","signups","earned_cents","pending_cents","terms","events"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/affiliate/payout-request":{"post":{"summary":"Retired customer payout route","tags":["affiliate"],"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/launch":{"get":{"summary":"Launch mode, configured payment methods and sellable supply (ports and per-GB traffic)","tags":["launch"],"description":"`mode` is `waitlist` while ports are not on sale (buy buttons become \"Notify me\"). `payment_methods` lists only methods whose credentials are configured; `wallet` is per customer and appears in `GET /checkout/methods` instead. `seller` is the configured seller identity (`SELLER_*`, `SUPPORT_EMAIL`, `ABUSE_EMAIL`, `BRAND_NAME`): `type` null means no registered business is claimed, `vat_registered` false means VAT is 0 on every order. `traffic_validity_days` 0 means GB never expire. `ports_on_sale` true means partner ports can be bought by everyone (PORTS_ON_SALE on and not in waitlist mode).","security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["open","waitlist"]},"payment_methods":{"type":"array","items":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]}},"supply":{"type":"object","properties":{"sellable_products":{"type":"integer","minimum":0},"sellable_traffic":{"type":"boolean"},"traffic_from_cents":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["sellable_products"],"additionalProperties":false},"seller":{"type":"object","properties":{"brand_name":{"type":"string","minLength":1},"legal_name":{"type":["string","null"]},"type":{"anyOf":[{"type":"string","enum":["company","sole_trader"]},{"type":"null"}]},"reg_code":{"type":["string","null"]},"address":{"type":["string","null"]},"country":{"type":"string","minLength":2,"maxLength":2},"vat_id":{"type":["string","null"]},"vat_registered":{"type":"boolean"},"support_email":{"type":["string","null"]},"abuse_email":{"type":["string","null"]}},"required":["brand_name","legal_name","type","reg_code","address","country","vat_id","vat_registered","support_email","abuse_email"],"additionalProperties":false},"traffic_validity_days":{"type":"integer","minimum":0},"ports_on_sale":{"type":"boolean"}},"required":["mode","payment_methods","supply"],"additionalProperties":false}}}}}}},"/v1/waitlist":{"post":{"summary":"Join the waitlist (double opt-in)","tags":["launch"],"description":"Sends a confirmation mail with a link to `/waitlist/confirm?token=` on the web app. Always answers `201 { ok: true }`, also for an address that is already on the list. Limited to 5 calls per 15 minutes per client address.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"sku":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9._-]*$"},"note":{"type":"string","maxLength":500}},"required":["email"],"additionalProperties":false}}}},"security":[],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/waitlist/confirm":{"get":{"summary":"Confirm a waitlist sign-up with the token from the mail","tags":["launch"],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":128},"in":"query","name":"token","required":true}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"email":{"type":"string"},"already_confirmed":{"type":"boolean"}},"required":["ok","email","already_confirmed"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/traffic":{"get":{"summary":"Traffic balance, expiry, credentials and purchase limits","tags":["traffic"],"description":"One GB balance per organisation, usable on the mobile 4G/5G and the residential pool. `credentials` is null until the first purchase is fulfilled, and for an API key without the `ports:write` scope (the balance stays readable with `ports:read`). `usage` is synced from the gateway every 5 minutes. With `limits.validity_days` 0 GB never expire and `expires_at` is null; with a positive value every purchase extends `expires_at` to max(now, current expiry) + that many days.","security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["none","active","exhausted","expired","suspended"]},"gb_total":{"type":"number","minimum":0},"gb_used":{"type":"number","minimum":0},"gb_left":{"type":"number","minimum":0},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"enabled":{"type":"boolean"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"type":"integer","exclusiveMinimum":0},"socks_port":{"type":"integer","exclusiveMinimum":0},"username_base":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","http_port","socks_port","username_base","password"],"additionalProperties":false},{"type":"null"}]},"usage_daily":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"gb":{"type":"number","minimum":0}},"required":["date","gb"],"additionalProperties":false}},"limits":{"type":"object","properties":{"validity_days":{"type":"integer","minimum":0},"kyb_tier":{"type":"string"},"t0_monthly_gb_cap":{"type":"number","minimum":0},"gb_bought_30d":{"type":"number","minimum":0},"gb_remaining_30d":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"trial_available":{"type":"boolean"},"max_order_gb":{"type":"integer","minimum":1}},"required":["validity_days","kyb_tier","t0_monthly_gb_cap","gb_bought_30d","gb_remaining_30d","trial_available","max_order_gb"],"additionalProperties":false}},"required":["id","status","gb_total","gb_used","gb_left","expires_at","enabled","last_synced_at","credentials","usage_daily","limits"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/traffic/regenerate":{"post":{"summary":"Regenerate the proxy password","tags":["traffic"],"description":"The previous password keeps working for about 30 seconds so running jobs can switch over. The username and the balance do not change.","security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"traffic":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["none","active","exhausted","expired","suspended"]},"gb_total":{"type":"number","minimum":0},"gb_used":{"type":"number","minimum":0},"gb_left":{"type":"number","minimum":0},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"enabled":{"type":"boolean"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"type":"integer","exclusiveMinimum":0},"socks_port":{"type":"integer","exclusiveMinimum":0},"username_base":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","http_port","socks_port","username_base","password"],"additionalProperties":false},{"type":"null"}]},"usage_daily":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"gb":{"type":"number","minimum":0}},"required":["date","gb"],"additionalProperties":false}},"limits":{"type":"object","properties":{"validity_days":{"type":"integer","minimum":0},"kyb_tier":{"type":"string"},"t0_monthly_gb_cap":{"type":"number","minimum":0},"gb_bought_30d":{"type":"number","minimum":0},"gb_remaining_30d":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"trial_available":{"type":"boolean"},"max_order_gb":{"type":"integer","minimum":1}},"required":["validity_days","kyb_tier","t0_monthly_gb_cap","gb_bought_30d","gb_remaining_30d","trial_available","max_order_gb"],"additionalProperties":false}},"required":["id","status","gb_total","gb_used","gb_left","expires_at","enabled","last_synced_at","credentials","usage_daily","limits"],"additionalProperties":false}},"required":["traffic"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/traffic/countries":{"get":{"summary":"Countries with devices online now, per pool","tags":["traffic"],"description":"Counts of devices online now (cached for 60 seconds). `mobile` is limited to the mobile 4G/5G countries; `GE` is Georgia (country). Exit addresses of the pools are never listed. Empty lists mean the numbers are not available right now: hide them rather than showing zeros.","security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"mobile":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","minLength":2,"maxLength":2},"name":{"type":"string","minLength":1},"online":{"type":"integer","minimum":0}},"required":["country","name","online"],"additionalProperties":false}},"residential":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","minLength":2,"maxLength":2},"name":{"type":"string","minLength":1},"online":{"type":"integer","minimum":0}},"required":["country","name","online"],"additionalProperties":false}},"totals":{"type":"object","properties":{"mobile_online":{"type":"integer","minimum":0},"residential_online":{"type":"integer","minimum":0},"countries":{"type":"integer","minimum":0}},"required":["mobile_online","residential_online","countries"],"additionalProperties":false},"generated_at":{"type":"string","format":"date-time"},"stale":{"type":"boolean"}},"required":["mobile","residential","totals","generated_at","stale"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/traffic/build-url":{"post":{"summary":"Build the proxy username, URL and code snippets for one connection","tags":["traffic"],"description":"Pool, country, rotation and session are encoded in the username; the server validates them (an ISO 3166-1 alpha-2 country or `any`, the mobile pool only in its mobile countries, session names `[a-z0-9_]`). `rotation: sticky` keeps the same device for the session, and the carrier may still change its IP; without a `session` a stable name is derived for the account. `url` and `snippets` contain the real password and are only served to the owning organisation; `url_masked` is safe to show.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pool":{"type":"string","enum":["mobile","residential","best"]},"country":{"type":"string","pattern":"^([A-Za-z]{2}|any)$"},"rotation":{"type":"string","enum":["auto5","auto10","auto20","auto60","ondemand","sticky"]},"session":{"type":"string","pattern":"^[a-z0-9_]{1,64}$"},"protocol":{"type":"string","enum":["http","socks5"],"default":"http"}},"required":["pool","country","rotation"],"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","exclusiveMinimum":0},"protocol":{"type":"string","enum":["http","socks5"]},"username":{"type":"string","minLength":1},"session":{"type":["string","null"]},"url":{"type":"string","minLength":1},"url_masked":{"type":"string","minLength":1},"snippets":{"type":"object","properties":{"curl":{"type":"string"},"python":{"type":"string"},"node":{"type":"string"},"playwright":{"type":"string"}},"required":["curl","python","node","playwright"],"additionalProperties":false}},"required":["host","port","protocol","username","session","url","url_masked","snippets"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/traffic/build-urls":{"post":{"summary":"Build up to 100 named sticky connections without buying or allocating ports","tags":["traffic"],"description":"Requires ports:write because results contain the owning organisation’s proxy password. Sessions are session_prefix_1 through session_prefix_count; repeating a prefix reuses them. All use the existing balance and gateway ports. Distinct sessions do not guarantee distinct devices or IPs. Formatting consumes no GB and makes no gateway connection.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pool":{"type":"string","enum":["mobile","residential","best"]},"country":{"type":"string","pattern":"^([A-Za-z]{2}|any)$"},"protocol":{"type":"string","enum":["http","socks5"],"default":"http"},"count":{"type":"integer","minimum":1,"maximum":100},"session_prefix":{"type":"string","pattern":"^[a-z0-9_]{1,48}$"}},"required":["pool","country","count","session_prefix"],"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"connections":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","exclusiveMinimum":0},"protocol":{"type":"string","enum":["http","socks5"]},"username":{"type":"string","minLength":1},"session":{"type":["string","null"]},"url":{"type":"string","minLength":1},"url_masked":{"type":"string","minLength":1},"snippets":{"type":"object","properties":{"curl":{"type":"string"},"python":{"type":"string"},"node":{"type":"string"},"playwright":{"type":"string"}},"required":["curl","python","node","playwright"],"additionalProperties":false}},"required":["host","port","protocol","username","session","url","url_masked","snippets"],"additionalProperties":false},"minItems":1,"maxItems":100}},"required":["connections"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/traffic/test":{"post":{"summary":"Test a connection through the gateway (6 per minute)","tags":["traffic"],"description":"The server sends one request through the gateway to its own echo endpoint (10 s timeout) and reports whether it connected, the exit address it saw and the latency. `exit_country` is a country observed for that exit address, never the requested one: when none was observed it is null and `country_verified` is false, so look the exit address up yourself before relying on the country. `ok: false` carries the gateway `error_code` (for example `E_NO_STOCK_COUNTRY`, `E_CAP_EXCEEDED`, `timeout`). The test uses a few kilobytes of the balance. In development with the mock upstream the result is simulated (`simulated: true`).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pool":{"type":"string","enum":["mobile","residential","best"],"default":"best"},"country":{"type":"string","pattern":"^([A-Za-z]{2}|any)$","default":"any"},"rotation":{"type":"string","enum":["auto5","auto10","auto20","auto60","ondemand","sticky"],"default":"ondemand"}},"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"exit_country":{"type":["string","null"]},"country_verified":{"type":"boolean"},"exit_ip":{"type":["string","null"]},"latency_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"error_code":{"type":"string"},"simulated":{"type":"boolean"}},"required":["ok","exit_country","country_verified","exit_ip","latency_ms"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}},"/v1/traffic/buy":{"post":{"summary":"Buy traffic from the wallet balance (API and MCP)","tags":["traffic"],"description":"Creates and pays an order for `gb` whole GB (or the one-off trial) from the wallet; the price comes from the tier table for the ordered quantity, the client never sends a price. `accept_terms: true` is required, as at checkout: it records that the customer accepts the terms and the acceptable-use policy and asks for the service to start at once (optional `terms_version` names the version shown). Requires an `Idempotency-Key` header: the same key with the same body replays the same order, the same key with a different body is 409 `idempotency_conflict`. With an API key a refused purchase is kept under its key for 24 h as well, so after fixing the cause (for example a top-up) send a new key. An API key needs the `ports:write` scope. 402 `insufficient_funds` when the wallet is too low, 403 `account_suspended` when traffic is paused on the account, 409 `trial_already_used`, 409 `launch_waitlist` while `LAUNCH_MODE=waitlist`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"gb":{"type":"integer","minimum":1,"maximum":1000},"trial":{"type":"boolean"},"accept_terms":{"type":"boolean","enum":[true]},"terms_version":{"type":"string","minLength":1,"maxLength":40}},"required":["accept_terms"],"additionalProperties":false}}}},"security":[{"SessionCookie":[]},{"ApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","pattern":"^PP-\\d{4}-\\d{6,}$"},"customer_id":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string","enum":["draft","awaiting_payment","awaiting_kyb","paid","provisioning","fulfilled","partially_fulfilled","failed_refunded","cancelled","refunded"]},"subtotal_cents":{"type":"integer","minimum":0},"discount_cents":{"type":"integer","minimum":0},"vat_rate_bps":{"type":"integer","minimum":0,"maximum":10000},"vat_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"payment_method":{"type":"string","enum":["stripe","coingate","nowpayments","wallet","bank_transfer","mock"]},"coupon_code":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product_id":{"type":"string"},"sku_snapshot":{"type":"object","properties":{"sku":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"kind":{"type":"string","enum":["port","bandwidth","topup","sms","esim"]},"title":{"type":"string","minLength":1},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}]},"carrier_hint":{"type":["string","null"]},"term":{"type":"string","enum":["monthly","weekly","daily","gb","none"]},"sell_cents":{"type":"integer","minimum":0},"currency":{"type":"string","enum":["EUR","USD"]},"evidence":{"type":"string","enum":["signed","observed"]},"operator_label":{"type":"string","minLength":1},"supply_kind":{"type":"string","enum":["owned","generic_pool","mock"]},"digital_details":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["esim_plan","sms_activation","sms_rental","sms_dedicated"]},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"default":[]},"region":{"type":["string","null"]},"data_limit_gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"data_unlimited":{"type":"boolean"},"validity_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"activation_policy":{"type":["string","null"]},"network_type":{"type":["string","null"]},"speed":{"type":["string","null"]},"speed_note":{"type":["string","null"]},"routing_location":{"type":["string","null"]},"has_5g":{"type":"boolean"},"has_hotspot":{"type":"boolean"},"has_calls":{"type":"boolean"},"has_sms":{"type":"boolean"},"supports_topup":{"type":"boolean"},"call_minutes":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"phone_number_prefix":{"type":["string","null"]},"calls_unlimited":{"type":"boolean"},"voice_note":{"type":["string","null"]},"service_name":{"type":["string","null"]},"duration_days":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"billing_period":{"anyOf":[{"type":"string","enum":["monthly"]},{"type":"null"}]}},"required":["kind"],"additionalProperties":false},{"type":"null"}]}},"required":["sku","kind","title","country","carrier_hint","term","sell_cents","currency","evidence","operator_label","supply_kind"],"additionalProperties":false},"quantity":{"type":"integer","minimum":1},"unit_cents":{"type":"integer","minimum":0},"total_cents":{"type":"integer","minimum":0},"status":{"type":"string","enum":["pending","provisioning","fulfilled","failed","refunded","held"]},"fulfilment_ref":{"type":["string","null"]},"attempts":{"type":"integer","minimum":0},"last_error":{"type":["string","null"]},"customer_reason":{"type":["string","null"]},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]},"units":{"type":"array","items":{"type":"object","properties":{"unit":{"type":"integer","minimum":1},"port_id":{"type":"string"},"resource_url":{"type":["string","null"]},"credentials":{"anyOf":[{"type":"object","properties":{"host":{"type":"string","minLength":1},"http_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"socks_port":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}]},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"http":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false},"socks5":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["host","port","username","password"],"additionalProperties":false}},"required":["host","http_port","socks_port","username","password","expires_at"],"additionalProperties":false},{"type":"null"}]}},"required":["unit","port_id","resource_url","credentials"],"additionalProperties":false}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","product_id","sku_snapshot","quantity","unit_cents","total_cents","status","fulfilment_ref","attempts","resource_url","credentials","updated_at"],"additionalProperties":false}},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"notes":{"type":["string","null"]},"invoice_url":{"type":["string","null"]},"payment_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"analytics_ref":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{20}$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","number","customer_id","org_id","status","subtotal_cents","discount_cents","vat_rate_bps","vat_cents","total_cents","currency","payment_method","coupon_code","items","paid_at","notes","invoice_url","created_at","updated_at"],"additionalProperties":false},"payment_id":{"type":"string"}},"required":["order","payment_id"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"402":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":["about:blank"]}]},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","minLength":1},"retry_after":{"type":"integer","minimum":0},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"current_revision":{"type":"integer","minimum":1}},"required":["type","title","status","code"],"additionalProperties":false}}}}}}}},"servers":[{"url":"https://api.portproof.org"}],"tags":[{"name":"digital","description":"SMS and eSIM: isolated wallet purchases at Portproof selling prices, owned numbers/messages/installations and supported actions. Guide: https://portproof.org/docs/sms-esim-api"},{"name":"traffic","description":"Proxy traffic by the GB: balance and credentials, countries online now, proxy URL builder, connection test, wallet purchase"},{"name":"public","description":"Pricing, echo-ip and public product routes"},{"name":"catalog","description":"Public product catalogue (sell prices only)"},{"name":"auth","description":"Shop accounts: signup, login, email tokens (session cookie)"},{"name":"account","description":"/me: profile, organisation and VAT, sessions, password"},{"name":"cart","description":"Carts for visitors and signed-in customers (pp_cart cookie, merged at login)"},{"name":"checkout","description":"Orders and wallet top-ups per payment method"},{"name":"orders","description":"Order history with fulfilment status and credentials"},{"name":"wallet","description":"Wallet balance and ledger"},{"name":"bandwidth","description":"Legacy per-product pool credentials"},{"name":"affiliate","description":"Referral programme"},{"name":"billing","description":"Invoices, ledger and usage"},{"name":"projects","description":"Projects and API keys"},{"name":"webhooks","description":"Webhook endpoints and test deliveries"},{"name":"kyb","description":"Company verification"},{"name":"status","description":"Public status page data and SLA"},{"name":"launch","description":"Launch mode and the \"Notify me\" waitlist (double opt-in)"},{"name":"ports","description":"Dedicated ports: current catalogue availability, details, rotation log, credentials and allowlist"},{"name":"meta","description":"Health and well-known documents"}]}