> ## Documentation Index
> Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Send a message

> Send a text message from your Quo number to one or more recipients.



## OpenAPI

````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-2026-03-30-prod.json post /messages
openapi: 3.1.0
info:
  title: Quo Public API
  version: 1.0.0
  description: API for connecting with Quo.
  contact:
    name: Quo Support
    email: support@quo.com
    url: https://support.quo.com/
  termsOfService: https://www.quo.com/terms
servers:
  - description: Production server
    url: https://api.quo.com
security:
  - apiKey: []
tags:
  - description: Operations related to the organization's A2P registration
    name: A2P Registration
  - description: Operations related to calls placed by an AI agent
    name: Agent Calls
  - description: Operations related to text conversations held by an AI agent
    name: Agent Conversations
  - description: Operations related to calls
    name: Calls
  - description: >-
      Operations related to call summaries, including AI-generated summaries and
      Sona voice assistant summaries
    name: Call Summaries
  - description: >-
      Operations related to call transcripts, including AI-generated transcripts
      and Sona voice assistant transcripts
    name: Call Transcripts
  - description: Operations related to contacts
    name: Contacts
  - description: Operations related to contact shares
    name: Contact Shares
  - description: Operations related to contact notes
    name: Contact Notes
  - description: Operations related to contact properties
    name: Contact Properties
  - description: Operations related to conversations
    name: Conversations
  - description: Operations related to workspace invitations
    name: Invites
  - description: Operations related to text messages
    name: Messages
  - description: Operations related to the organization
    name: Organization
  - description: Operations related to phone numbers
    name: Phone Numbers
  - description: Operations related to users
    name: Users
  - description: Operations related to webhooks
    name: Webhooks
  - description: >-
      Operations related to webhook events, including delivery history and test
      events
    name: Webhook Events
paths:
  /messages:
    post:
      tags:
        - Messages
      summary: Send a message
      description: Send a text message from your Quo number to one or more recipients.
      operationId: sendMessage
      parameters:
        - in: header
          name: Quo-Api-Version
          required: true
          schema:
            type: string
            enum:
              - '2026-03-30'
            description: 'API version header. Supported values: 2026-03-30'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - content
                - from
                - to
              properties:
                content:
                  type: string
                  minLength: 1
                  maxLength: 1600
                  description: The content of your message.
                  examples:
                    - Good morning, your service appointment has been booked.
                  example: Good morning, your service appointment has been booked.
                from:
                  description: >-
                    The ID of the Quo phone number to send from. The sender must
                    be a user on this number.
                  examples:
                    - PN123abc
                  example: PN123abc
                  type: string
                  pattern: ^PN(.*)$
                to:
                  type: array
                  items:
                    anyOf:
                      - type: string
                        description: >-
                          A phone number in E.164 format, including the country
                          code.
                        examples:
                          - '+15555555555'
                        pattern: ^\+[1-9]\d{1,14}$
                        example: '+15555555555'
                      - type: string
                        description: Short code phone number (3-8 digits, no country code)
                        pattern: ^[0-9]{3,8}$
                    description: >-
                      A recipient phone number in E.164 format, or a short code
                      (3-8 digits).
                    examples:
                      - '+15555555555'
                      - '12345'
                    example: '+15555555555'
                  minItems: 1
                  maxItems: 10
                  description: >-
                    The recipients of the message, each a phone number in E.164
                    format or a short code (3-8 digits). More than one sends a
                    group message. At most 10.
                  examples:
                    - - '+15555555555'
                    - - '+15555555555'
                      - '+15555555556'
                  example:
                    - '+15555555555'
                senderUserId:
                  anyOf:
                    - description: >-
                        The unique identifier of the Quo user sending the
                        message. If not provided, the message is attributed to
                        the owner of the phone number it is sent from. The
                        sending user must be a member of the phone number the
                        message is sent from.
                      type: string
                      pattern: ^US(.*)$
                    - type: 'null'
                inboxStatus:
                  anyOf:
                    - description: >-
                        Used to set the status of the related Quo inbox
                        conversation. The default behavior without setting this
                        parameter will be for the message sent to show up as an
                        open conversation in the user's inbox. Setting the
                        parameter to 'done' would move the conversation to the
                        Done inbox view.
                      examples:
                        - done
                      example: done
                      type: string
                      const: done
                    - type: 'null'
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    type: object
                    required:
                      - id
                      - to
                      - from
                      - text
                      - conversationId
                      - direction
                      - status
                      - createdAt
                      - updatedAt
                      - media
                    properties:
                      id:
                        description: The unique identifier of the message.
                        examples:
                          - AC123abc
                        example: AC123abc
                        type: string
                        pattern: ^AC(.*)$
                      to:
                        type: array
                        items:
                          anyOf:
                            - type: string
                              description: >-
                                A phone number in E.164 format, including the
                                country code.
                              examples:
                                - '+15555555555'
                              pattern: ^\+[1-9]\d{1,14}$
                              example: '+15555555555'
                            - type: string
                              description: >-
                                Short code phone number (3-8 digits, no country
                                code)
                              pattern: ^[0-9]{3,8}$
                            - type: string
                              pattern: >-
                                ^([aA](nonymous|NONYMOUS))|([bB](locked|LOCKED))|([rR](estricted|ESTRICTED))$
                            - type: string
                          description: >-
                            A phone number in E.164 format, a short code (3-8
                            digits), a non-phone-number caller ID (Anonymous,
                            Restricted, or Blocked), or another value as
                            delivered by the carrier, such as an alphanumeric
                            sender ID.
                          examples:
                            - '+15555555555'
                            - '12345'
                            - Anonymous
                          example: '+15555555555'
                        description: >-
                          Recipients of the message. Includes your Quo number
                          for incoming messages.
                      from:
                        anyOf:
                          - type: string
                            description: >-
                              A phone number in E.164 format, including the
                              country code.
                            examples:
                              - '+15555555555'
                            pattern: ^\+[1-9]\d{1,14}$
                            example: '+15555555555'
                          - type: string
                            description: >-
                              Short code phone number (3-8 digits, no country
                              code)
                            pattern: ^[0-9]{3,8}$
                          - type: string
                            pattern: >-
                              ^([aA](nonymous|NONYMOUS))|([bB](locked|LOCKED))|([rR](estricted|ESTRICTED))$
                          - type: string
                        description: >-
                          A phone number in E.164 format, a short code (3-8
                          digits), a non-phone-number caller ID (Anonymous,
                          Restricted, or Blocked), or another value as delivered
                          by the carrier, such as an alphanumeric sender ID.
                        examples:
                          - '+15555555555'
                          - '12345'
                          - Anonymous
                        example: '+15555555555'
                      text:
                        type: string
                        description: The content of the message.
                        examples:
                          - Hello, world!
                        example: Hello, world!
                      phoneNumberId:
                        anyOf:
                          - description: >-
                              The unique identifier of the Quo phone number that
                              the message was sent from.
                            examples:
                              - PN123abc
                            example: PN123abc
                            type: string
                            pattern: ^PN(.*)$
                          - type: 'null'
                      conversationId:
                        description: The unique identifier of the conversation.
                        examples:
                          - CN123abc
                        example: CN123abc
                        type: string
                        pattern: ^CN(.*)$
                      direction:
                        type: string
                        enum:
                          - incoming
                          - outgoing
                        description: >-
                          The direction of the message relative to the Quo
                          number.
                        examples:
                          - incoming
                        example: incoming
                      userId:
                        anyOf:
                          - description: >-
                              The unique identifier of the user or system actor
                              (e.g. Sona) who sent the message. Null for
                              incoming messages.
                            examples:
                              - US123abc
                            example: US123abc
                            anyOf:
                              - type: string
                                pattern: ^US(.*)$
                              - type: string
                                pattern: ^SYU(.*)$
                          - type: 'null'
                      status:
                        type: string
                        enum:
                          - queued
                          - sent
                          - delivered
                          - undelivered
                          - received
                          - failed
                        description: The status of the message.
                        examples:
                          - sent
                        example: sent
                      createdAt:
                        description: >-
                          The timestamp when the message was created, in ISO
                          8601 format.
                        examples:
                          - '2022-01-01T00:00:00Z'
                        example: '2022-01-01T00:00:00Z'
                        type: string
                        format: date-time
                      updatedAt:
                        description: >-
                          The timestamp when the message status was last
                          updated, in ISO 8601 format.
                        examples:
                          - '2022-01-01T00:00:00Z'
                        example: '2022-01-01T00:00:00Z'
                        type: string
                        format: date-time
                      media:
                        type: array
                        items:
                          type: object
                          required:
                            - url
                          properties:
                            url:
                              type: string
                              description: The URL of the attached media.
                              examples:
                                - https://example.com/image.png
                              example: https://example.com/image.png
                            type:
                              anyOf:
                                - type: string
                                  description: The MIME type of the attached media.
                                  examples:
                                    - image/png
                                  example: image/png
                                - type: 'null'
                        description: Media attached to the message.
        '400':
          description: >-
            Bad Request | Invalid `to` Phone Number | Unreachable `to` Phone
            Number | User Opted Out | Not TFN Registered | A2P Registration Not
            Approved
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/BadRequestError'
                  - $ref: '#/components/schemas/InvalidToPhoneNumberError'
                  - $ref: '#/components/schemas/UnreachableToPhoneNumberError'
                  - $ref: '#/components/schemas/UserOptedOutError'
                  - $ref: '#/components/schemas/NotTFNRegisteredError'
                  - $ref: '#/components/schemas/A2PRegistrationNotApprovedError'
              examples:
                BadRequestError:
                  summary: Bad Request
                  value:
                    message: The input was invalid
                    docs: https://quo.com/docs
                    title: Bad Request
                    errors:
                      - path: /messageId
                        message: Expected string to match '^AC(.*)$'
                        value: abc123
                        schema:
                          type: TemplateLiteral
                          pattern: ^AC(.*)$
                InvalidToPhoneNumberError:
                  summary: Invalid `to` Phone Number
                  value:
                    message: At least one recipient in `to` is invalid
                    docs: https://quo.com/docs
                    title: Invalid `to` Phone Number
                    trace: '6897907457496870895'
                UnreachableToPhoneNumberError:
                  summary: Unreachable `to` Phone Number
                  value:
                    message: >-
                      At least one recipient in `to` is not currently reachable
                      via SMS
                    docs: https://quo.com/docs
                    title: Unreachable `to` Phone Number
                    trace: '6897907457496870895'
                UserOptedOutError:
                  summary: User Opted Out
                  value:
                    message: User has opted out of receiving messages
                    docs: https://quo.com/docs
                    title: User Opted Out
                    trace: '6897907457496870895'
                NotTFNRegisteredError:
                  summary: Not TFN Registered
                  value:
                    message: >-
                      The toll-free phone number is not registered for TFN
                      messaging
                    docs: https://quo.com/docs
                    title: Not TFN Registered
                    trace: '6897907457496870895'
                A2PRegistrationNotApprovedError:
                  summary: A2P Registration Not Approved
                  value:
                    message: The organization is not approved for A2P
                    docs: https://quo.com/docs
                    title: A2P Registration Not Approved
                    trace: '6897907457496870895'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                required:
                  - message
                  - docs
                  - title
                properties:
                  message:
                    type: string
                  docs:
                    type: string
                    const: https://quo.com/docs
                  title:
                    type: string
                    const: Unauthorized
                  trace:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      required:
                        - path
                        - message
                        - schema
                      properties:
                        path:
                          type: string
                        message:
                          type: string
                        value: {}
                        schema:
                          type: object
                          properties:
                            type:
                              type: string
              example:
                message: Unauthorized
                docs: https://quo.com/docs
                title: Unauthorized
                trace: '6897907457496870895'
        '402':
          description: Not Enough Credits | Subscription Expired
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/NotEnoughCreditsError'
                  - $ref: '#/components/schemas/SubscriptionExpiredError'
              examples:
                NotEnoughCreditsError:
                  summary: Not Enough Credits
                  value:
                    message: >-
                      The organization does not have enough prepaid credits to
                      send the message
                    docs: https://quo.com/docs
                    title: Not Enough Credits
                    trace: '6897907457496870895'
                SubscriptionExpiredError:
                  summary: Subscription Expired
                  value:
                    message: Your subscription has expired
                    docs: https://quo.com/docs
                    title: Subscription Expired
                    trace: '6897907457496870895'
        '403':
          description: >-
            Forbidden | Not Phone Number User | A2P 10DLC Daily Message Cap
            Reached | International Messaging Not Allowed
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ForbiddenError'
                  - $ref: '#/components/schemas/NotPhoneNumberUserError'
                  - $ref: '#/components/schemas/A2P10DLCDailyMessageCapReachedError'
                  - $ref: '#/components/schemas/InternationalMessagingNotAllowedError'
              examples:
                ForbiddenError:
                  summary: Forbidden
                  value:
                    message: The user is forbidden from accessing the message
                    docs: https://quo.com/docs
                    title: Forbidden
                    trace: '6897907457496870895'
                NotPhoneNumberUserError:
                  summary: Not Phone Number User
                  value:
                    message: >-
                      Sender not authorized to send messages from this phone
                      number.
                    docs: https://quo.com/docs
                    title: Not Phone Number User
                    trace: '6897907457496870895'
                A2P10DLCDailyMessageCapReachedError:
                  summary: A2P 10DLC Daily Message Cap Reached
                  value:
                    message: >-
                      A2P 10DLC Daily limit reached. For help increasing this
                      limit, visit https://support.quo.com/help/submit-a-request
                    docs: https://quo.com/docs
                    title: A2P 10DLC Daily Message Cap Reached
                    trace: '6897907457496870895'
                InternationalMessagingNotAllowedError:
                  summary: International Messaging Not Allowed
                  value:
                    message: >-
                      International messaging is not enabled for the sender
                      phone number
                    docs: https://quo.com/docs
                    title: International Messaging Not Allowed
                    trace: '6897907457496870895'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                required:
                  - message
                  - docs
                  - title
                properties:
                  message:
                    type: string
                  docs:
                    type: string
                    const: https://quo.com/docs
                  title:
                    type: string
                    const: Not Found
                  trace:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      required:
                        - path
                        - message
                        - schema
                      properties:
                        path:
                          type: string
                        message:
                          type: string
                        value: {}
                        schema:
                          type: object
                          properties:
                            type:
                              type: string
              example:
                message: Message not found
                docs: https://quo.com/docs
                title: Not Found
                trace: '6897907457496870895'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                type: object
                required:
                  - message
                  - docs
                  - title
                properties:
                  message:
                    type: string
                  docs:
                    type: string
                    const: https://quo.com/docs
                  title:
                    type: string
                    const: Unprocessable Entity
                  trace:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      required:
                        - path
                        - message
                        - schema
                      properties:
                        path:
                          type: string
                        message:
                          type: string
                        value: {}
                        schema:
                          type: object
                          properties:
                            type:
                              type: string
              example:
                message: The message has permanently failed and cannot be retried
                docs: https://quo.com/docs
                title: Unprocessable Entity
                trace: '6897907457496870895'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                required:
                  - message
                  - docs
                  - title
                properties:
                  message:
                    type: string
                  docs:
                    type: string
                    const: https://quo.com/docs
                  title:
                    type: string
                    const: Too Many Requests
                  trace:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      required:
                        - path
                        - message
                        - schema
                      properties:
                        path:
                          type: string
                        message:
                          type: string
                        value: {}
                        schema:
                          type: object
                          properties:
                            type:
                              type: string
              example:
                message: >-
                  The organization has reached its limit for starting new
                  conversations. Try again later.
                docs: https://quo.com/docs
                title: Too Many Requests
                trace: '6897907457496870895'
        '500':
          description: Unexpected Error | Unknown Error
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/UnexpectedError'
                  - $ref: '#/components/schemas/UnknownError'
              examples:
                UnexpectedError:
                  summary: Unexpected Error
                  value:
                    message: We have encountered an unknown error
                    docs: https://quo.com/docs
                    title: Unexpected
                    trace: '6897907457496870895'
                UnknownError:
                  summary: Unknown Error
                  value:
                    message: We have encountered an unknown error
                    docs: https://quo.com/docs
                    title: Unknown
                    trace: '6897907457496870895'
      security:
        - apiKey: []
components:
  schemas:
    BadRequestError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Bad Request
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Bad Request
    InvalidToPhoneNumberError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Invalid `to` Phone Number
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Invalid `to` Phone Number
    UnreachableToPhoneNumberError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Unreachable `to` Phone Number
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Unreachable `to` Phone Number
    UserOptedOutError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: User Opted Out
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: User Opted Out
    NotTFNRegisteredError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Not TFN Registered
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Not TFN Registered
    A2PRegistrationNotApprovedError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: A2P Registration Not Approved
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: A2P Registration Not Approved
    NotEnoughCreditsError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Not Enough Credits
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Not Enough Credits
    SubscriptionExpiredError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Subscription Expired
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Subscription Expired
    ForbiddenError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Forbidden
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Forbidden
    NotPhoneNumberUserError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Not Phone Number User
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Not Phone Number User
    A2P10DLCDailyMessageCapReachedError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: A2P 10DLC Daily Message Cap Reached
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: A2P 10DLC Daily Message Cap Reached
    InternationalMessagingNotAllowedError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: International Messaging Not Allowed
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: International Messaging Not Allowed
    UnexpectedError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Unexpected
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Unexpected Error
    UnknownError:
      type: object
      required:
        - message
        - docs
        - title
      properties:
        message:
          type: string
        docs:
          type: string
          const: https://quo.com/docs
        title:
          type: string
          const: Unknown
        trace:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - schema
            properties:
              path:
                type: string
              message:
                type: string
              value: {}
              schema:
                type: object
                properties:
                  type:
                    type: string
      title: Unknown Error
  securitySchemes:
    apiKey:
      in: header
      name: Authorization
      type: apiKey

````