{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/robase-dev/json-schema/robase-dev-send-smsresponse-schema.json",
  "title": "SendSMSResponse",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/robase-dev-openapi.yaml#/components/schemas/SendSMSResponse",
  "type": "object",
  "required": [
    "id",
    "phone_number",
    "country_code",
    "credit_cost",
    "status",
    "created_at"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "SMS message ID"
    },
    "phone_number": {
      "type": "string",
      "description": "Phone number the SMS was sent to"
    },
    "country_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code"
    },
    "credit_cost": {
      "type": "integer",
      "description": "Credits consumed: the country's rate multiplied by `segments`, since\na carrier bills each part of a split message as its own send.\n"
    },
    "segments": {
      "type": "integer",
      "description": "How many SMS parts the message was split into, and therefore the\nmultiple of the country's rate it was charged at.\n"
    },
    "encoding": {
      "type": "string",
      "enum": [
        "gsm7",
        "ucs2"
      ],
      "description": "The alphabet the message needed, which is what decided the part\nsize: 160 characters per part in `gsm7`, 70 in `ucs2`. A single\ncharacter outside the GSM alphabet moves the whole message to\n`ucs2`.\n"
    },
    "sanitized": {
      "type": "boolean",
      "description": "Whether the body was rewritten before it was measured. With the\nworkspace's `sanitize_symbols` setting on (the default), characters\nGSM-7 cannot carry are replaced with plain equivalents (`₦`\nbecomes `NGN`, curly quotes straighten), and anything with no\nequivalent, such as an emoji, is removed. Letters are never\nremoved, and the rewrite is dropped whenever it would not lower\nthe part count. Turn the setting off to have bodies delivered\nexactly as sent.\n"
    },
    "status": {
      "type": "string",
      "enum": [
        "pending"
      ],
      "description": "Initial status, always `pending`; transitions to\nsent/delivered/failed asynchronously, or to `blocked` if anti-spam\nscreening stops it before dispatch (the credit is then refunded).\n"
    },
    "created_at": {
      "type": "string",
      "format": "date-time"
    }
  }
}