ClickSend Delivery Receipts & Inbound API

Retrieve delivery receipts and inbound messages for SMS, MMS, voice and email, mark receipts and inbound messages as read, and configure automation rules that forward receipts and inbound messages to your webhook URLs via /sms/receipts, /sms/inbound, /voice/receipts, /mms/receipts and /automations/*.

OpenAPI Specification

clicksend-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: ClickSend v3 API
  description: >-
    Representative OpenAPI 3.x description of the ClickSend v3 REST API, a single
    cloud communications API for SMS, MMS, voice / text-to-speech, transactional
    email, and physical post (letters and postcards), plus contacts and lists,
    delivery receipts, inbound handling, and account/balance. All requests use
    HTTP Basic authentication with your ClickSend username and API key. This
    document models a representative subset of the documented endpoints; see the
    official reference for the complete surface.
  termsOfService: https://www.clicksend.com/au/legal/terms-of-service/
  contact:
    name: ClickSend Support
    email: support@clicksend.com
    url: https://developers.clicksend.com/
  version: '3.1'
servers:
  - url: https://rest.clicksend.com/v3
    description: ClickSend v3 production API
security:
  - basicAuth: []
tags:
  - name: SMS
    description: Send and view SMS messages.
  - name: MMS
    description: Send and view MMS messages.
  - name: Voice
    description: Send and view voice (text-to-speech) messages.
  - name: Email
    description: Send and view transactional email.
  - name: Post Letter
    description: Print and mail physical letters.
  - name: Post Postcard
    description: Print and mail physical postcards.
  - name: Contact
    description: Manage contacts.
  - name: ContactList
    description: Manage contact lists.
  - name: Receipts
    description: Delivery receipts, inbound messages, and automations.
  - name: Account
    description: Account details, usage, and balance.
paths:
  /sms/send:
    post:
      tags:
        - SMS
      operationId: smsSendPost
      summary: Send one or more SMS messages.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SmsMessageCollection'
      responses:
        '200':
          description: Messages queued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /sms/price:
    post:
      tags:
        - SMS
      operationId: smsPricePost
      summary: Calculate the total price for one or more SMS messages before sending.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SmsMessageCollection'
      responses:
        '200':
          description: Price calculated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /sms/history:
    get:
      tags:
        - SMS
      operationId: smsHistoryGet
      summary: Get a paginated list of sent SMS messages.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of SMS messages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /sms/{message_id}/cancel:
    put:
      tags:
        - SMS
      operationId: smsCancelPut
      summary: Cancel a queued SMS message that has not yet been sent.
      parameters:
        - name: message_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Message cancelled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /sms/templates:
    get:
      tags:
        - SMS
      operationId: smsTemplatesGet
      summary: Get a list of saved SMS templates.
      responses:
        '200':
          description: A list of SMS templates.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /mms/send:
    post:
      tags:
        - MMS
      operationId: mmsSendPost
      summary: Send one or more MMS messages with a media file and subject.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MmsMessageCollection'
      responses:
        '200':
          description: MMS queued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /mms/price:
    post:
      tags:
        - MMS
      operationId: mmsPricePost
      summary: Calculate the total price for one or more MMS messages before sending.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MmsMessageCollection'
      responses:
        '200':
          description: Price calculated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /mms/history:
    get:
      tags:
        - MMS
      operationId: mmsHistoryGet
      summary: Get a paginated list of sent MMS messages.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of MMS messages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /voice/send:
    post:
      tags:
        - Voice
      operationId: voiceSendPost
      summary: Send one or more voice (text-to-speech) messages.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VoiceMessageCollection'
      responses:
        '200':
          description: Voice messages queued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /voice/price:
    post:
      tags:
        - Voice
      operationId: voicePricePost
      summary: Calculate the total price for one or more voice messages before sending.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VoiceMessageCollection'
      responses:
        '200':
          description: Price calculated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /voice/lang:
    get:
      tags:
        - Voice
      operationId: voiceLangGet
      summary: Get a list of supported voice languages and voices.
      responses:
        '200':
          description: A list of supported languages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /voice/{message_id}/cancel:
    put:
      tags:
        - Voice
      operationId: voiceCancelPut
      summary: Cancel a queued voice message.
      parameters:
        - name: message_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Voice message cancelled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /email/send:
    post:
      tags:
        - Email
      operationId: emailSendPost
      summary: Send a transactional email from a verified sender address.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Email'
      responses:
        '200':
          description: Email queued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /email/price:
    post:
      tags:
        - Email
      operationId: emailPricePost
      summary: Calculate the price of an email before sending.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Email'
      responses:
        '200':
          description: Price calculated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /email/history:
    get:
      tags:
        - Email
      operationId: emailHistoryGet
      summary: Get a paginated list of sent emails.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of emails.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /email/addresses:
    get:
      tags:
        - Email
      operationId: emailAddressesGet
      summary: Get a list of verified email from-addresses.
      responses:
        '200':
          description: A list of verified email addresses.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /post/letters/send:
    post:
      tags:
        - Post Letter
      operationId: postLettersSendPost
      summary: Print and mail one or more letters from an uploaded PDF.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostLetter'
      responses:
        '200':
          description: Letters queued for print and mail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /post/letters/price:
    post:
      tags:
        - Post Letter
      operationId: postLettersPricePost
      summary: Calculate the price of a letter before sending.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostLetter'
      responses:
        '200':
          description: Price calculated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /post/letters/history:
    get:
      tags:
        - Post Letter
      operationId: postLettersHistoryGet
      summary: Get a paginated list of sent letters.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of letters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /post/letters/detect-address:
    post:
      tags:
        - Post Letter
      operationId: postLettersDetectAddressPost
      summary: Detect and validate a delivery address on an uploaded letter PDF.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_url:
                  type: string
      responses:
        '200':
          description: Address detection result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /post/postcards/send:
    post:
      tags:
        - Post Postcard
      operationId: postPostcardsSendPost
      summary: Print and mail one or more postcards from an uploaded PDF.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPostcard'
      responses:
        '200':
          description: Postcards queued for print and mail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /post/postcards/price:
    post:
      tags:
        - Post Postcard
      operationId: postPostcardsPricePost
      summary: Calculate the price of a postcard before sending.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPostcard'
      responses:
        '200':
          description: Price calculated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /post/postcards/history:
    get:
      tags:
        - Post Postcard
      operationId: postPostcardsHistoryGet
      summary: Get a paginated list of sent postcards.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of postcards.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /uploads:
    post:
      tags:
        - Post Letter
      operationId: uploadsPost
      summary: Upload a media file (PDF, image) to reference in post, MMS, or campaigns.
      parameters:
        - name: convert
          in: query
          required: true
          schema:
            type: string
            enum: [mms, post, campaign]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Upload'
      responses:
        '200':
          description: File uploaded; returns a referenceable URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /lists:
    get:
      tags:
        - ContactList
      operationId: listsGet
      summary: Get a paginated list of contact lists.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of contact lists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
    post:
      tags:
        - ContactList
      operationId: listsPost
      summary: Create a new contact list.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactList'
      responses:
        '200':
          description: Contact list created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /lists/{list_id}/contacts:
    get:
      tags:
        - Contact
      operationId: listContactsGet
      summary: Get a paginated list of contacts within a list.
      parameters:
        - name: list_id
          in: path
          required: true
          schema:
            type: integer
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of contacts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
    post:
      tags:
        - Contact
      operationId: listContactsPost
      summary: Create a new contact within a list.
      parameters:
        - name: list_id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Contact'
      responses:
        '200':
          description: Contact created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /lists/{list_id}/import:
    post:
      tags:
        - ContactList
      operationId: listImportPost
      summary: Import contacts into a list from an uploaded file.
      parameters:
        - name: list_id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_url:
                  type: string
                field_order:
                  type: array
                  items:
                    type: string
      responses:
        '200':
          description: Contacts imported.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /search/contacts-lists:
    get:
      tags:
        - ContactList
      operationId: searchContactsLists
      summary: Search across contacts and lists.
      parameters:
        - name: q
          in: query
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: Search results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /sms/receipts:
    get:
      tags:
        - Receipts
      operationId: smsReceiptsGet
      summary: Get a paginated list of SMS delivery receipts.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of delivery receipts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /sms/receipts-read:
    put:
      tags:
        - Receipts
      operationId: smsReceiptsReadPut
      summary: Mark SMS delivery receipts as read.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                date_before:
                  type: integer
      responses:
        '200':
          description: Receipts marked as read.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /sms/inbound:
    get:
      tags:
        - Receipts
      operationId: smsInboundGet
      summary: Get a paginated list of inbound SMS messages.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of inbound SMS.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /voice/receipts:
    get:
      tags:
        - Receipts
      operationId: voiceReceiptsGet
      summary: Get a paginated list of voice delivery receipts.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of voice receipts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /mms/receipts:
    get:
      tags:
        - Receipts
      operationId: mmsReceiptsGet
      summary: Get a paginated list of MMS delivery receipts.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of MMS receipts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /automations/sms/receipts:
    get:
      tags:
        - Receipts
      operationId: automationsSmsReceiptsGet
      summary: Get the configured SMS delivery-receipt automation (webhook) rules.
      responses:
        '200':
          description: A list of receipt automation rules.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
    post:
      tags:
        - Receipts
      operationId: automationsSmsReceiptsPost
      summary: Create an SMS delivery-receipt automation that forwards receipts to a webhook URL.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AutomationRule'
      responses:
        '200':
          description: Automation rule created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /automations/sms/inbound:
    get:
      tags:
        - Receipts
      operationId: automationsSmsInboundGet
      summary: Get the configured inbound-SMS automation (webhook) rules.
      responses:
        '200':
          description: A list of inbound automation rules.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
    post:
      tags:
        - Receipts
      operationId: automationsSmsInboundPost
      summary: Create an inbound-SMS automation that forwards inbound messages to a webhook URL.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AutomationRule'
      responses:
        '200':
          description: Automation rule created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /account:
    get:
      tags:
        - Account
      operationId: accountGet
      summary: Get account details, including the current credit balance.
      responses:
        '200':
          description: Account details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /account/usage/{year}/{month}/subaccount:
    get:
      tags:
        - Account
      operationId: accountUsageBySubaccountGet
      summary: Get account usage broken down by subaccount for a given month.
      parameters:
        - name: year
          in: path
          required: true
          schema:
            type: integer
        - name: month
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Usage by subaccount.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
  /subaccounts:
    get:
      tags:
        - Account
      operationId: subaccountsGet
      summary: Get a paginated list of subaccounts.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A paginated list of subaccounts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        HTTP Basic authentication using your ClickSend username and API key.
        The username is your ClickSend account username; the password is your
        API key from the ClickSend dashboard.
  parameters:
    page:
      name: page
      in: query
      required: false
      schema:
        type: integer
        default: 1
      description: Page number for paginated results.
    limit:
      name: limit
      in: query
      required: false
      schema:
        type: integer
        default: 10
      description: Number of results per page.
  schemas:
    ApiResponse:
      type: object
      properties:
        http_code:
          type: integer
          example: 200
        response_code:
          type: string
          example: SUCCESS
        response_msg:
          type: string
        data:
          type: object
    SmsMessage:
      type: object
      properties:
        source:
          type: string
          description: Source of the message (e.g., php, sdk).
          default: sdk
        from:
          type: string
          description: Sender ID or dedicated number.
        body:
          type: string
          description: Message body.
        to:
          type: string
          description: Recipient number in E.164 format.
        schedule:
          type: integer
          description: Unix timestamp to schedule delivery.
        custom_string:
          type: string
        country:
          type: string
        list_id:
          type: integer
      required:
        - body
        - to
    SmsMessageCollection:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/SmsMessage'
      required:
        - messages
    MmsMessage:
      type: object
      properties:
        source:
          type: string
          default: sdk
        from:
          type: string
        body:
          type: string
        to:
          type: string
        subject:
          type: string
        media_file:
          type: string
          description: URL of the uploaded media file.
        schedule:
          type: integer
        country:
          type: string
      required:
        - to
        - subject
        - media_file
    MmsMessageCollection:
      type: object
      properties:
        media_file:
          type: string
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MmsMessage'
      required:
        - messages
    VoiceMessage:
      type: object
      properties:
        source:
          type: string
          default: sdk
        body:
          type: string
          description: Text to be read aloud via text-to-speech.
        to:
          type: string
        lang:
          type: string
          description: Language / voice code, e.g. en-us.
        voice:
          type: string
          enum: [female, male]
        schedule:
          type: integer
        custom_string:
          type: string
        country:
          type: string
        machine_detection:
          type: integer
        require_input:
          type: integer
      required:
        - body
        - to
        - lang
        - voice
    VoiceMessageCollection:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/VoiceMessage'
      required:
        - messages
    Email:
      type: object
      properties:
        to:
          type: array
          items:
            type: object
            properties:
              email:
                type: string
              name:
                type: string
        cc:
          type: array
          items:
            type: object
        bcc:
          type: array
          items:
            type: object
        from:
          type: object
          properties:
            email_address_id:
              type: integer
            name:
              type: string
        subject:
          type: string
        body:
          type: string
        attachments:
          type: array
          items:
            type: object
        schedule:
          type: integer
      required:
        - to
        - from
        - subject
        - body
    PostLetter:
      type: object
      properties:
        file_url:
          type: string
          description: URL of the uploaded PDF to print and mail.
        template_used:
          type: integer
        colour:
          type: integer
          description: 1 for colour, 0 for black and white.
        duplex:
          type: integer
          description: 1 for double-sided, 0 for single-sided.
        priority_post:
          type: integer
        recipients:
          type: array
          items:
            $ref: '#/components/schemas/PostRecipient'
      required:
        - file_url
        - recipients
    PostPostcard:
      type: object
      properties:
        file_url:
          type: string
          description: URL of the uploaded PDF design to print and mail.
        recipients:
          type: array
          items:
            $ref: '#/components/schemas/PostRecipient'
      required:
        - file_url
        - recipients
    PostRecipient:
      type: object
      properties:
        address_name:
          type: string
        address_line_1:
          type: string
        address_line_2:
          type: string
        address_city:
          type: string
        address_state:
          type: string
        address_postal_code:
          type: string
        address_country:
          type: string
        return_address_id:
          type: integer
        schedule:
          type: integer
      required:
        - address_name
        - address_line_1
        - address_city
        - address_postal_code
        - address_country
    ContactList:
      type: object
      properties:
        list_name:
          type: string
      required:
        - list_name
    Contact:
      type: object
      properties:
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
        phone_number:
          type: string
        fax_number:
          type: string
        organization_name:
          type: string
        address_line_1:
          type: string
        address_city:
          type: string
        address_state:
          type: string
        address_postal_code:
          type: string
        address_country:
          type: string
        custom_1:
          type: string
    Upload:
      type: object
      properties:
        content:
          type: string
          description: Base64-encoded or hosted file content reference.
      required:
        - content
    AutomationRule:
      type: object
      properties:
        rule_name:
          type: string
        url:
          type: string
          description: Webhook URL to which events are forwarded.
        dedicated_number:
          type: string
        enabled:
          type: integer
      required:
        - url