OpenAPI Specification
On this page
OpenAPI 3.1 description of the TSG Global REST APIs (SMS, MMS, MMS templates, number configuration) with interactive operation blocks and a downloadable spec.
The REST APIs are described in an OpenAPI 3.1 document. Use it to generate clients, import into Postman or Insomnia, or feed to an AI assistant. The GraphQL APIs (number ordering, CDR reports, compliance forms) are not covered; see GraphQL API & Authentication.
Download: tsg-global-rest.json
The blocks below render straight from the spec, so they stay in step with it.
SMS
Send an SMS message
Sends an SMS to one or more recipients. Recipients are de-duplicated. Long messages are split into
GSM-standard segments (max 6 for GSM-7 and UCS-2, 5 for Latin-1). Scheduling with `deliver_at` is
supported up to 2 years ahead. The response is keyed by recipient number.
POST /messages
Request body schema
{
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SendSmsRequest"
}
}
}
}Responses
{
"200": {
"description": "Message accepted. One Message object per recipient.",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/SmsMessage"
}
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
},
"422": {
"$ref": "#/components/responses/InvalidParams"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "SMS",
"description": "Send SMS and fetch messages. Host sms.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"SendSmsRequest": {
"type": "object",
"required": [
"from",
"to",
"body"
],
"properties": {
"from": {
"type": "string",
"description": "E.164 number or alphanumeric sender ID."
},
"to": {
"type": "array",
"items": {
"type": "string"
},
"description": "E.164 recipients; de-duplicated."
},
"body": {
"type": "string",
"description": "UTF-8 text, or base64 when a custom encoding is set."
},
"encoding": {
"type": "integer",
"enum": [
0,
3,
8
],
"description": "0 GSM-7, 3 Latin-1, 8 UCS-2."
},
"force_encoding": {
"type": "integer",
"enum": [
0,
3,
8
]
},
"registered_delivery": {
"type": "integer",
"enum": [
1,
2,
3
],
"description": "1 always, 2 on success, 3 on error."
},
"deliver_at": {
"type": "string",
"format": "date-time",
"description": "UTC, up to 2 years ahead."
},
"expires_at": {
"type": "string",
"format": "date-time"
}
}
},
"SmsMessage": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"object": {
"type": "string",
"enum": [
"sms"
]
},
"type": {
"type": "string",
"enum": [
"inbound",
"outbound"
]
},
"from": {
"type": "string"
},
"to": {
"type": "string"
},
"body": {
"type": "string"
},
"encoding": {
"type": "integer"
},
"status": {
"type": "string"
},
"delivery_receipt": {},
"udh": {
"type": [
"object",
"null"
],
"properties": {
"ref_num": {
"type": [
"integer",
"null"
]
},
"count": {
"type": [
"integer",
"null"
]
},
"seq_num": {
"type": [
"integer",
"null"
]
}
}
},
"parts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
}
}
}
},
"location": {
"type": [
"string",
"null"
]
},
"inserted_at": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"scheduled_at": {
"type": [
"string",
"null"
]
},
"processed_at": {
"type": [
"string",
"null"
]
},
"delivered_at": {
"type": [
"string",
"null"
]
},
"expires_at": {
"type": [
"string",
"null"
]
}
}
},
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
},
"responses": {
"Unauthenticated": {
"description": "Missing or invalid API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"InvalidParams": {
"description": "Request understood but parameters invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
},
"paths": {
"/messages": {
"post": {
"tags": [
"SMS"
],
"operationId": "sendSms",
"summary": "Send an SMS message",
"description": "Sends an SMS to one or more recipients. Recipients are de-duplicated. Long messages are split into\nGSM-standard segments (max 6 for GSM-7 and UCS-2, 5 for Latin-1). Scheduling with `deliver_at` is\nsupported up to 2 years ahead. The response is keyed by recipient number.\n",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SendSmsRequest"
}
}
}
},
"responses": {
"200": {
"description": "Message accepted. One Message object per recipient.",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/SmsMessage"
}
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
},
"422": {
"$ref": "#/components/responses/InvalidParams"
}
}
}
}
}
}Fetch a message or message part
Returns a single message by message id or part id. Intended for testing; register a webhook for production
traffic (see https://support.tsgglobal.com/docs/api-reference/programmable-sms/receive-an-sms-message.md).
GET /messages/{uuid}
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| uuid | path | Yes |
Responses
{
"200": {
"description": "The message.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SmsMessage"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
},
"404": {
"$ref": "#/components/responses/NotFound"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "SMS",
"description": "Send SMS and fetch messages. Host sms.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"SmsMessage": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"object": {
"type": "string",
"enum": [
"sms"
]
},
"type": {
"type": "string",
"enum": [
"inbound",
"outbound"
]
},
"from": {
"type": "string"
},
"to": {
"type": "string"
},
"body": {
"type": "string"
},
"encoding": {
"type": "integer"
},
"status": {
"type": "string"
},
"delivery_receipt": {},
"udh": {
"type": [
"object",
"null"
],
"properties": {
"ref_num": {
"type": [
"integer",
"null"
]
},
"count": {
"type": [
"integer",
"null"
]
},
"seq_num": {
"type": [
"integer",
"null"
]
}
}
},
"parts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
}
}
}
},
"location": {
"type": [
"string",
"null"
]
},
"inserted_at": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"scheduled_at": {
"type": [
"string",
"null"
]
},
"processed_at": {
"type": [
"string",
"null"
]
},
"delivered_at": {
"type": [
"string",
"null"
]
},
"expires_at": {
"type": [
"string",
"null"
]
}
}
},
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
},
"responses": {
"Unauthenticated": {
"description": "Missing or invalid API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"NotFound": {
"description": "Resource not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
},
"paths": {
"/messages/{uuid}": {
"get": {
"tags": [
"SMS"
],
"operationId": "getSms",
"summary": "Fetch a message or message part",
"description": "Returns a single message by message id or part id. Intended for testing; register a webhook for production\ntraffic (see https://support.tsgglobal.com/docs/api-reference/programmable-sms/receive-an-sms-message.md).\n",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "The message.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SmsMessage"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
},
"404": {
"$ref": "#/components/responses/NotFound"
}
}
}
}
}
}MMS
Send an MMS message
Sends an MMS. The body mirrors an MM4 forward request. Parts may be `plain` text, a public `uri`
(3 MB max, server must answer HEAD and GET with Content-Length), an RFC 2397 `data-uri` (65,535 chars max)
or an `embedded` body (1 MB max). A 200 means the message was accepted for processing, not delivered.
Set `request_delivery_reports` to receive DLRs on your inbound webhook.
POST /mms
Request body schema
{
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsForwardRequest"
}
}
}
}Responses
{
"200": {
"description": "Accepted. `data.attributes.messages` carries one `message_id` per recipient, used in DLRs.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsForwardResponse"
}
}
}
},
"400": {
"description": "Malformed JSON (for example unescaped new lines inside strings)."
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "MMS",
"description": "Send MMS. Host mmsc.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"MmsForwardRequest": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"type",
"attributes"
],
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"mms-forward-req"
]
},
"attributes": {
"type": "object",
"required": [
"from",
"to",
"parts"
],
"properties": {
"from": {
"type": "string"
},
"to": {
"type": "array",
"items": {
"type": "string"
}
},
"subject": {
"type": "string"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"expires_in": {
"type": "integer",
"description": "Seconds after receipt."
},
"transaction_id": {
"type": "string"
},
"headers": {
"type": "object"
},
"metadata": {
"type": "object"
},
"request_delivery_reports": {
"type": "boolean",
"default": false
},
"parts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MmsPart"
}
}
}
}
}
}
}
},
"MmsPart": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"plain",
"uri",
"data-uri",
"embedded"
],
"default": "plain"
},
"content_type": {
"type": "string"
},
"content_location": {
"type": "string"
},
"content_encoding": {
"type": "string"
},
"transfer_encoding": {
"type": "string"
},
"body": {
"type": "string"
},
"uri": {
"type": "string"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"metadata": {
"type": "object"
}
}
},
"MmsForwardResponse": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"type": {
"type": "string",
"enum": [
"mms-forward-res"
]
},
"attributes": {
"type": "object",
"properties": {
"inserted_at": {
"type": "string"
},
"transaction_id": {
"type": "string"
},
"from": {
"type": "string"
},
"to": {
"type": "array",
"items": {
"type": "string"
}
},
"subject": {
"type": "string"
},
"headers": {
"type": "object"
},
"messages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"message_id": {
"type": "string",
"format": "uuid"
},
"to": {
"type": "string"
}
}
}
},
"parts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MmsPart"
}
}
}
}
}
}
}
},
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
},
"responses": {
"Unauthenticated": {
"description": "Missing or invalid API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
},
"paths": {
"/mms": {
"post": {
"tags": [
"MMS"
],
"operationId": "sendMms",
"summary": "Send an MMS message",
"description": "Sends an MMS. The body mirrors an MM4 forward request. Parts may be `plain` text, a public `uri`\n(3 MB max, server must answer HEAD and GET with Content-Length), an RFC 2397 `data-uri` (65,535 chars max)\nor an `embedded` body (1 MB max). A 200 means the message was accepted for processing, not delivered.\nSet `request_delivery_reports` to receive DLRs on your inbound webhook.\n",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsForwardRequest"
}
}
}
},
"responses": {
"200": {
"description": "Accepted. `data.attributes.messages` carries one `message_id` per recipient, used in DLRs.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsForwardResponse"
}
}
}
},
"400": {
"description": "Malformed JSON (for example unescaped new lines inside strings)."
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
}
}
}
}
}
}Create an MMS template
Placeholders use `{key}` where key matches `[a-zA-Z_][a-zA-Z0-9_]*`. The response lists the extracted placeholders.
POST /mms/templates
Request body schema
{
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsTemplateRequest"
}
}
}
}Responses
{
"200": {
"description": "The created template.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsTemplateResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "MMS templates",
"description": "Reusable MMS templates with {placeholder} substitution. Host mmsc.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"MmsTemplateRequest": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"type",
"attributes"
],
"properties": {
"type": {
"type": "string",
"enum": [
"mms-template"
]
},
"attributes": {
"type": "object",
"required": [
"name",
"body_template"
],
"properties": {
"name": {
"type": "string"
},
"body_template": {
"type": "string"
},
"subject_template": {
"type": "string"
},
"parts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MmsPart"
}
}
}
}
}
}
}
},
"MmsPart": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"plain",
"uri",
"data-uri",
"embedded"
],
"default": "plain"
},
"content_type": {
"type": "string"
},
"content_location": {
"type": "string"
},
"content_encoding": {
"type": "string"
},
"transfer_encoding": {
"type": "string"
},
"body": {
"type": "string"
},
"uri": {
"type": "string"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"metadata": {
"type": "object"
}
}
},
"MmsTemplateResponse": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/MmsTemplate"
}
}
},
"MmsTemplate": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"type": {
"type": "string",
"enum": [
"mms-template"
]
},
"attributes": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"body_template": {
"type": "string"
},
"subject_template": {
"type": "string"
},
"placeholders": {
"type": "array",
"items": {
"type": "string"
}
},
"parts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MmsPart"
}
},
"inserted_at": {
"type": "string"
},
"updated_at": {
"type": "string"
}
}
}
}
},
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
},
"responses": {
"Unauthenticated": {
"description": "Missing or invalid API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
},
"paths": {
"/mms/templates": {
"post": {
"tags": [
"MMS templates"
],
"operationId": "createMmsTemplate",
"summary": "Create an MMS template",
"description": "Placeholders use `{key}` where key matches `[a-zA-Z_][a-zA-Z0-9_]*`. The response lists the extracted placeholders.",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsTemplateRequest"
}
}
}
},
"responses": {
"200": {
"description": "The created template.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsTemplateResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
}
}
}
}
}
}POST /mms/templates/{id}/send
Send an MMS from a template
POST /mms/templates/{id}/send
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | path | Yes |
Request body schema
{
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsTemplateSendRequest"
}
}
}
}Responses
{
"200": {
"description": "Accepted. Same shape as sending an MMS directly.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsForwardResponse"
}
}
}
},
"404": {
"$ref": "#/components/responses/NotFound"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "MMS templates",
"description": "Reusable MMS templates with {placeholder} substitution. Host mmsc.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"MmsTemplateSendRequest": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"type",
"attributes"
],
"properties": {
"type": {
"type": "string",
"enum": [
"mms-template-send-req"
]
},
"attributes": {
"type": "object",
"required": [
"from",
"to",
"params"
],
"properties": {
"from": {
"type": "string"
},
"to": {
"type": "array",
"items": {
"type": "string"
}
},
"params": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"transaction_id": {
"type": "string"
},
"request_delivery_reports": {
"type": "boolean",
"default": false
},
"metadata": {
"type": "object"
}
}
}
}
}
}
},
"MmsForwardResponse": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"type": {
"type": "string",
"enum": [
"mms-forward-res"
]
},
"attributes": {
"type": "object",
"properties": {
"inserted_at": {
"type": "string"
},
"transaction_id": {
"type": "string"
},
"from": {
"type": "string"
},
"to": {
"type": "array",
"items": {
"type": "string"
}
},
"subject": {
"type": "string"
},
"headers": {
"type": "object"
},
"messages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"message_id": {
"type": "string",
"format": "uuid"
},
"to": {
"type": "string"
}
}
}
},
"parts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MmsPart"
}
}
}
}
}
}
}
},
"MmsPart": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"plain",
"uri",
"data-uri",
"embedded"
],
"default": "plain"
},
"content_type": {
"type": "string"
},
"content_location": {
"type": "string"
},
"content_encoding": {
"type": "string"
},
"transfer_encoding": {
"type": "string"
},
"body": {
"type": "string"
},
"uri": {
"type": "string"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"metadata": {
"type": "object"
}
}
},
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
},
"responses": {
"NotFound": {
"description": "Resource not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
},
"paths": {
"/mms/templates/{id}/send": {
"post": {
"tags": [
"MMS templates"
],
"operationId": "sendMmsFromTemplate",
"summary": "Send an MMS from a template",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsTemplateSendRequest"
}
}
}
},
"responses": {
"200": {
"description": "Accepted. Same shape as sending an MMS directly.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsForwardResponse"
}
}
}
},
"404": {
"$ref": "#/components/responses/NotFound"
}
}
}
}
}
}Number configuration
Get a number's SMS and MMS configuration
Clients must ignore unknown properties; new ones may be added without notice.
GET /v5/dids/{number}
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| number | path | Yes |
Responses
{
"200": {
"description": "Configuration.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NumberConfiguration"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
},
"404": {
"$ref": "#/components/responses/NotFound"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "Number configuration",
"description": "Per-number SMS, MMS and voice settings. Host api-service.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"NumberConfiguration": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"number_type": {
"type": "string",
"enum": [
"long-code",
"short-code",
"toll-free"
]
},
"mms_enabled": {
"type": "boolean"
},
"mms_uri": {
"type": [
"string",
"null"
]
},
"sms_enabled": {
"type": "boolean"
},
"campaign_id": {
"type": [
"string",
"null"
]
},
"compliance_status": {
"type": "string",
"enum": [
"non_compliant",
"pending",
"compliant"
]
},
"sms_status": {
"type": "string",
"enum": [
"NONE",
"PENDING",
"ACTIVE",
"ERROR",
"DSBL-PND"
]
},
"use_case_type": {
"type": "string",
"enum": [
"",
"p2p",
"a2p"
]
},
"nnid": {
"type": [
"string",
"null"
]
},
"sms_post_ver": {
"type": "string",
"enum": [
"smpp",
"postv1",
"postv2",
"post3jam"
]
},
"sms_uri": {
"type": [
"string",
"null"
],
"description": "null means SMPP delivery."
},
"x_api_key_header": {
"type": [
"string",
"null"
]
},
"ten_dlc_registered": {
"type": "boolean"
},
"tmobile_ten_dlc_registered": {
"type": "boolean"
}
}
},
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
},
"responses": {
"Unauthenticated": {
"description": "Missing or invalid API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"NotFound": {
"description": "Resource not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
},
"paths": {
"/v5/dids/{number}": {
"get": {
"tags": [
"Number configuration"
],
"operationId": "getNumberConfiguration",
"summary": "Get a number's SMS and MMS configuration",
"description": "Clients must ignore unknown properties; new ones may be added without notice.",
"parameters": [
{
"name": "number",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Configuration.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NumberConfiguration"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
},
"404": {
"$ref": "#/components/responses/NotFound"
}
}
}
}
}
}Enable, update or disable SMS (and 10DLC assignment) on a number
Strict parameter parsing: unknown fields reject the request. Use `action: add` to enable, `update` to change
settings or attach a campaign, `delete` to disable SMS.
POST /v2/sms-enablement
Request body schema
{
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SmsEnablementRequest"
}
}
}
}Responses
{
"200": {
"description": "`Success`",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
},
"422": {
"$ref": "#/components/responses/InvalidParams"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "Number configuration",
"description": "Per-number SMS, MMS and voice settings. Host api-service.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"SmsEnablementRequest": {
"type": "object",
"required": [
"did",
"action"
],
"properties": {
"did": {
"type": "string"
},
"action": {
"type": "string",
"enum": [
"add",
"update",
"delete"
]
},
"use_case_type": {
"type": "string",
"enum": [
"a2p",
"p2p",
"account_default"
]
},
"p2p_nnid": {
"type": "string"
},
"mms_enable": {
"type": "string",
"enum": [
"true",
"false"
]
},
"mms_routing": {
"type": "string",
"description": "http, https, mm4 or mm4s URL for inbound MMS."
},
"webhook_url": {
"type": "string",
"format": "uri"
},
"webhook_type": {
"type": "string",
"enum": [
"smpp",
"postv1",
"postv2",
"post3jam"
]
},
"x_api_key_header": {
"type": "string"
},
"campaign_id": {
"type": "string",
"description": "10DLC campaign to assign. Sole-proprietor campaigns allow one number."
},
"campaign_sub_id": {
"type": "string"
},
"skip_number_validation": {
"type": "string",
"enum": [
"true"
],
"description": "Only after TSG has accepted your LOA for the number."
}
}
},
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
},
"responses": {
"Unauthenticated": {
"description": "Missing or invalid API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"InvalidParams": {
"description": "Request understood but parameters invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
},
"paths": {
"/v2/sms-enablement": {
"post": {
"tags": [
"Number configuration"
],
"operationId": "smsEnablement",
"summary": "Enable, update or disable SMS (and 10DLC assignment) on a number",
"description": "Strict parameter parsing: unknown fields reject the request. Use `action: add` to enable, `update` to change\nsettings or attach a campaign, `delete` to disable SMS.\n",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SmsEnablementRequest"
}
}
}
},
"responses": {
"200": {
"description": "`Success`",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
},
"422": {
"$ref": "#/components/responses/InvalidParams"
}
}
}
}
}
}Set the inbound SMS webhook for a number
Omitting `webhook_url` switches the number to SMPP delivery. Have SMPP credentials tested first.
POST /v1/sms/webhook
Request body schema
{
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string"
},
"webhook_url": {
"type": "string",
"format": "uri"
},
"webhook_type": {
"type": "string",
"enum": [
"postv2",
"postv1",
"post3jam",
"smpp"
],
"default": "postv2"
},
"x_api_key_header": {
"type": "string",
"description": "Sent back to you as the x-api-key header on every webhook call."
}
}
}
}
}
}Responses
{
"200": {
"description": "`Success`",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "Number configuration",
"description": "Per-number SMS, MMS and voice settings. Host api-service.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"responses": {
"Unauthenticated": {
"description": "Missing or invalid API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"schemas": {
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
}
},
"paths": {
"/v1/sms/webhook": {
"post": {
"tags": [
"Number configuration"
],
"operationId": "setSmsWebhook",
"summary": "Set the inbound SMS webhook for a number",
"description": "Omitting `webhook_url` switches the number to SMPP delivery. Have SMPP credentials tested first.",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string"
},
"webhook_url": {
"type": "string",
"format": "uri"
},
"webhook_type": {
"type": "string",
"enum": [
"postv2",
"postv1",
"post3jam",
"smpp"
],
"default": "postv2"
},
"x_api_key_header": {
"type": "string",
"description": "Sent back to you as the x-api-key header on every webhook call."
}
}
}
}
}
},
"responses": {
"200": {
"description": "`Success`",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
}
}
}
}
}
}Enable MMS on a number or change its inbound MMS URI
The number must already be SMS-enabled and the account MMS-enabled.
POST /v2/dids/{number}/mms/enable
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| number | path | Yes |
Request body schema
{
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"description": "HTTP(S) URL or `mm4://user:pass@host:port` that receives inbound MMS."
}
}
}
}
}
}Responses
{
"200": {
"description": "Updated configuration.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsConfiguration"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "Number configuration",
"description": "Per-number SMS, MMS and voice settings. Host api-service.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"MmsConfiguration": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"mms_enabled": {
"type": "boolean"
},
"mms_uri": {
"type": [
"string",
"null"
]
},
"sms_enabled": {
"type": "boolean"
},
"sms_uri": {
"type": [
"string",
"null"
]
}
}
},
"Error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"unauthenticated",
"unauthorized",
"not_found",
"server_error",
"invalid_params"
]
},
"message": {
"type": "string"
}
}
}
},
"responses": {
"Unauthenticated": {
"description": "Missing or invalid API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
},
"paths": {
"/v2/dids/{number}/mms/enable": {
"post": {
"tags": [
"Number configuration"
],
"operationId": "enableMms",
"summary": "Enable MMS on a number or change its inbound MMS URI",
"description": "The number must already be SMS-enabled and the account MMS-enabled.",
"parameters": [
{
"name": "number",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"description": "HTTP(S) URL or `mm4://user:pass@host:port` that receives inbound MMS."
}
}
}
}
}
},
"responses": {
"200": {
"description": "Updated configuration.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MmsConfiguration"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthenticated"
}
}
}
}
}
}POST /v1/did/priority
Add a voice destination priority
POST /v1/did/priority
Request body schema
{
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DestinationPriority"
}
}
}
}Responses
{
"200": {
"description": "Result code. `-1008-V` or `-1008-P` means added; negative codes below -1000 are errors (see docs).",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
}Complete operation definition and referenced schemas
{
"openapi": "3.1.0",
"info": {
"title": "TSG Global REST APIs",
"version": "2026-09-11"
},
"tags": [
{
"name": "Number configuration",
"description": "Per-number SMS, MMS and voice settings. Host api-service.tsgglobal.world."
}
],
"servers": [
{
"url": "https://sms.tsgglobal.world",
"description": "Programmable SMS (production)"
},
{
"url": "https://mmsc.tsgglobal.world",
"description": "Programmable MMS and MMS templates (production)"
},
{
"url": "https://api-service.tsgglobal.world",
"description": "Phone-number configuration (production)"
},
{
"url": "https://sms-api.staging.tsgglobal.com",
"description": "Programmable SMS (staging)"
},
{
"url": "https://mms-api.staging.tsgglobal.com",
"description": "Programmable MMS (staging)"
}
],
"security": [
{
"bearerAuth": []
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "API key from the Customer Portal, sent as `Authorization: Bearer <api_key>`."
}
},
"schemas": {
"DestinationPriority": {
"type": "object",
"required": [
"did",
"priority",
"destination",
"call_type"
],
"properties": {
"did": {
"type": "string"
},
"priority": {
"type": "integer",
"minimum": 1,
"maximum": 3
},
"destination": {
"type": "string",
"description": "Gateway IP for VOIP, E.164 for PSTN."
},
"call_type": {
"type": "string",
"enum": [
"VOIP",
"PSTN"
],
"description": "Case sensitive."
},
"call_option": {
"type": "string",
"enum": [
"WP",
"NP"
],
"description": "WP sends the DID with a plus, NP without. Case sensitive."
}
}
}
}
},
"paths": {
"/v1/did/priority": {
"post": {
"tags": [
"Number configuration"
],
"operationId": "addDestinationPriority",
"summary": "Add a voice destination priority",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DestinationPriority"
}
}
}
},
"responses": {
"200": {
"description": "Result code. `-1008-V` or `-1008-P` means added; negative codes below -1000 are errors (see docs).",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
}
}
}
}
}Every operation in the spec
| Method | Path | Operation |
|---|---|---|
| POST | /messages |
sendSms |
| GET | /messages/{uuid} |
getSms |
| POST | /mms |
sendMms |
| POST | /mms/templates |
createMmsTemplate |
| GET | /mms/templates |
listMmsTemplates |
| GET | /mms/templates/{id} |
getMmsTemplate |
| DELETE | /mms/templates/{id} |
deleteMmsTemplate |
| POST | /mms/templates/{id}/preview |
previewMmsTemplate |
| POST | /mms/templates/{id}/send |
sendMmsFromTemplate |
| GET | /v5/dids/{number} |
getNumberConfiguration |
| GET | /v1/did/lookup |
lookupNumber |
| POST | /v2/sms-enablement |
smsEnablement |
| POST | /v1/sms/webhook |
setSmsWebhook |
| POST | /v2/dids/{number}/mms/enable |
enableMms |
| POST | /v2/dids/{number}/mms/disable |
disableMms |
| GET | /v1/did/priority/lookup |
listDestinationPriorities |
| POST | /v1/did/priority |
addDestinationPriority |
| PATCH | /v1/did/priority |
updateDestinationPriority |
| DELETE | /v1/did/priority |
deleteDestinationPriority |
The hand-written pages under API Reference remain the place for narrative, encoding rules, webhook payloads and worked examples; the spec is the machine-readable contract.