Interswitch Bills Payment API

Quickteller bills payment service — list billers (`GET /api/v2/quickteller/billers`), get payment items, validate customer references, and submit payment advices for DSTV, GOTV, PHCN, water boards, school fees, government TSA payments, and hundreds of other Nigerian billers. Uses the InterswitchAuth legacy signature scheme (Authorization + Timestamp + Nonce + Signature + SignatureMethod + TerminalID headers).

Interswitch Bills Payment API is one of 12 APIs that Interswitch 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.

Tagged areas include Bills, Quickteller, Utilities, Cable TV, and Value Added Services. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

interswitch-bills-payment-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Interswitch Bills Payment API
  description: |
    Quickteller bills payment service — list billers, get payment items,
    validate customer references, and submit payment advices for hundreds of
    Nigerian billers including DSTV, GOTV, PHCN, water boards, school fees,
    and government TSA payments.
  version: '2024-01-01'
servers:
  - url: https://sandbox.interswitchng.com
    description: Sandbox
  - url: https://saturn.interswitchng.com
    description: Production
security:
  - InterswitchAuth: []
tags:
  - name: Billers
  - name: Payment Items
  - name: Customer Validation
  - name: Payments
paths:
  /api/v2/quickteller/categorys:
    get:
      tags: [Billers]
      summary: List Biller Categories
      operationId: listBillerCategories
      responses:
        '200':
          description: Biller categories.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    categoryId: { type: integer }
                    categoryName: { type: string }
  /api/v2/quickteller/categorys/{categoryId}/billers:
    get:
      tags: [Billers]
      summary: List Billers In Category
      operationId: listBillersInCategory
      parameters:
        - in: path
          name: categoryId
          required: true
          schema: { type: integer }
      responses:
        '200':
          description: Billers in the requested category.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Biller' }
  /api/v2/quickteller/billers:
    get:
      tags: [Billers]
      summary: List All Billers
      operationId: listBillers
      responses:
        '200':
          description: All billers.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Biller' }
  /api/v2/quickteller/billers/{billerId}/paymentitems:
    get:
      tags: [Payment Items]
      summary: List Biller Payment Items
      description: Returns supported amounts, packages, or denominations for the biller (e.g. DSTV Compact, MTN-100 airtime).
      operationId: listBillerPaymentItems
      parameters:
        - in: path
          name: billerId
          required: true
          schema: { type: integer }
      responses:
        '200':
          description: Payment items.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/PaymentItem' }
  /api/v2/quickteller/customers/validations:
    post:
      tags: [Customer Validation]
      summary: Validate Customer
      description: Verify a customer ID (smartcard number, meter number, account number, phone) with the biller before charging.
      operationId: validateCustomer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [paymentCode, customerId]
              properties:
                paymentCode: { type: string }
                customerId: { type: string }
                amount: { type: integer }
      responses:
        '200':
          description: Customer record at the biller.
          content:
            application/json:
              schema:
                type: object
                properties:
                  fullName: { type: string }
                  customerId: { type: string }
                  responseCode: { type: string }
  /api/v2/quickteller/payments/advices:
    post:
      tags: [Payments]
      summary: Submit Bill Payment Advice
      operationId: submitBillPaymentAdvice
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [paymentCode, customerId, customerEmail, customerMobile, amount, requestReference]
              properties:
                paymentCode: { type: string }
                customerId: { type: string }
                customerEmail: { type: string, format: email }
                customerMobile: { type: string }
                amount: { type: integer, description: Minor currency units. }
                requestReference: { type: string, description: Must be prefixed with the merchant request-reference prefix. }
      responses:
        '200':
          description: Payment advice response.
          content:
            application/json:
              schema:
                type: object
                properties:
                  responseCode: { type: string, description: 90000 indicates success. }
                  transactionRef: { type: string }
                  rawOutput: { type: string }
components:
  securitySchemes:
    InterswitchAuth:
      type: apiKey
      in: header
      name: Authorization
      description: |
        `InterswitchAuth {base64(client_id)}` plus `Timestamp`, `Nonce`,
        `Signature` (SHA1 of method + endpoint + timestamp + nonce + client_id
        + secret), `SignatureMethod: SHA1`, and `TerminalID` headers; or
        `Bearer {access_token}` from the Passport OAuth token endpoint.
  schemas:
    Biller:
      type: object
      properties:
        billerId: { type: integer }
        name: { type: string }
        categoryId: { type: integer }
        currencyCode: { type: string }
        customerField1: { type: string }
        customerField2: { type: string }
    PaymentItem:
      type: object
      properties:
        paymentItemId: { type: integer }
        paymentCode: { type: string }
        name: { type: string }
        amount: { type: integer }
        currencyCode: { type: string }
        isAmountFixed: { type: boolean }