---
title: "Send a message"
method: POST
path: "/messages"
tags: ["Messages"]
---

# Send a message

`POST /messages`

Send a message with a Phone Number, Alphanumeric Sender ID, Short Code or Number Pool.

This endpoint allows you to send a message with any messaging resource.
Current messaging resources include: long-code, short-code, number-pool, and
alphanumeric-sender-id.

## Request body

- CreateMessageRequest
  - `from` string — Sending address (+E.164 formatted phone number, alphanumeric sender ID, or short code). **Required if sending with a phone number, short code, or alphanumeric sender ID.**
  - `messaging_profile_id` string — Unique identifier for a messaging profile. **Required if sending via number pool or with an alphanumeric sender ID.**
  - `to` string, required — Receiving address (+E.164 formatted phone number or short code).
  - `text` string — Message body (i.e., content) as a non-empty string. **Required for SMS**
  - `subject` string — Subject of multimedia message
  - `media_urls` string[] — A list of media URLs. The total media size must be less than 1 MB. **Required for MMS**
  - `webhook_url` string, url — The URL where webhooks related to this message will be sent.
  - `webhook_failover_url` string, url — The failover URL where webhooks related to this message will be sent if sending to the primary URL fails.
  - `use_profile_webhooks` boolean — If the profile this number is associated with has webhooks, use them for delivery notifications. If webhooks are also specified on the message itself, they will be attempted first, then those on the profile.
  - `type` 'SMS' | 'MMS' — The protocol for sending the message, either SMS or MMS.
  - `auto_detect` boolean — Automatically detect if an SMS message is unusually long and exceeds a recommended limit of message parts.
  - `send_at` string, date-time, nullable — ISO 8601 formatted date indicating when to send the message - accurate up till a minute.
  - `encoding` 'auto' | 'gsm7' | 'ucs2' — Encoding to use for the message. `auto` (default) uses smart encoding to automatically select the most efficient encoding. `gsm7` forces GSM-7 encoding (returns 400 if message contains characters that cannot be encoded). `ucs2` forces UCS-2 encoding and disables smart encoding. When set, this overrides the messaging profile's `smart_encoding` setting.

## Response `200`

Successful response with details about a message.

- object
  - `data` MessagingOutboundMessagePayload
    - `record_type` 'message' — Identifies the type of the resource.
    - `direction` 'outbound' — The direction of the message. Inbound messages are sent to you whereas outbound messages are sent from you.
    - `id` string, uuid — Identifies the type of resource.
    - `type` 'SMS' | 'MMS' — The type of message.
    - `messaging_profile_id` string — Unique identifier for a messaging profile.
    - `organization_id` string, uuid — The id of the organization the messaging profile belongs to.
    - `from` object
      - `phone_number` string — Sending address (+E.164 formatted phone number, alphanumeric sender ID, or short code).
      - `carrier` string — The carrier of the receiver.
      - `line_type` 'Wireline' | 'Wireless' | 'VoWiFi' | 'VoIP' | 'Pre-Paid Wireless' | '' — The line-type of the receiver.
    - `to` object[]
      - `phone_number` string — Receiving address (+E.164 formatted phone number or short code).
      - `status` 'queued' | 'sending' | 'sent' | 'expired' | 'sending_failed' | 'delivery_unconfirmed' | 'delivered' | 'delivery_failed' — The delivery status of the message.
      - `carrier` string — The carrier of the receiver.
      - `line_type` 'Wireline' | 'Wireless' | 'VoWiFi' | 'VoIP' | 'Pre-Paid Wireless' | '' — The line-type of the receiver.
    - `cc` object[]
      - `phone_number` string — Receiving address (+E.164 formatted phone number or short code).
      - `status` 'queued' | 'sending' | 'sent' | 'delivered' | 'sending_failed' | 'delivery_failed' | 'delivery_unconfirmed'
      - `carrier` string — The carrier of the receiver.
      - `line_type` 'Wireline' | 'Wireless' | 'VoWiFi' | 'VoIP' | 'Pre-Paid Wireless' | '' — The line-type of the receiver.
    - `text` string — Message body (i.e., content) as a non-empty string. **Required for SMS**
    - `num_chars` integer — The number of characters in the message text
    - `subject` string, nullable — Subject of multimedia message
    - `media` object[]
      - `url` string, url — The url of the media requested to be sent.
      - `content_type` string, nullable — The MIME type of the requested media.
      - `sha256` string, nullable — The SHA256 hash of the requested media.
      - `size` integer, nullable — The size of the requested media.
    - `webhook_url` string, url, nullable — The URL where webhooks related to this message will be sent.
    - `webhook_failover_url` string, url, nullable — The failover URL where webhooks related to this message will be sent if sending to the primary URL fails.
    - `encoding` string — Encoding scheme used for the message body.
    - `parts` integer — Number of parts into which the message's body must be split.
    - `tags` string[] — Tags associated with the resource.
    - `cost` object, nullable
      - `amount` string — The amount deducted from your account.
      - `currency` string — The ISO 4217 currency identifier.
    - `cost_breakdown` object, nullable — Detailed breakdown of the message cost components.
      - `carrier_fee` object
        - `amount` string — The carrier fee amount.
        - `currency` string — The ISO 4217 currency identifier.
      - `rate` object
        - `amount` string — The rate amount applied.
        - `currency` string — The ISO 4217 currency identifier.
    - `tcr_campaign_id` string, nullable — The Campaign Registry (TCR) campaign ID associated with the message.
    - `tcr_campaign_billable` boolean — Indicates whether the TCR campaign is billable.
    - `tcr_campaign_registered` string, nullable — The registration status of the TCR campaign.
    - `received_at` string, date-time — ISO 8601 formatted date indicating when the message request was received.
    - `sent_at` string, date-time, nullable — ISO 8601 formatted date indicating when the message was sent.
    - `completed_at` string, date-time, nullable — ISO 8601 formatted date indicating when the message was finalized.
    - `valid_until` string, date-time, nullable — Message must be out of the queue by this time or else it will be discarded and marked as 'sending_failed'. Once the message moves out of the queue, this field will be nulled
    - `errors` MessagingError0b38e7044b[] — These errors may point at addressees when referring to unsuccessful/unconfirmed delivery statuses.
      - `code` string, required
      - `title` string, required
      - `detail` string
      - `source` object
        - `pointer` string, json-pointer — JSON pointer (RFC6901) to the offending entity.
        - `parameter` string — Indicates which query parameter caused the error.
      - `meta` object
    - `smart_encoding_applied` boolean — Indicates whether smart encoding was applied to this message. When `true`, one or more Unicode characters were automatically replaced with GSM-7 equivalents to reduce segment count and cost. The original message text is preserved in webhooks.
    - `wait_seconds` number, float, nullable — Seconds the message is queued due to rate limiting before being sent to the carrier. Represents the maximum wait across all applicable rate limits (account, carrier, campaign). 0.0 = no queuing delay.

## Other responses

- `4XX` — Unexpected error

---

[API](https://skmtc.net/team-telnyx/apis/telnyx-api-2.md) · [All operations](https://skmtc.net/team-telnyx/apis/telnyx-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/team-telnyx/telnyx-api-2/versions/8f5f4e537994/schema)
