Cellulant Payments API

Post payouts, queries, validations, balances, and refunds.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

cellulant-payments-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Cellulant Tingg Checkout Acknowledgement Payments API
  description: 'Tingg Checkout 3.0 — accept payments across 25+ African markets through

    a single integration. Supports Express Checkout (hosted/modal) and Custom

    Checkout (host-to-host) for mobile money, cards, and direct bank transfer.

    '
  version: 3.0.0
  contact:
    name: Cellulant Developer Support
    url: https://developer.tingg.africa
    email: developer@cellulant.io
  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:
- BearerAuth: []
  ApiKeyAuth: []
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:
  schemas:
    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'
    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'
    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
    Error:
      type: object
      properties:
        authStatus:
          type: object
          properties:
            authStatusCode:
              type: integer
            authStatusDescription:
              type: string
    Credentials:
      type: object
      required:
      - username
      - password
      properties:
        username:
          type: string
        password:
          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
  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
    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
    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
  responses:
    ErrorResponse:
      description: Error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    ApiKeyAuth:
      type: apiKey
      in: header
      name: apikey
      description: Merchant apiKey issued in the Tingg integration dashboard.