Cellulant Tingg Payouts API

Tingg Payouts (Beep) — a single global JSON endpoint that dispatches postPayment, queryPayment, validateAccount, getBill, getBalance, and refundPayment functions for mobile-money B2C, bulk disbursement, cross-border bank transfers, airtime/data vending, and bill payments (DSTV, GOTV, electricity, water) across 35 African countries.

Cellulant Tingg Payouts API is one of 3 APIs that Cellulant publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 1 JSON Schema definition.

Tagged areas include Payments, Payouts, Disbursement, Mobile Money, and Bank Transfer. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, sample payloads, 1 Naftiko capability spec, and 1 JSON Schema.

OpenAPI Specification

cellulant-payouts-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Cellulant Tingg Payouts API
  description: |
    Tingg Payouts (Beep Server) — send value to mobile money wallets, bank
    accounts, airtime/data, and bill payments across 35 African countries
    through a single global JSON endpoint.
  version: "1.0.0"
  contact:
    name: Cellulant Developer Support
    url: https://developer.tingg.africa
    email: [email protected]
  license:
    name: Cellulant Terms of Service
    url: https://www.cellulant.io/terms
servers:
  - url: https://api.tingg.africa
    description: Production
  - url: https://api-approval.tingg.africa
    description: Sandbox
security:
  - BasicAuth: []
tags:
  - name: Payments
    description: Post payouts, queries, validations, balances, and refunds.
paths:
  /v1/global-api/payments:
    post:
      summary: Post a Payment
      description: |
        Single global entry point for the Beep payouts platform. The `function`
        field discriminates the operation: `BEEP.postPayment`, `BEEP.queryPayment`,
        `BEEP.validateAccount`, `BEEP.getBill`, `BEEP.getBalance`, `BEEP.refundPayment`.
        Used for mobile money B2C, bulk disbursement, bank transfers, airtime/data
        vending, and bill payments (DSTV, GOTV, electricity, water).
      operationId: postPayment
      tags:
        - Payments
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentRequest'
            examples:
              MobileMoneyPayoutExample:
                $ref: '#/components/examples/MobileMoneyPayoutExample'
              BankTransferExample:
                $ref: '#/components/examples/BankTransferExample'
              AirtimeVendExample:
                $ref: '#/components/examples/AirtimeVendExample'
      responses:
        '200':
          description: Payout accepted (asynchronous — status callbacks fire on the configured callback URL when payment is delivered)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentResponse'
              examples:
                PendingAcknowledgementExample:
                  $ref: '#/components/examples/PendingAcknowledgementExample'
        '4XX':
          $ref: '#/components/responses/ErrorResponse'
        '5XX':
          description: Server error — query transaction status before retrying or marking failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: Beep credentials supplied as Basic auth in addition to credentials in the payload.
  responses:
    ErrorResponse:
      description: Error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    PaymentRequest:
      type: object
      required: [function, countryCode, payload]
      properties:
        function:
          type: string
          enum:
            - BEEP.postPayment
            - BEEP.queryPayment
            - BEEP.validateAccount
            - BEEP.getBill
            - BEEP.getBalance
            - BEEP.refundPayment
        countryCode:
          type: string
          description: ISO 3166-1 alpha-2 country code (KE, GH, TZ, UG, NG, ...).
        payload:
          type: object
          required: [credentials, packet]
          properties:
            credentials:
              $ref: '#/components/schemas/Credentials'
            packet:
              $ref: '#/components/schemas/Packet'
    Credentials:
      type: object
      required: [username, password]
      properties:
        username:
          type: string
        password:
          type: string
    Packet:
      type: object
      required: [serviceCode, MSISDN, accountNumber, payerTransactionID, amount, datePaymentReceived, currencyCode, countryCode]
      properties:
        serviceCode:
          type: string
        MSISDN:
          type: string
          description: Customer mobile number with country code.
        accountNumber:
          type: string
        payerTransactionID:
          type: string
        amount:
          type: number
          format: double
        datePaymentReceived:
          type: string
          description: yyyy-mm-dd hh:mm:ss
        currencyCode:
          type: string
        countryCode:
          type: string
        narration:
          type: string
        invoiceNumber:
          type: string
        hubID:
          type: string
        paymentMode:
          type: string
          enum: [ATM, Mobile, Bank, Card, Cash]
        customerNames:
          type: string
        extraData:
          $ref: '#/components/schemas/ExtraData'
    ExtraData:
      type: object
      description: Optional channel-specific fields. Bank transfers require destinationBank* fields.
      properties:
        callbackUrl:
          type: string
          format: uri
        pushToOriginator:
          type: boolean
        destinationBankCode:
          type: string
        destinationBankName:
          type: string
        destinationAccountName:
          type: string
        destinationAccountNo:
          type: string
    PaymentResponse:
      type: object
      properties:
        authStatus:
          type: object
          properties:
            authStatusCode:
              type: integer
              example: 131
            authStatusDescription:
              type: string
        results:
          type: array
          items:
            type: object
            properties:
              statusCode:
                type: integer
              statusDescription:
                type: string
              payerTransactionID:
                type: string
              beepTransactionID:
                type: integer
                format: int64
    Error:
      type: object
      properties:
        authStatus:
          type: object
          properties:
            authStatusCode:
              type: integer
            authStatusDescription:
              type: string
  examples:
    MobileMoneyPayoutExample:
      summary: Mobile money B2C payout to a Kenyan M-Pesa wallet
      value:
        function: BEEP.postPayment
        countryCode: KE
        payload:
          credentials:
            username: sandboxuser
            password: sandboxpassword!
          packet:
            serviceCode: MPESA-B2C
            MSISDN: '254712345678'
            accountNumber: '254712345678'
            payerTransactionID: TXN-2026-05-24-0001
            amount: 2500
            datePaymentReceived: '2026-05-24 10:15:00'
            currencyCode: KE
            countryCode: KE
            narration: Vendor payout — May invoice
            paymentMode: Mobile
            customerNames: Wanjiru Mwangi
            extraData:
              callbackUrl: https://merchant.example.co.ke/tingg/payout-callback
              pushToOriginator: true
    BankTransferExample:
      summary: Cross-border bank payout
      value:
        function: BEEP.postPayment
        countryCode: NG
        payload:
          credentials:
            username: sandboxuser
            password: sandboxpassword!
          packet:
            serviceCode: BANK-PAYOUT
            MSISDN: '2348012345678'
            accountNumber: '0123456789'
            payerTransactionID: TXN-2026-05-24-0002
            amount: 100000
            datePaymentReceived: '2026-05-24 10:20:00'
            currencyCode: NG
            countryCode: NG
            paymentMode: Bank
            customerNames: Chinedu Okafor
            extraData:
              destinationBankCode: '058'
              destinationBankName: GTBank
              destinationAccountName: Chinedu Okafor
              destinationAccountNo: '0123456789'
    AirtimeVendExample:
      summary: Airtime top-up
      value:
        function: BEEP.postPayment
        countryCode: TZ
        payload:
          credentials:
            username: sandboxuser
            password: sandboxpassword!
          packet:
            serviceCode: AIRTIME-VODACOM-TZ
            MSISDN: '255712345678'
            accountNumber: '255712345678'
            payerTransactionID: TXN-2026-05-24-0003
            amount: 1000
            datePaymentReceived: '2026-05-24 10:25:00'
            currencyCode: TZ
            countryCode: TZ
            paymentMode: Mobile
    PendingAcknowledgementExample:
      summary: Payout accepted, pending acknowledgement
      value:
        authStatus:
          authStatusCode: 131
          authStatusDescription: Authentication was successful
        results:
          - statusCode: 139
            statusDescription: Payment pending acknowledgement
            payerTransactionID: TXN-2026-05-24-0001
            beepTransactionID: 9876543210