{
  "openapi": "3.1.0",
  "info": {
    "title": "Web3 SMS API",
    "version": "1.0.0",
    "description": "Customer API for USD-denominated SMS activations, rentals, verification emails and USDT(BSC) account funding. Monetary values are decimal strings."
  },
  "servers": [{"url": "/", "description": "Current installation"}],
  "security": [{"BearerAuth": []}],
  "tags": [
    {"name": "Wallet"},
    {"name": "Catalog"},
    {"name": "Emails"},
    {"name": "Activations"},
    {"name": "Rentals"},
    {"name": "Payments"},
    {"name": "Webhooks"},
    {"name": "SMS-Activate compatibility"}
  ],
  "paths": {
    "/api/v1/balance": {
      "get": {"tags": ["Wallet"], "operationId": "getBalance", "responses": {"200": {"description": "Wallet balances", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WalletResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/wallet/entries": {
      "get": {"tags": ["Wallet"], "operationId": "listWalletEntries", "parameters": [{"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/Offset"}], "responses": {"200": {"description": "Wallet ledger", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CollectionResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/catalog/services": {
      "get": {"tags": ["Catalog"], "operationId": "listServices", "parameters": [{"name": "q", "in": "query", "schema": {"type": "string", "maxLength": 100}}, {"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/Offset"}], "responses": {"200": {"description": "Services", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CollectionResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/catalog/countries": {
      "get": {"tags": ["Catalog"], "operationId": "listCountries", "parameters": [{"name": "service_code", "in": "query", "schema": {"type": "string"}}, {"name": "product_type", "in": "query", "schema": {"type": "string", "enum": ["activation", "rental"], "default": "activation"}}], "responses": {"200": {"description": "Countries", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/catalog/operators": {
      "get": {"tags": ["Catalog"], "operationId": "listOperators", "parameters": [{"name": "country_code", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Operators", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/offers": {
      "get": {"tags": ["Catalog"], "operationId": "listOffers", "parameters": [{"$ref": "#/components/parameters/ProductType"}, {"$ref": "#/components/parameters/CountryCode"}, {"$ref": "#/components/parameters/ServiceCode"}, {"$ref": "#/components/parameters/OperatorCode"}, {"$ref": "#/components/parameters/DurationCode"}, {"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/Offset"}], "responses": {"200": {"description": "Sale offers", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CollectionResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/emails/domains": {
      "get": {"tags": ["Emails"], "operationId": "listEmailDomains", "parameters": [{"name": "site", "in": "query", "required": true, "description": "Website where the email will be used", "schema": {"type": "string", "examples": ["telegram.com"]}}, {"name": "sort", "in": "query", "schema": {"type": "string", "enum": ["quality", "price", "stock"], "default": "quality"}}], "responses": {"200": {"description": "Available email domains with final USD prices", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/emails": {
      "get": {"tags": ["Emails"], "operationId": "listEmails", "parameters": [{"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/Offset"}], "responses": {"200": {"description": "Verification email orders", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CollectionResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}},
      "post": {"tags": ["Emails"], "operationId": "createEmail", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateEmail"}}}}, "responses": {"201": {"description": "Verification email created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/EmailResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/emails/batch": {
      "post": {"tags": ["Emails"], "operationId": "createEmailBatch", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateEmailBatch"}}}}, "responses": {"201": {"description": "Verification email batch created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/emails/{id}": {
      "get": {"tags": ["Emails"], "operationId": "getEmail", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"description": "Verification email with code and message", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/EmailResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}},
      "delete": {"tags": ["Emails"], "operationId": "cancelEmail", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"204": {"description": "Verification email cancelled and eligible funds refunded"}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/emails/{id}/reorder": {
      "post": {"tags": ["Emails"], "operationId": "reorderEmail", "parameters": [{"$ref": "#/components/parameters/ResourceId"}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"201": {"description": "Replacement verification email created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/EmailResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/activations": {
      "get": {"tags": ["Activations"], "operationId": "listActivations", "parameters": [{"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/Offset"}], "responses": {"200": {"description": "Activations", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CollectionResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}},
      "post": {"tags": ["Activations"], "operationId": "createActivation", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateActivation"}}}}, "responses": {"201": {"description": "Activation created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ActivationResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/activations/{id}": {
      "get": {"tags": ["Activations"], "operationId": "getActivation", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"description": "Activation with messages", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ActivationResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/activations/{id}/resend": {"post": {"tags": ["Activations"], "operationId": "resendActivation", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/activations/{id}/complete": {"post": {"tags": ["Activations"], "operationId": "completeActivation", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/activations/{id}/cancel": {"post": {"tags": ["Activations"], "operationId": "cancelActivation", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/activations/{id}/reactivation-options": {"get": {"tags": ["Activations"], "operationId": "getReactivationOptions", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"description": "Available sale-priced options", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/activations/{id}/reactivate": {"post": {"tags": ["Activations"], "operationId": "reactivateActivation", "parameters": [{"$ref": "#/components/parameters/ResourceId"}, {"$ref": "#/components/parameters/IdempotencyKey"}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"duration": {"type": "integer", "minimum": 1}}}}}}, "responses": {"201": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/activations/{id}/prolong-options": {"get": {"tags": ["Activations"], "operationId": "getProlongationOptions", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"description": "Available sale-priced durations", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/activations/{id}/prolong": {"post": {"tags": ["Activations"], "operationId": "prolongActivation", "parameters": [{"$ref": "#/components/parameters/ResourceId"}, {"$ref": "#/components/parameters/IdempotencyKey"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["duration"], "properties": {"duration": {"type": "integer", "minimum": 1}}}}}}, "responses": {"201": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/activations/{id}/prolong-history": {"get": {"tags": ["Activations"], "operationId": "getProlongationHistory", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"description": "Prolongation history", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/rentals/catalog": {"get": {"tags": ["Rentals"], "operationId": "listRentalOffers", "parameters": [{"$ref": "#/components/parameters/CountryCode"}, {"$ref": "#/components/parameters/ServiceCode"}, {"$ref": "#/components/parameters/DurationCode"}, {"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/Offset"}], "responses": {"200": {"description": "Rental offers", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CollectionResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/rentals": {"post": {"tags": ["Rentals"], "operationId": "createRental", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateRental"}}}}, "responses": {"201": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/rentals/{id}": {"get": {"tags": ["Rentals"], "operationId": "getRental", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/rentals/{id}/messages": {"get": {"tags": ["Rentals"], "operationId": "listRentalMessages", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"description": "Rental messages", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/rentals/{id}/finish": {"post": {"tags": ["Rentals"], "operationId": "finishRental", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/rentals/{id}/cancel": {"post": {"tags": ["Rentals"], "operationId": "cancelRental", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"$ref": "#/components/responses/Activation"}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/payments": {
      "get": {"tags": ["Payments"], "operationId": "listPayments", "parameters": [{"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/Offset"}], "responses": {"200": {"description": "Payments", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CollectionResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}},
      "post": {"tags": ["Payments"], "operationId": "createPayment", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["amount"], "properties": {"amount": {"$ref": "#/components/schemas/Amount"}}}}}}, "responses": {"201": {"description": "USDT(BSC) payment created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PaymentResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/payments/{id}": {"get": {"tags": ["Payments"], "operationId": "getPayment", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"description": "Payment", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PaymentResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/webhook-endpoints": {
      "get": {"tags": ["Webhooks"], "operationId": "listWebhookEndpoints", "responses": {"200": {"description": "Endpoints", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}},
      "post": {"tags": ["Webhooks"], "operationId": "createWebhookEndpoint", "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WebhookEndpointInput"}}}}, "responses": {"201": {"description": "Endpoint and one-time secret", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/webhook-endpoints/{id}": {
      "patch": {"tags": ["Webhooks"], "operationId": "updateWebhookEndpoint", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WebhookEndpointUpdate"}}}}, "responses": {"200": {"description": "Endpoint updated", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}},
      "delete": {"tags": ["Webhooks"], "operationId": "deleteWebhookEndpoint", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"204": {"description": "Endpoint deleted"}, "default": {"$ref": "#/components/responses/Error"}}}
    },
    "/api/v1/webhook-endpoints/{id}/rotate-secret": {"post": {"tags": ["Webhooks"], "operationId": "rotateWebhookSecret", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"200": {"description": "One-time replacement secret", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/api/v1/webhook-endpoints/{id}/test": {"post": {"tags": ["Webhooks"], "operationId": "testWebhookEndpoint", "parameters": [{"$ref": "#/components/parameters/ResourceId"}], "responses": {"202": {"description": "Test event queued", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DataResponse"}}}}, "default": {"$ref": "#/components/responses/Error"}}}},
    "/stubs/handler_api.php": {
      "get": {"tags": ["SMS-Activate compatibility"], "operationId": "smsActivateCompatibility", "security": [], "parameters": [{"name": "api_key", "in": "query", "required": true, "schema": {"type": "string"}}, {"name": "action", "in": "query", "required": true, "schema": {"$ref": "#/components/schemas/CompatAction"}}], "responses": {"200": {"description": "SMS-Activate compatible text or JSON response"}, "401": {"description": "BAD_KEY"}, "default": {"$ref": "#/components/responses/Error"}}},
      "post": {"tags": ["SMS-Activate compatibility"], "operationId": "smsActivateCompatibilityMutation", "security": [], "description": "Form endpoint for compatibility actions. Mutating calls should include idempotency_key or Idempotency-Key.", "requestBody": {"content": {"application/x-www-form-urlencoded": {"schema": {"type": "object", "required": ["api_key", "action"], "properties": {"api_key": {"type": "string"}, "action": {"$ref": "#/components/schemas/CompatAction"}, "id": {"type": "string"}, "service": {"type": "string"}, "country": {"type": "string"}, "operator": {"type": "string"}, "duration": {"type": "number"}, "status": {"type": "integer"}, "idempotency_key": {"type": "string", "maxLength": 190}}}}}}, "responses": {"200": {"description": "SMS-Activate compatible response"}, "401": {"description": "BAD_KEY"}, "default": {"$ref": "#/components/responses/Error"}}}
    }
  },
  "webhooks": {
    "customerEvent": {
      "post": {
        "summary": "Signed customer event",
        "description": "Verify HMAC-SHA256 over timestamp + '.' + exact raw body. Reject stale timestamps and deduplicate by event_id.",
        "parameters": [
          {"name": "X-Web3-SMS-Signature", "in": "header", "required": true, "schema": {"type": "string"}},
          {"name": "X-Web3-SMS-Timestamp", "in": "header", "required": true, "schema": {"type": "integer"}},
          {"name": "X-Web3-SMS-Event-Id", "in": "header", "required": true, "schema": {"type": "string", "format": "uuid"}}
        ],
        "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WebhookEvent"}}}},
        "responses": {"200": {"description": "Event accepted"}}
      }
    }
  },
  "components": {
    "securitySchemes": {"BearerAuth": {"type": "http", "scheme": "bearer", "bearerFormat": "API key"}},
    "parameters": {
      "ResourceId": {"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid"}},
      "IdempotencyKey": {"name": "Idempotency-Key", "in": "header", "required": true, "schema": {"type": "string", "minLength": 1, "maxLength": 190}},
      "Limit": {"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 50}},
      "Offset": {"name": "offset", "in": "query", "schema": {"type": "integer", "minimum": 0, "default": 0}},
      "ProductType": {"name": "product_type", "in": "query", "schema": {"type": "string", "enum": ["activation", "rental"]}},
      "CountryCode": {"name": "country_code", "in": "query", "schema": {"type": "string"}},
      "ServiceCode": {"name": "service_code", "in": "query", "schema": {"type": "string"}},
      "OperatorCode": {"name": "operator_code", "in": "query", "schema": {"type": "string"}},
      "DurationCode": {"name": "duration_code", "in": "query", "schema": {"type": "string"}}
    },
    "responses": {
      "Activation": {"description": "Current activation", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ActivationResponse"}}}},
      "Error": {"description": "Stable API error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}}
    },
    "schemas": {
      "Amount": {"type": "string", "pattern": "^-?[0-9]+(?:\\.[0-9]{1,8})?$", "examples": ["100.00000000"]},
      "DataResponse": {"type": "object", "required": ["data"], "properties": {"data": {}}},
      "CollectionResponse": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"type": "array", "items": {}}, "meta": {"type": "object", "required": ["limit", "offset"], "properties": {"limit": {"type": "integer"}, "offset": {"type": "integer"}}}}},
      "WalletResponse": {"type": "object", "required": ["data"], "properties": {"data": {"type": "object", "required": ["currency", "available", "held", "principal_available", "bonus_available"], "properties": {"currency": {"const": "USD"}, "available": {"$ref": "#/components/schemas/Amount"}, "held": {"$ref": "#/components/schemas/Amount"}, "principal_available": {"$ref": "#/components/schemas/Amount"}, "principal_held": {"$ref": "#/components/schemas/Amount"}, "bonus_available": {"$ref": "#/components/schemas/Amount"}, "bonus_held": {"$ref": "#/components/schemas/Amount"}, "bonus_expires_at": {"type": ["string", "null"], "format": "date-time"}}}}},
      "CreateActivation": {"type": "object", "required": ["country_code", "service_code"], "properties": {"country_code": {"type": "string"}, "service_code": {"type": "string"}, "operator_code": {"type": "string"}}},
      "CreateRental": {"allOf": [{"$ref": "#/components/schemas/CreateActivation"}, {"type": "object", "required": ["duration_code"], "properties": {"duration_code": {"type": "string"}}}]},
      "CreateEmail": {"type": "object", "required": ["site", "domain"], "properties": {"site": {"type": "string", "description": "Website where the email will be used", "examples": ["telegram.com"]}, "domain": {"type": "string", "description": "Email domain returned by /emails/domains", "examples": ["gmail.com"]}}},
      "CreateEmailBatch": {"allOf": [{"$ref": "#/components/schemas/CreateEmail"}, {"type": "object", "required": ["count"], "properties": {"count": {"type": "integer", "minimum": 1, "maximum": 10}}}]},
      "EmailOrder": {"type": "object", "required": ["id", "type", "site", "domain", "status", "price", "currency", "created_at", "updated_at"], "properties": {"id": {"type": "string", "format": "uuid"}, "parent_id": {"type": ["string", "null"], "format": "uuid"}, "type": {"type": "string", "enum": ["email", "email_reorder"]}, "site": {"type": "string"}, "domain": {"type": "string"}, "email": {"type": ["string", "null"], "format": "email", "description": "Requires email:read scope"}, "code": {"type": ["string", "null"], "description": "Requires messages:read scope"}, "message": {"type": ["string", "null"], "description": "Full email body; requires messages:read scope"}, "status": {"type": "string", "enum": ["purchasing", "waiting_email", "purchase_unknown", "completed", "cancelling", "cancelled", "failed"]}, "price": {"$ref": "#/components/schemas/Amount"}, "currency": {"const": "USD"}, "created_at": {"type": "string", "format": "date-time"}, "updated_at": {"type": "string", "format": "date-time"}, "completed_at": {"type": ["string", "null"], "format": "date-time"}, "cancelled_at": {"type": ["string", "null"], "format": "date-time"}}},
      "EmailResponse": {"type": "object", "required": ["data"], "properties": {"data": {"$ref": "#/components/schemas/EmailOrder"}}},
      "Message": {"type": "object", "required": ["id", "received_at"], "properties": {"id": {"type": "string", "format": "uuid"}, "text": {"type": ["string", "null"]}, "code": {"type": ["string", "null"]}, "received_at": {"type": "string", "format": "date-time"}}},
      "Activation": {"type": "object", "required": ["id", "type", "status", "country_code", "service_code", "price", "currency", "created_at"], "properties": {"id": {"type": "string", "format": "uuid"}, "parent_id": {"type": ["string", "null"], "format": "uuid"}, "type": {"type": "string", "enum": ["activation", "reactivation", "prolongation", "rental"]}, "status": {"type": "string"}, "country_code": {"type": "string"}, "service_code": {"type": "string"}, "operator_code": {"type": ["string", "null"]}, "duration_code": {"type": ["string", "null"]}, "phone_number": {"type": ["string", "null"]}, "price": {"$ref": "#/components/schemas/Amount"}, "currency": {"const": "USD"}, "expires_at": {"type": ["string", "null"], "format": "date-time"}, "completed_at": {"type": ["string", "null"], "format": "date-time"}, "cancelled_at": {"type": ["string", "null"], "format": "date-time"}, "messages": {"type": "array", "items": {"$ref": "#/components/schemas/Message"}}, "created_at": {"type": "string", "format": "date-time"}, "updated_at": {"type": "string", "format": "date-time"}}},
      "ActivationResponse": {"type": "object", "required": ["data"], "properties": {"data": {"$ref": "#/components/schemas/Activation"}}},
      "Payment": {"type": "object", "required": ["id", "status", "credit_amount", "credit_currency", "pay_amount", "pay_asset", "network", "credited_amount", "created_at"], "properties": {"id": {"type": "string", "format": "uuid"}, "status": {"type": "string"}, "credit_amount": {"$ref": "#/components/schemas/Amount"}, "credit_currency": {"const": "USD"}, "pay_amount": {"$ref": "#/components/schemas/Amount"}, "pay_asset": {"const": "USDT"}, "network": {"const": "BSC"}, "pay_address": {"type": ["string", "null"]}, "credited_amount": {"$ref": "#/components/schemas/Amount"}, "payment_url": {"type": ["string", "null"], "format": "uri"}, "expires_at": {"type": ["string", "null"], "format": "date-time"}, "completed_at": {"type": ["string", "null"], "format": "date-time"}, "created_at": {"type": "string", "format": "date-time"}, "updated_at": {"type": "string", "format": "date-time"}}},
      "PaymentResponse": {"type": "object", "required": ["data"], "properties": {"data": {"$ref": "#/components/schemas/Payment"}}},
      "WebhookEndpointInput": {"type": "object", "required": ["url", "event_types"], "properties": {"url": {"type": "string", "format": "uri", "maxLength": 1000}, "event_types": {"type": "array", "items": {"type": "string"}}, "is_active": {"type": "boolean", "default": true}}},
      "WebhookEndpointUpdate": {"type": "object", "minProperties": 1, "properties": {"url": {"type": "string", "format": "uri", "maxLength": 1000}, "event_types": {"type": "array", "items": {"type": "string"}}, "is_active": {"type": "boolean"}}},
      "CompatAction": {"type": "string", "enum": ["getBalance", "getCountries", "getServicesList", "getOperators", "getPrices", "getNumber", "getNumberV2", "getStatus", "getStatusV2", "setStatus", "getActiveActivations", "getHistory", "reactivateOptions", "reactivate", "prolongOptions", "prolong", "prolongHistory", "serviceCountRent", "getRentServicesAndCountries", "getRentNumber", "getAllSms", "finishActivation", "cancelActivation", "getTopCountriesByService", "getTopCountriesByServiceRank", "getTopCountriesByServiceInFreePrice"]},
      "WebhookEvent": {"type": "object", "required": ["event_id", "type", "created_at", "api_version", "data"], "properties": {"event_id": {"type": "string", "format": "uuid"}, "type": {"type": "string"}, "created_at": {"type": "string", "format": "date-time"}, "api_version": {"const": "2026-07-17"}, "data": {"type": "object"}}},
      "ErrorResponse": {"type": "object", "required": ["error"], "properties": {"error": {"type": "object", "required": ["code", "message", "request_id"], "properties": {"code": {"type": "string"}, "message": {"type": "string"}, "request_id": {"type": "string", "format": "uuid"}}}}}
    }
  }
}
