Africa's Talking Voice API

Make outbound calls, transfer and queue calls, and upload media files. Incoming and outgoing calls trigger HTTP callbacks to which you respond with Voice XML actions such as Say, Play, GetDigits, Dial, Record, and Enqueue.

OpenAPI Specification

africastalking-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Africa's Talking API
  description: >-
    Unified REST API for Africa's Talking communications products: SMS (single,
    bulk, premium, subscriptions), USSD callbacks, Voice (call, transfer, media
    upload, queue status), Airtime, Mobile Data, and Payments (mobile C2B
    checkout, B2C, B2B). Requests authenticate with an `apiKey` header and a
    `username` parameter. Hosts differ per product: messaging, airtime, and
    subscriptions live under api.africastalking.com/version1; voice under
    voice.africastalking.com; mobile data under bundles.africastalking.com; and
    payments under payments.africastalking.com. Sandbox equivalents insert
    `.sandbox.` into each host.
  termsOfService: https://africastalking.com/terms
  contact:
    name: Africa's Talking Support
    url: https://help.africastalking.com
  version: 'version1'
servers:
  - url: https://api.africastalking.com/version1
    description: Messaging, Airtime and Subscription production host
  - url: https://api.sandbox.africastalking.com/version1
    description: Messaging, Airtime and Subscription sandbox host
  - url: https://voice.africastalking.com
    description: Voice production host
  - url: https://bundles.africastalking.com
    description: Mobile Data production host
  - url: https://payments.africastalking.com
    description: Payments production host
security:
  - apiKey: []
tags:
  - name: SMS
    description: Send single and bulk SMS and fetch inbox messages.
  - name: Premium SMS
    description: Premium SMS subscriptions and checkout tokens.
  - name: Voice
    description: Outbound calls, transfers, queue status, and media upload.
  - name: Airtime
    description: Distribute mobile airtime to recipients.
  - name: Mobile Data
    description: Disburse mobile data bundles to recipients.
  - name: Payments
    description: Mobile C2B checkout, B2C, and B2B mobile money transfers.
paths:
  /messaging:
    post:
      operationId: sendMessage
      tags:
        - SMS
      summary: Send SMS
      description: >-
        Send a single or bulk SMS to one or more recipients. Set `bulkSMSMode`
        to 1 for bulk delivery. Provide a registered `from` short code or sender
        ID where available.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/SendMessageRequest'
      responses:
        '201':
          description: Message accepted for delivery.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendMessageResponse'
        '400':
          description: Bad request.
        '401':
          description: Unauthorized - missing or invalid apiKey.
    get:
      operationId: fetchMessages
      tags:
        - SMS
      summary: Fetch inbox messages
      description: Retrieve messages sent to your registered short codes or sender IDs.
      parameters:
        - name: username
          in: query
          required: true
          schema:
            type: string
        - name: lastReceivedId
          in: query
          required: false
          description: ID of the message last processed; 0 fetches from the start.
          schema:
            type: string
            default: '0'
      responses:
        '200':
          description: Inbox messages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FetchMessagesResponse'
  /checkout/token/create:
    post:
      operationId: createCheckoutToken
      tags:
        - Premium SMS
      summary: Create checkout token
      description: >-
        Generate a checkout token for a phone number, required before creating a
        premium SMS subscription.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - phoneNumber
              properties:
                phoneNumber:
                  type: string
                  description: Subscriber phone number in international format.
                  example: '+254711XXXYYY'
      responses:
        '201':
          description: Checkout token created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutTokenResponse'
  /subscription/create:
    post:
      operationId: createSubscription
      tags:
        - Premium SMS
      summary: Create premium SMS subscription
      description: Subscribe a phone number to a premium SMS product using a checkout token.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/SubscriptionRequest'
      responses:
        '201':
          description: Subscription created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponse'
  /subscription/delete:
    post:
      operationId: deleteSubscription
      tags:
        - Premium SMS
      summary: Delete premium SMS subscription
      description: Unsubscribe a phone number from a premium SMS product.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - username
                - shortCode
                - keyword
                - phoneNumber
              properties:
                username:
                  type: string
                shortCode:
                  type: string
                keyword:
                  type: string
                phoneNumber:
                  type: string
      responses:
        '201':
          description: Subscription deleted.
  /subscription:
    get:
      operationId: fetchSubscriptions
      tags:
        - Premium SMS
      summary: Fetch premium SMS subscriptions
      parameters:
        - name: username
          in: query
          required: true
          schema:
            type: string
        - name: shortCode
          in: query
          required: true
          schema:
            type: string
        - name: keyword
          in: query
          required: true
          schema:
            type: string
        - name: lastReceivedId
          in: query
          required: false
          schema:
            type: string
            default: '0'
      responses:
        '200':
          description: List of subscriptions.
  /airtime/send:
    post:
      operationId: sendAirtime
      tags:
        - Airtime
      summary: Send airtime
      description: Distribute airtime to one or more recipients. `recipients` is a JSON-encoded array.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/SendAirtimeRequest'
      responses:
        '201':
          description: Airtime request accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendAirtimeResponse'
  /call:
    post:
      operationId: makeCall
      tags:
        - Voice
      summary: Make outbound call
      description: >-
        Initiate an outbound call from a registered Africa's Talking number to
        one or more destination numbers. Served from voice.africastalking.com.
      servers:
        - url: https://voice.africastalking.com
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/MakeCallRequest'
      responses:
        '200':
          description: Call entries queued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MakeCallResponse'
  /queueStatus:
    post:
      operationId: queueStatus
      tags:
        - Voice
      summary: Get queued call status
      description: Return the number of calls currently queued on registered phone numbers.
      servers:
        - url: https://voice.africastalking.com
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - username
                - phoneNumbers
              properties:
                username:
                  type: string
                phoneNumbers:
                  type: string
                  description: Comma-separated list of registered phone numbers.
      responses:
        '200':
          description: Queue status entries.
  /mediaUpload:
    post:
      operationId: uploadMedia
      tags:
        - Voice
      summary: Upload voice media file
      description: Upload a media file to be played on demand by Play, musicOnHold, or ringBackTone.
      servers:
        - url: https://voice.africastalking.com
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - username
                - url
                - phoneNumber
              properties:
                username:
                  type: string
                url:
                  type: string
                  description: HTTP(S) URL of the media file to upload.
                phoneNumber:
                  type: string
                  description: Africa's Talking phone number mapped to your account.
      responses:
        '200':
          description: Media upload accepted.
  /mobile/data/request:
    post:
      operationId: sendMobileData
      tags:
        - Mobile Data
      summary: Send mobile data bundles
      description: Disburse mobile data bundles to a list of recipients. Served from bundles.africastalking.com.
      servers:
        - url: https://bundles.africastalking.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MobileDataRequest'
      responses:
        '201':
          description: Mobile data request accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MobileDataResponse'
  /mobile/checkout/request:
    post:
      operationId: mobileCheckout
      tags:
        - Payments
      summary: Mobile C2B checkout
      description: >-
        Initiate a mobile money checkout (customer-to-business) prompting the
        subscriber to authorize payment. Served from payments.africastalking.com.
      servers:
        - url: https://payments.africastalking.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MobileCheckoutRequest'
      responses:
        '201':
          description: Checkout initiated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MobileCheckoutResponse'
  /mobile/b2c/request:
    post:
      operationId: mobileB2C
      tags:
        - Payments
      summary: Mobile B2C payment
      description: Send money from your payment wallet to one or more mobile subscribers.
      servers:
        - url: https://payments.africastalking.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MobileB2CRequest'
      responses:
        '201':
          description: B2C request accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MobileB2CResponse'
  /mobile/b2b/request:
    post:
      operationId: mobileB2B
      tags:
        - Payments
      summary: Mobile B2B payment
      description: Send money from your business to another business over mobile money rails.
      servers:
        - url: https://payments.africastalking.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MobileB2BRequest'
      responses:
        '201':
          description: B2B request accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MobileB2BResponse'
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: apiKey
      description: Africa's Talking API key generated from your account dashboard.
  schemas:
    SendMessageRequest:
      type: object
      required:
        - username
        - to
        - message
      properties:
        username:
          type: string
          description: Your Africa's Talking application username.
        to:
          type: string
          description: Comma-separated recipient phone numbers in international format.
          example: '+254711XXXYYY,+254733YYYZZZ'
        message:
          type: string
          description: The message body to send.
        from:
          type: string
          description: Registered short code or alphanumeric sender ID.
        bulkSMSMode:
          type: integer
          description: Set to 1 to enable bulk SMS delivery.
          enum: [0, 1]
          default: 1
        enqueue:
          type: integer
          description: Set to 1 to enqueue large outbound batches.
          enum: [0, 1]
        keyword:
          type: string
          description: Premium SMS keyword (premium SMS only).
        linkId:
          type: string
          description: Link identifier from an onDemand premium SMS subscription.
        retryDurationInHours:
          type: integer
          description: Hours to retry premium SMS delivery before discarding.
    SendMessageResponse:
      type: object
      properties:
        SMSMessageData:
          type: object
          properties:
            Message:
              type: string
              example: 'Sent to 1/1 Total Cost: KES 0.8000'
            Recipients:
              type: array
              items:
                $ref: '#/components/schemas/Recipient'
    Recipient:
      type: object
      properties:
        statusCode:
          type: integer
          example: 101
        number:
          type: string
          example: '+254711XXXYYY'
        status:
          type: string
          example: Success
        cost:
          type: string
          example: KES 0.8000
        messageId:
          type: string
          example: ATPid_SampleTxnId123
    FetchMessagesResponse:
      type: object
      properties:
        SMSMessageData:
          type: object
          properties:
            Messages:
              type: array
              items:
                type: object
                properties:
                  linkId:
                    type: string
                  text:
                    type: string
                  to:
                    type: string
                  id:
                    type: integer
                  date:
                    type: string
                  from:
                    type: string
    CheckoutTokenResponse:
      type: object
      properties:
        description:
          type: string
          example: Success
        token:
          type: string
          example: CkTkn_SampleCkTknId123
    SubscriptionRequest:
      type: object
      required:
        - username
        - shortCode
        - keyword
        - phoneNumber
        - checkoutToken
      properties:
        username:
          type: string
        shortCode:
          type: string
          description: Premium SMS short code mapped to your account.
        keyword:
          type: string
          description: Premium SMS keyword mapped to your short code.
        phoneNumber:
          type: string
        checkoutToken:
          type: string
          description: Token returned by /checkout/token/create.
    SubscriptionResponse:
      type: object
      properties:
        status:
          type: string
          example: Success
        description:
          type: string
          example: Waiting for user input
    SendAirtimeRequest:
      type: object
      required:
        - username
        - recipients
      properties:
        username:
          type: string
        recipients:
          type: string
          description: >-
            JSON-encoded array of recipient objects, each with phoneNumber,
            currencyCode, amount, and optional maxNumRetry.
          example: '[{"phoneNumber":"+254711XXXYYY","currencyCode":"KES","amount":"100"}]'
        maxNumRetry:
          type: integer
          description: Maximum delivery retries in hours on failure.
    SendAirtimeResponse:
      type: object
      properties:
        errorMessage:
          type: string
          example: None
        numSent:
          type: integer
          example: 1
        totalAmount:
          type: string
          example: KES 100.0000
        totalDiscount:
          type: string
          example: KES 3.0000
        responses:
          type: array
          items:
            type: object
            properties:
              phoneNumber:
                type: string
              amount:
                type: string
              status:
                type: string
              requestId:
                type: string
              discount:
                type: string
              errorMessage:
                type: string
    MakeCallRequest:
      type: object
      required:
        - username
        - from
        - to
      properties:
        username:
          type: string
        from:
          type: string
          description: Registered Africa's Talking phone number to dial out with.
          example: '+254711XXXYYY'
        to:
          type: string
          description: Comma-separated destination phone numbers.
          example: '+254733YYYZZZ'
        clientRequestId:
          type: string
          description: Variable sent to your Events Callback URL for this call.
    MakeCallResponse:
      type: object
      properties:
        entries:
          type: array
          items:
            type: object
            properties:
              phoneNumber:
                type: string
              status:
                type: string
                example: Queued
              sessionId:
                type: string
        errorMessage:
          type: string
          example: None
    MobileDataRequest:
      type: object
      required:
        - username
        - productName
        - recipients
      properties:
        username:
          type: string
        productName:
          type: string
          description: Registered payment product name.
        recipients:
          type: array
          items:
            type: object
            required:
              - phoneNumber
              - quantity
              - unit
              - validity
            properties:
              phoneNumber:
                type: string
                example: '+254711XXXYYY'
              quantity:
                type: number
                example: 50
              unit:
                type: string
                enum: [MB, GB]
              validity:
                type: string
                enum: [Day, Week, Month]
              metadata:
                type: object
                additionalProperties:
                  type: string
    MobileDataResponse:
      type: object
      properties:
        entries:
          type: array
          items:
            type: object
            properties:
              phoneNumber:
                type: string
              provider:
                type: string
              status:
                type: string
                example: Queued
              transactionId:
                type: string
              value:
                type: string
    MobileCheckoutRequest:
      type: object
      required:
        - username
        - productName
        - phoneNumber
        - currencyCode
        - amount
      properties:
        username:
          type: string
        productName:
          type: string
        phoneNumber:
          type: string
          example: '+254711XXXYYY'
        currencyCode:
          type: string
          description: 3-letter ISO currency code.
          example: KES
        amount:
          type: number
          example: 100.5
        providerChannel:
          type: string
        metadata:
          type: object
          additionalProperties:
            type: string
    MobileCheckoutResponse:
      type: object
      properties:
        status:
          type: string
          example: PendingConfirmation
        description:
          type: string
          example: Waiting for user input
        transactionId:
          type: string
          example: ATPid_SampleTxnId123
    MobileB2CRequest:
      type: object
      required:
        - username
        - productName
        - recipients
      properties:
        username:
          type: string
        productName:
          type: string
        recipients:
          type: array
          items:
            type: object
            required:
              - phoneNumber
              - currencyCode
              - amount
            properties:
              phoneNumber:
                type: string
              currencyCode:
                type: string
                example: KES
              amount:
                type: number
              reason:
                type: string
                description: Purpose of payment, e.g. SalaryPayment, BusinessPayment.
              metadata:
                type: object
                additionalProperties:
                  type: string
    MobileB2CResponse:
      type: object
      properties:
        numQueued:
          type: integer
          example: 1
        totalValue:
          type: string
          example: KES 100.0000
        totalTransactionFee:
          type: string
        entries:
          type: array
          items:
            type: object
            properties:
              phoneNumber:
                type: string
              status:
                type: string
                example: Queued
              provider:
                type: string
              providerChannel:
                type: string
              value:
                type: string
              transactionId:
                type: string
              transactionFee:
                type: string
    MobileB2BRequest:
      type: object
      required:
        - username
        - productName
        - provider
        - transferType
        - currencyCode
        - amount
        - destinationChannel
        - destinationAccount
      properties:
        username:
          type: string
        productName:
          type: string
        provider:
          type: string
          description: Mobile money provider, e.g. Mpesa, Athena.
        transferType:
          type: string
          description: e.g. BusinessBuyGoods, BusinessPayBill, DisburseFundsToBusiness, BusinessToBusinessTransfer.
        currencyCode:
          type: string
          example: KES
        amount:
          type: number
        destinationChannel:
          type: string
          description: Paybill or till channel of the receiving business.
        destinationAccount:
          type: string
          description: Account name of the receiving business.
        metadata:
          type: object
          additionalProperties:
            type: string
    MobileB2BResponse:
      type: object
      properties:
        status:
          type: string
          example: Queued
        transactionId:
          type: string
        transactionFee:
          type: string
        providerChannel:
          type: string