{
  "openapi": "3.1.0",
  "info": {
    "title": "TurkeySMS API",
    "version": "4.0.0",
    "summary": "REST API for SMS, OTP and delivery messaging in Turkey.",
    "description": "TurkeySMS API V4 — a JSON/REST messaging API for sending single SMS, OTP, and bulk campaigns, querying balance and delivery status, and receiving delivery webhooks.\n\n## Authentication\nEvery request is a `POST` with a JSON body. Authentication is performed by including your `api_key` field inside the JSON body — there is no `Authorization` header. The `Content-Type: application/json` header is required on every request. Never expose an API key in client-side code or public repositories.\n\n## Conventions\n- All endpoints use the `POST` method.\n- All responses include a stable machine code in `result_code` (format `TS-####`).\n- `result` is a boolean: `true` on success, `false` on failure.\n- Phone numbers use international format without `+` (e.g. `905xxxxxxxxx`).\n\n## Versioning\nThe current API generation is V4. Additive changes — new endpoints, new optional request fields, and new response fields — are backward-compatible and may be introduced within V4. Clients should parse responses forward-compatibly: ignore unknown fields and do not rely on field order. A breaking change would be introduced as a new major generation; a deprecated endpoint or field is announced before removal so existing integrations keep working through the transition.\n\n## Source of truth\nThis document is the single source of truth for the TurkeySMS API contract. The public documentation site and any SDKs are generated from, or kept consistent with, this file. Any change to the API is reflected here first.",
    "contact": {
      "name": "TurkeySMS Support",
      "url": "https://turkeysms.com.tr/Support"
    },
    "license": {
      "name": "Proprietary — TurkeySMS",
      "url": "https://turkeysms.com.tr/terms-of-use"
    }
  },
  "servers": [
    {
      "url": "https://api.turkeysms.com.tr",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "TurkeySMS Developer Documentation",
    "url": "https://turkeysms.com.tr/docs"
  },
  "tags": [
    { "name": "Authentication", "description": "API key validation and permission inspection." },
    { "name": "Messaging", "description": "Single and scheduled SMS dispatch." },
    { "name": "OTP", "description": "One-time password delivery — standard and custom templates." },
    { "name": "Bulk", "description": "Group / campaign dispatch to many recipients." },
    { "name": "Queries", "description": "Balance, SenderID, message status and reporting." }
  ],
  "x-responseCodes": [
    { "code": "TS-1000", "http": 200, "meaning": "Authentication check successful." },
    { "code": "TS-1024", "http": 200, "meaning": "SMS dispatched successfully." },
    { "code": "TS-1027", "http": 403, "meaning": "Insufficient balance." },
    { "code": "TS-1028", "http": 403, "meaning": "SenderID is not active." },
    { "code": "TS-1031", "http": 401, "meaning": "Invalid API key." },
    { "code": "TS-1033", "http": 400, "meaning": "Invalid JSON body." },
    { "code": "TS-1040", "http": 200, "meaning": "Balance / SenderID query successful." },
    { "code": "TS-1060", "http": 403, "meaning": "Per-minute rate limit exceeded." },
    { "code": "TS-1061", "http": 403, "meaning": "POST permission is not enabled for this key." },
    { "code": "TS-1064", "http": 200, "meaning": "Operation successful." },
    { "code": "TS-1065", "http": 403, "meaning": "API key permissions are insufficient for this operation." }
  ],
  "paths": {
    "/auth/check": {
      "post": {
        "tags": ["Authentication"],
        "summary": "Validate an API key",
        "operationId": "authCheck",
        "x-stability": "stable",
        "description": "Validates an API key in a single request and returns the key status, the granular permission matrix, and an account summary including balance.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AuthCheckRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Key is valid. Returns permissions and account summary.",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AuthCheckResponse" }
              }
            }
          },
          "401": {
            "description": "Invalid API key (TS-1031).",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } }
            }
          }
        }
      }
    },
    "/sms/send": {
      "post": {
        "tags": ["Messaging"],
        "summary": "Send a single SMS",
        "operationId": "sendSms",
        "x-stability": "stable",
        "description": "Sends an SMS to a single recipient. Requires an approved SenderID (`title`) and sufficient balance. Adding the `scheduled_sms`, `scheduled_date` and `scheduled_time` fields schedules the message for future delivery.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SmsSendRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "SMS accepted for dispatch (TS-1024).",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SmsSendResponse" }
              }
            }
          },
          "400": {
            "description": "Invalid JSON body (TS-1033).",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }
          },
          "401": {
            "description": "Invalid API key (TS-1031).",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }
          },
          "403": {
            "description": "Insufficient balance (TS-1027), SenderID not active (TS-1028), rate limit exceeded (TS-1060) or insufficient permissions (TS-1061 / TS-1065).",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }
          }
        }
      }
    },
    "/otp/send": {
      "post": {
        "tags": ["OTP"],
        "summary": "Send a standard OTP",
        "operationId": "sendOtp",
        "x-stability": "stable",
        "description": "High-priority OTP route. A 4–6 digit code is generated automatically and delivered using the standard OTP template.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/OtpSendRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OTP accepted for dispatch.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SmsSendResponse" } } }
          },
          "403": {
            "description": "Insufficient balance, rate limit or permissions.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }
          }
        }
      }
    },
    "/otp/detailed": {
      "post": {
        "tags": ["OTP"],
        "summary": "Send a custom-template OTP",
        "operationId": "sendOtpDetailed",
        "x-stability": "stable",
        "description": "Sends an OTP using a fully custom message template. The `text` field must contain the `TS-CODE` placeholder, which the system replaces with the generated code.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/OtpDetailedRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OTP accepted for dispatch.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SmsSendResponse" } } }
          },
          "400": {
            "description": "Missing TS-CODE placeholder or invalid body.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }
          }
        }
      }
    },
    "/group/send": {
      "post": {
        "tags": ["Bulk"],
        "summary": "Send the same text to many recipients",
        "operationId": "groupSend",
        "x-stability": "stable",
        "description": "Bulk dispatch — sends an identical message body to every recipient in the `sentto` array.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/GroupSendRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch accepted for dispatch.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupSendResponse" } } }
          }
        }
      }
    },
    "/group/sendMixed": {
      "post": {
        "tags": ["Bulk"],
        "summary": "Send personalized messages to many recipients",
        "operationId": "groupSendMixed",
        "x-stability": "stable",
        "description": "Bulk dispatch where each recipient receives a different message. The `text` and `sentto` arrays must have equal length and matching indexes.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/GroupSendMixedRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch accepted for dispatch.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupSendResponse" } } }
          }
        }
      }
    },
    "/balance/": {
      "post": {
        "tags": ["Queries"],
        "summary": "Query account balance",
        "operationId": "checkBalance",
        "x-stability": "stable",
        "description": "Returns the current main SMS balance for the account.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BalanceRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Balance returned (TS-1040).",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BalanceResponse" } } }
          }
        }
      }
    },
    "/senderid/check": {
      "post": {
        "tags": ["Queries"],
        "summary": "List approved SenderIDs",
        "operationId": "checkSenderId",
        "x-stability": "stable",
        "description": "Returns the list of approved SenderIDs on the account, including id, title and status.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SenderIdCheckRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "SenderID list returned (TS-1040).",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SenderIdResponse" } } }
          }
        }
      }
    },
    "/sms/status": {
      "post": {
        "tags": ["Queries"],
        "summary": "Query delivery status of an SMS",
        "operationId": "smsStatus",
        "x-stability": "stable",
        "description": "Returns the delivery status of a message by its `sms_id`: queued, sent, delivered, failed or expired.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SmsStatusRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Status returned.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SmsStatusResponse" } } }
          }
        }
      }
    },
    "/reports/basic": {
      "post": {
        "tags": ["Queries"],
        "summary": "Campaign summary report",
        "operationId": "reportsBasic",
        "x-stability": "stable",
        "description": "Returns total, successful and failed counts for a campaign.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ReportsBasicRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Summary returned.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReportsBasicResponse" } } }
          }
        }
      }
    },
    "/reports/detailed": {
      "post": {
        "tags": ["Queries"],
        "summary": "Recipient-level detailed report",
        "operationId": "reportsDetailed",
        "x-stability": "stable",
        "description": "Returns recipient-level delivery status with pagination. Maximum 500 rows per page.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ReportsDetailedRequest" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Detailed report page returned.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReportsDetailedResponse" } } }
          }
        }
      }
    }
  },
  "webhooks": {
    "deliveryEvent": {
      "post": {
        "summary": "Delivery / message event callback",
        "operationId": "webhookDeliveryEvent",
        "x-stability": "stable",
        "description": "TurkeySMS pushes message lifecycle events to the webhook URL configured per API key (Account panel → API Center → Security & IP → Webhook).\n\nEach request is signed: the `X-TurkeySMS-Signature` header carries `<algo>=<hmac>` (default `sha256`), computed as an HMAC of the raw request body using your webhook secret. The `X-TurkeySMS-Timestamp` header carries the send time. Always verify the signature before processing.\n\nReplay protection: use the X-TurkeySMS-Timestamp value to reject replayed requests. Reject any event whose timestamp falls outside a tolerance window you consider acceptable (for example, a few minutes), in addition to verifying the signature.\n\nFailed deliveries are retried with a configurable backoff (retry count and backoff are set per key). Event ordering is not guaranteed and the same event may be delivered more than once — process events idempotently.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/WebhookEvent" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Event acknowledged. Any non-2xx response is treated as a failure and retried."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ApiKeyField": {
        "type": "string",
        "description": "Your TurkeySMS V4 API key. Sent inside the JSON body; never as a header.",
        "examples": ["YOUR_API_KEY"]
      },
      "AuthCheckRequest": {
        "type": "object",
        "required": ["api_key"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" }
        }
      },
      "AuthCheckResponse": {
        "type": "object",
        "properties": {
          "result": { "type": "boolean", "examples": [true] },
          "result_code": { "type": "string", "examples": ["TS-1000"] },
          "key_details": {
            "type": "object",
            "properties": {
              "status": { "type": "string", "examples": ["Active"] },
              "permissions": {
                "type": "object",
                "description": "Granular per-key permission matrix.",
                "properties": {
                  "post_request": { "type": "boolean" },
                  "send_single_sms": { "type": "boolean" },
                  "send_otp": { "type": "boolean" },
                  "send_otp_advanced": { "type": "boolean" },
                  "send_bulk_sms": { "type": "boolean" },
                  "check_balance": { "type": "boolean" },
                  "check_senderid": { "type": "boolean" },
                  "check_sms_status": { "type": "boolean" },
                  "create_group": { "type": "boolean" },
                  "edit_group": { "type": "boolean" },
                  "delete_group": { "type": "boolean" },
                  "list_groups": { "type": "boolean" },
                  "add_contact": { "type": "boolean" },
                  "blacklist_number": { "type": "boolean" }
                }
              }
            }
          },
          "account_summary": {
            "type": "object",
            "properties": {
              "account_status": { "type": "string", "examples": ["Active"] },
              "balance": {
                "type": "object",
                "properties": {
                  "main": { "type": "integer", "examples": [1500] },
                  "international": { "type": "integer", "examples": [250] }
                }
              }
            }
          }
        }
      },
      "SmsSendRequest": {
        "type": "object",
        "required": ["api_key", "title", "text", "sentto"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" },
          "title": {
            "type": "string",
            "description": "Approved SenderID (case-sensitive).",
            "examples": ["TURKEYSMS"]
          },
          "text": {
            "type": "string",
            "description": "Message body. Unicode is supported.",
            "examples": ["Hello from V4!"]
          },
          "sentto": {
            "type": "string",
            "description": "Recipient in international format without '+'.",
            "examples": ["905xxxxxxxxx"]
          },
          "sms_lang": {
            "type": "integer",
            "enum": [0, 1, 2],
            "default": 2,
            "description": "0 = English, 1 = Turkish, 2 = Arabic / Unicode (default)."
          },
          "content_type": {
            "type": "integer",
            "enum": [0, 1, 2],
            "default": 0,
            "description": "0 = Transactional, 1 = High Quality, 2 = Advertising."
          },
          "scheduled_sms": {
            "type": "integer",
            "enum": [0, 1],
            "description": "Set to 1 to schedule the message for future delivery."
          },
          "scheduled_date": {
            "type": "string",
            "format": "date",
            "description": "Delivery date (YYYY-MM-DD). Required when scheduled_sms = 1.",
            "examples": ["2026-12-31"]
          },
          "scheduled_time": {
            "type": "string",
            "description": "Delivery time (HH:MM). Required when scheduled_sms = 1.",
            "examples": ["09:00"]
          }
        }
      },
      "SmsSendResponse": {
        "type": "object",
        "properties": {
          "result": { "type": "boolean", "examples": [true] },
          "result_code": { "type": "string", "examples": ["TS-1024"] },
          "result_message": { "type": "string", "examples": ["SMS dispatched successfully."] },
          "sms_id": {
            "type": "integer",
            "description": "Unique message identifier. Use it with /sms/status and /reports/*.",
            "examples": [1000007721]
          },
          "number_of_sms": {
            "type": "integer",
            "description": "Number of SMS segments the message was split into.",
            "examples": [1]
          },
          "total_recipients": { "type": "integer", "examples": [1] },
          "success_count": { "type": "integer", "examples": [1] },
          "sms_lang": { "type": "string", "examples": ["Turkish"] },
          "content_type": { "type": "string", "examples": ["Transactional"] },
          "country": { "type": "string", "examples": ["Turkey-TR"] }
        }
      },
      "OtpSendRequest": {
        "type": "object",
        "required": ["api_key", "mobile"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" },
          "mobile": {
            "type": "string",
            "description": "Recipient in international format without '+'.",
            "examples": ["905xxxxxxxxx"]
          },
          "lang": {
            "type": "integer",
            "enum": [0, 1, 2],
            "description": "0 = English, 1 = Turkish, 2 = Arabic / Unicode."
          },
          "digits": {
            "type": "integer",
            "minimum": 4,
            "maximum": 6,
            "default": 6,
            "description": "Length of the generated code (4–6 digits)."
          }
        }
      },
      "OtpDetailedRequest": {
        "type": "object",
        "required": ["api_key", "mobile", "title", "text"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" },
          "mobile": { "type": "string", "examples": ["905xxxxxxxxx"] },
          "title": { "type": "string", "description": "Approved SenderID.", "examples": ["MyApp"] },
          "text": {
            "type": "string",
            "description": "Custom template. MUST contain the TS-CODE placeholder.",
            "examples": ["MyApp verification code: TS-CODE — valid for 5 minutes."]
          },
          "lang": { "type": "integer", "enum": [0, 1, 2] },
          "digits": { "type": "integer", "minimum": 4, "maximum": 6, "default": 6 }
        }
      },
      "GroupSendRequest": {
        "type": "object",
        "required": ["api_key", "title", "text", "sentto"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" },
          "title": { "type": "string", "examples": ["TURKEYSMS"] },
          "text": { "type": "string", "description": "Identical body sent to every recipient." },
          "sentto": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Recipient list in international format.",
            "examples": [["905xxxxxxxx1", "905xxxxxxxx2"]]
          }
        }
      },
      "GroupSendMixedRequest": {
        "type": "object",
        "required": ["api_key", "title", "text", "sentto"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" },
          "title": { "type": "string", "examples": ["TURKEYSMS"] },
          "text": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Per-recipient message bodies. Index-matched with sentto."
          },
          "sentto": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Recipient list. Must have the same length as text."
          }
        }
      },
      "GroupSendResponse": {
        "type": "object",
        "properties": {
          "result": { "type": "boolean", "examples": [true] },
          "result_code": { "type": "string", "examples": ["TS-1024"] },
          "result_message": { "type": "string" },
          "sms_id": { "type": "integer", "description": "Batch identifier." },
          "total_recipients": { "type": "integer" },
          "success_count": { "type": "integer" },
          "number_of_sms": { "type": "integer" }
        }
      },
      "BalanceRequest": {
        "type": "object",
        "required": ["api_key"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" }
        }
      },
      "BalanceResponse": {
        "type": "object",
        "properties": {
          "result": { "type": "boolean", "examples": [true] },
          "result_code": { "type": "string", "examples": ["TS-1040"] },
          "result_message": { "type": "string", "examples": ["Balance inquiry successful."] },
          "balance_main": { "type": "integer", "examples": [1500] }
        }
      },
      "SenderIdCheckRequest": {
        "type": "object",
        "required": ["api_key"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" }
        }
      },
      "SenderIdResponse": {
        "type": "object",
        "properties": {
          "result": { "type": "boolean", "examples": [true] },
          "result_code": { "type": "string", "examples": ["TS-1040"] },
          "sender_ids": {
            "type": "array",
            "description": "Approved SenderIDs on the account.",
            "items": {
              "type": "object",
              "properties": {
                "id": { "type": "integer" },
                "title": { "type": "string" },
                "status": { "type": "string" }
              }
            }
          }
        }
      },
      "SmsStatusRequest": {
        "type": "object",
        "required": ["api_key", "sms_id"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" },
          "sms_id": { "type": "integer", "description": "Identifier returned by a send call." }
        }
      },
      "SmsStatusResponse": {
        "type": "object",
        "properties": {
          "result": { "type": "boolean", "examples": [true] },
          "result_code": { "type": "string", "examples": ["TS-1064"] },
          "sms_id": { "type": "integer" },
          "status": {
            "type": "string",
            "description": "Current delivery state, reported using the documented delivery lifecycle model (queued, sent, delivered, failed, expired). Operator-level delivery reports are mapped into this model."
          }
        }
      },
      "ReportsBasicRequest": {
        "type": "object",
        "required": ["api_key", "sms_id"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" },
          "sms_id": { "type": "integer", "description": "Campaign / batch identifier." }
        }
      },
      "ReportsBasicResponse": {
        "type": "object",
        "properties": {
          "result": { "type": "boolean", "examples": [true] },
          "result_code": { "type": "string", "examples": ["TS-1064"] },
          "total": { "type": "integer" },
          "delivered": { "type": "integer" },
          "failed": { "type": "integer" }
        }
      },
      "ReportsDetailedRequest": {
        "type": "object",
        "required": ["api_key", "sms_id"],
        "properties": {
          "api_key": { "$ref": "#/components/schemas/ApiKeyField" },
          "sms_id": { "type": "integer", "description": "Campaign / batch identifier." },
          "page": { "type": "integer", "minimum": 1, "default": 1, "description": "Page number. Up to 500 rows per page." }
        }
      },
      "ReportsDetailedResponse": {
        "type": "object",
        "properties": {
          "result": { "type": "boolean", "examples": [true] },
          "result_code": { "type": "string", "examples": ["TS-1064"] },
          "page": { "type": "integer" },
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "sentto": { "type": "string" },
                "status": { "type": "string", "description": "Per-recipient delivery state, following the documented delivery lifecycle model." }
              }
            }
          }
        }
      },
      "WebhookEvent": {
        "type": "object",
        "description": "Event payload pushed to your configured webhook URL.",
        "properties": {
          "event_type": {
            "type": "string",
            "enum": ["sms.sent", "sms.delivered", "sms.failed", "otp.verified", "key.test"],
            "description": "The event that triggered the callback."
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "ISO-8601 event time. Also present in the X-TurkeySMS-Timestamp header."
          },
          "data": {
            "type": "object",
            "description": "Event payload.",
            "properties": {
              "sms_id": { "type": "integer" },
              "status": {
                "type": "string",
                "enum": ["sent", "delivered", "failed"],
                "description": "Delivery state. Absent for key.test events."
              }
            }
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Standard failure envelope. Inspect result_code for the stable machine code.",
        "properties": {
          "result": { "type": "boolean", "examples": [false] },
          "result_code": {
            "type": "string",
            "description": "Stable TS-#### code. See x-responseCodes for the catalogue.",
            "examples": ["TS-1031"]
          },
          "result_message": { "type": "string", "examples": ["Invalid API key."] }
        }
      }
    }
  }
}
