openapi: 3.0.3
info:
  title: 'AmjadData API Documentation'
  description: 'Professional API documentation for AmjadData users.'
  version: 1.0.0
servers:
  -
    url: 'http://localhost:8000'
tags:
  -
    name: General
    description: ''
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: 'Please include your API token in the <code>Authorization</code> header as a Bearer token.'
security:
  -
    default: []
paths:
  /api/airtime:
    post:
      summary: "Handle Airtime Purchase\nPOST /api/airtime"
      operationId: handleAirtimePurchasePOSTapiairtime
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: fail
                  msg: 'Authorization token not found 6g43cv8PD1aE5beadkZfhV6'
                properties:
                  status:
                    type: string
                    example: fail
                  msg:
                    type: string
                    example: 'Authorization token not found 6g43cv8PD1aE5beadkZfhV6'
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                network:
                  type: string
                  description: ''
                  example: architecto
                amount:
                  type: number
                  description: ''
                  example: 4326.41688
                phone:
                  type: string
                  description: 'Must be 11 digits.'
                  example: '82256977571'
                airtime_type:
                  type: string
                  description: ''
                  example: Awoof
                  enum:
                    - VTU
                    - 'Share And Sell'
                    - Momo
                    - Awoof
                ref:
                  type: string
                  description: ''
                  example: architecto
              required:
                - network
                - amount
                - phone
                - airtime_type
                - ref
  /api/data:
    post:
      summary: "Handle Data Purchase\nPOST /api/data"
      operationId: handleDataPurchasePOSTapidata
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: fail
                  msg: 'Authorization token not found 6g43cv8PD1aE5beadkZfhV6'
                properties:
                  status:
                    type: string
                    example: fail
                  msg:
                    type: string
                    example: 'Authorization token not found 6g43cv8PD1aE5beadkZfhV6'
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                network:
                  type: string
                  description: ''
                  example: architecto
                phone:
                  type: string
                  description: 'Must be 11 digits.'
                  example: '82256977571'
                data_plan:
                  type: string
                  description: ''
                  example: architecto
                ref:
                  type: string
                  description: ''
                  example: architecto
              required:
                - network
                - phone
                - data_plan
                - ref
  /api/v1/auth/register:
    post:
      summary: "Register a new user\nPOST /api/v1/auth/register"
      operationId: registerANewUserPOSTapiv1authregister
      description: ''
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  message: 'Registration successful. Please check your email for the verification code.'
                  data:
                    email: ashly64@example.com
                    expires_at: '2026-01-28T22:38:57.127130Z'
                properties:
                  status:
                    type: string
                    example: success
                  message:
                    type: string
                    example: 'Registration successful. Please check your email for the verification code.'
                  data:
                    type: object
                    properties:
                      email:
                        type: string
                        example: ashly64@example.com
                      expires_at:
                        type: string
                        example: '2026-01-28T22:38:57.127130Z'
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                first_name:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: b
                last_name:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: 'n'
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 50 characters.'
                  example: ashly64@example.com
                  nullable: true
                phone:
                  type: string
                  description: 'Must not be greater than 20 characters.'
                  example: vdljnikhwaykcmyu
                password:
                  type: string
                  description: 'Must be at least 8 characters.'
                  example: 'Xaz<m5L[)~=NG5a'
                state:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: l
                type:
                  type: integer
                  description: 'Must be at least 0. Must not be greater than 255.'
                  example: 2
                  nullable: true
              required:
                - first_name
                - last_name
                - phone
                - password
                - state
  /api/v1/auth/verify-otp:
    post:
      summary: "Verify OTP for email verification or password reset\nPOST /api/v1/auth/verify-otp"
      operationId: verifyOTPForEmailVerificationOrPasswordResetPOSTapiv1authverifyOtp
      description: ''
      parameters: []
      responses:
        422:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'The selected email is invalid.'
                  errors:
                    email:
                      - 'The selected email is invalid.'
                properties:
                  message:
                    type: string
                    example: 'The selected email is invalid.'
                  errors:
                    type: object
                    properties:
                      email:
                        type: array
                        example:
                          - 'The selected email is invalid.'
                        items:
                          type: string
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address. The <code>sEmail</code> of an existing record in the subscribers table.'
                  example: gbailey@example.net
                otp:
                  type: string
                  description: ''
                  example: architecto
                purpose:
                  type: string
                  description: ''
                  example: registration
                  enum:
                    - registration
                    - password_reset
              required:
                - email
                - otp
                - purpose
  /api/v1/auth/resend-otp:
    post:
      summary: "Resend OTP code\nPOST /api/v1/auth/resend-otp"
      operationId: resendOTPCodePOSTapiv1authresendOtp
      description: ''
      parameters: []
      responses:
        422:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'The selected email is invalid.'
                  errors:
                    email:
                      - 'The selected email is invalid.'
                properties:
                  message:
                    type: string
                    example: 'The selected email is invalid.'
                  errors:
                    type: object
                    properties:
                      email:
                        type: array
                        example:
                          - 'The selected email is invalid.'
                        items:
                          type: string
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address. The <code>sEmail</code> of an existing record in the subscribers table.'
                  example: gbailey@example.net
                purpose:
                  type: string
                  description: ''
                  example: password_reset
                  enum:
                    - registration
                    - password_reset
              required:
                - email
                - purpose
  /api/v1/auth/login:
    post:
      summary: "Login user\nPOST /api/v1/auth/login"
      operationId: loginUserPOSTapiv1authlogin
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Invalid credentials'
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Invalid credentials'
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                identifier:
                  type: string
                  description: ''
                  example: architecto
                password:
                  type: string
                  description: ''
                  example: '|]|{+-'
              required:
                - identifier
                - password
  /api/v1/auth/forgot-password:
    post:
      summary: "Request password reset\nPOST /api/v1/auth/forgot-password"
      operationId: requestPasswordResetPOSTapiv1authforgotPassword
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  message: 'If that email address exists, we have sent a password reset link.'
                properties:
                  status:
                    type: string
                    example: success
                  message:
                    type: string
                    example: 'If that email address exists, we have sent a password reset link.'
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: gbailey@example.net
              required:
                - email
  /api/v1/auth/forgot-password-otp:
    post:
      summary: "Request password reset via OTP\nPOST /api/v1/auth/forgot-password-otp"
      operationId: requestPasswordResetViaOTPPOSTapiv1authforgotPasswordOtp
      description: ''
      parameters: []
      responses:
        429:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: fail
                  msg: 'Too Many Requests'
                properties:
                  status:
                    type: string
                    example: fail
                  msg:
                    type: string
                    example: 'Too Many Requests'
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address. The <code>sEmail</code> of an existing record in the subscribers table.'
                  example: gbailey@example.net
              required:
                - email
  /api/v1/auth/reset-password:
    post:
      summary: "Reset password with token\nPOST /api/v1/auth/reset-password"
      operationId: resetPasswordWithTokenPOSTapiv1authresetPassword
      description: ''
      parameters: []
      responses:
        429:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: fail
                  msg: 'Too Many Requests'
                properties:
                  status:
                    type: string
                    example: fail
                  msg:
                    type: string
                    example: 'Too Many Requests'
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                token:
                  type: string
                  description: ''
                  example: architecto
                email:
                  type: string
                  description: 'Must be a valid email address. The <code>sEmail</code> of an existing record in the subscribers table.'
                  example: zbailey@example.net
                password:
                  type: string
                  description: 'Must be at least 8 characters.'
                  example: '-0pBNvYgxw'
              required:
                - token
                - email
                - password
  /api/v1/auth/reset-password-otp:
    post:
      summary: "Reset password using OTP\nPOST /api/v1/auth/reset-password-otp"
      operationId: resetPasswordUsingOTPPOSTapiv1authresetPasswordOtp
      description: ''
      parameters: []
      responses:
        429:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: fail
                  msg: 'Too Many Requests'
                properties:
                  status:
                    type: string
                    example: fail
                  msg:
                    type: string
                    example: 'Too Many Requests'
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address. The <code>sEmail</code> of an existing record in the subscribers table.'
                  example: gbailey@example.net
                otp:
                  type: string
                  description: ''
                  example: architecto
                password:
                  type: string
                  description: 'Must be at least 6 characters.'
                  example: ']|{+-0pBNvYg'
              required:
                - email
                - otp
                - password
  /api/v1/account/profile:
    get:
      summary: "Get authenticated user's profile\nGET /api/v1/account/profile"
      operationId: getAuthenticatedUsersProfileGETapiv1accountprofile
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
  /api/v1/account/profile/update:
    put:
      summary: "Update authenticated user's profile\nPUT /api/v1/account/profile"
      operationId: updateAuthenticatedUsersProfilePUTapiv1accountprofile
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                first_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                  nullable: true
                last_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                  nullable: true
                state:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: g
                  nullable: true
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: rowan.gulgowski@example.com
                  nullable: true
                type:
                  type: string
                  description: ''
                  example: null
                role:
                  type: string
                  description: ''
                  example: null
                wallet:
                  type: string
                  description: ''
                  example: null
                wallet_balance:
                  type: string
                  description: ''
                  example: null
                referral_wallet_balance:
                  type: string
                  description: ''
                  example: null
                sWallet:
                  type: string
                  description: ''
                  example: null
                sRefWallet:
                  type: string
                  description: ''
                  example: null
                sType:
                  type: string
                  description: ''
                  example: null
  /api/v1/wallet/balance:
    get:
      summary: "Get wallet balance\nGET /api/v1/wallet/balance"
      operationId: getWalletBalanceGETapiv1walletbalance
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
  /api/v1/wallet/transactions:
    get:
      summary: "Get wallet transactions with filters and pagination\nGET /api/v1/wallet/transactions"
      operationId: getWalletTransactionsWithFiltersAndPaginationGETapiv1wallettransactions
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: integer
                  description: ''
                  example: '1'
                  enum:
                    - '0'
                    - '1'
                    - '2'
                    - '5'
                  nullable: true
                service:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: b
                  nullable: true
                date_from:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-01-28T22:28:57'
                  nullable: true
                date_to:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>date_from</code>.'
                  example: '2052-02-21'
                  nullable: true
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 22
                  nullable: true
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 7
                  nullable: true
  /api/v1/wallet/fund:
    post:
      summary: "Initialize wallet funding\nPOST /api/v1/wallet/fund"
      operationId: initializeWalletFundingPOSTapiv1walletfund
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                amount:
                  type: integer
                  description: 'Must be at least 100.'
                  example: 95
                provider:
                  type: string
                  description: ''
                  example: monnify
                  enum:
                    - paystack
                    - monnify
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: zbailey@example.net
                callback_url:
                  type: string
                  description: 'Must be a valid URL.'
                  example: 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt'
                  nullable: true
              required:
                - amount
                - provider
                - email
  /api/v1/transactions:
    get:
      summary: "Get transactions list (alias to wallet/transactions)\nGET /api/v1/transactions"
      operationId: getTransactionsListaliasToWallettransactionsGETapiv1transactions
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: integer
                  description: ''
                  example: '2'
                  enum:
                    - '0'
                    - '1'
                    - '2'
                    - '5'
                  nullable: true
                service:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: b
                  nullable: true
                date_from:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-01-28T22:28:57'
                  nullable: true
                date_to:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>date_from</code>.'
                  example: '2052-02-21'
                  nullable: true
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 22
                  nullable: true
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 7
                  nullable: true
  '/api/v1/transactions/{transref}':
    get:
      summary: "Get transaction by reference with ownership enforcement\nGET /api/v1/transactions/{transref}"
      operationId: getTransactionByReferenceWithOwnershipEnforcementGETapiv1transactionstransref
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
    parameters:
      -
        in: path
        name: transref
        description: ''
        example: architecto
        required: true
        schema:
          type: string
  '/api/v1/transactions/{transref}/status':
    get:
      summary: "Get transaction status (lightweight polling endpoint)\nGET /api/v1/transactions/{transref}/status"
      operationId: getTransactionStatuslightweightPollingEndpointGETapiv1transactionstransrefstatus
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
    parameters:
      -
        in: path
        name: transref
        description: ''
        example: architecto
        required: true
        schema:
          type: string
  /api/v1/services/airtime/purchase:
    post:
      summary: "Purchase Airtime\nPOST /api/v1/services/airtime"
      operationId: purchaseAirtimePOSTapiv1servicesairtime
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                network:
                  type: string
                  description: ''
                  example: architecto
                amount:
                  type: number
                  description: 'Must be at least 1.'
                  example: 22
                phone:
                  type: string
                  description: 'Must be 11 digits.'
                  example: '82256977571'
                airtime_type:
                  type: string
                  description: ''
                  example: Momo
                  enum:
                    - VTU
                    - 'Share And Sell'
                    - Momo
                    - Awoof
                ref:
                  type: string
                  description: ''
                  example: architecto
                ported_number:
                  type: string
                  description: ''
                  example: 'true'
                  enum:
                    - 'true'
                    - 'false'
                  nullable: true
              required:
                - network
                - amount
                - phone
                - airtime_type
                - ref
  /api/v1/services/data/purchase:
    post:
      summary: "Purchase Data Bundle\nPOST /api/v1/services/data"
      operationId: purchaseDataBundlePOSTapiv1servicesdata
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                network:
                  type: string
                  description: ''
                  example: architecto
                data_plan:
                  type: integer
                  description: ''
                  example: 16
                phone:
                  type: string
                  description: 'Must be 11 digits.'
                  example: '82256977571'
                ref:
                  type: string
                  description: ''
                  example: architecto
                ported_number:
                  type: string
                  description: ''
                  example: 'true'
                  enum:
                    - 'true'
                    - 'false'
                  nullable: true
                plan:
                  type: integer
                  description: ''
                  example: 16
                  nullable: true
                mobile_number:
                  type: string
                  description: 'Must be 11 digits.'
                  example: '82256977571'
                  nullable: true
              required:
                - network
                - data_plan
                - phone
                - ref
  /api/v1/services/electricity/verify:
    post:
      summary: "Verify Electricity Meter\nPOST /api/v1/services/electricity/verify"
      operationId: verifyElectricityMeterPOSTapiv1serviceselectricityverify
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                meter_number:
                  type: string
                  description: ''
                  example: architecto
                disco:
                  type: string
                  description: ''
                  example: architecto
                meter_type:
                  type: string
                  description: ''
                  example: postpaid
                  enum:
                    - prepaid
                    - postpaid
              required:
                - meter_number
                - disco
                - meter_type
  /api/v1/services/electricity/purchase:
    post:
      summary: "Purchase Electricity Token\nPOST /api/v1/services/electricity"
      operationId: purchaseElectricityTokenPOSTapiv1serviceselectricity
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                meter_number:
                  type: string
                  description: ''
                  example: architecto
                disco:
                  type: string
                  description: ''
                  example: architecto
                meter_type:
                  type: string
                  description: ''
                  example: prepaid
                  enum:
                    - prepaid
                    - postpaid
                amount:
                  type: number
                  description: 'Must be at least 1.'
                  example: 22
                ref:
                  type: string
                  description: ''
                  example: architecto
              required:
                - meter_number
                - disco
                - meter_type
                - amount
                - ref
  /api/v1/services/cable/verify:
    post:
      summary: "Verify Cable TV Smart Card\nPOST /api/v1/services/cable/verify"
      operationId: verifyCableTVSmartCardPOSTapiv1servicescableverify
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                smartcard_number:
                  type: string
                  description: ''
                  example: architecto
                provider:
                  type: string
                  description: ''
                  example: startimes
                  enum:
                    - dstv
                    - gotv
                    - startimes
              required:
                - smartcard_number
                - provider
  /api/v1/services/cable/purchase:
    post:
      summary: "Purchase Cable TV Subscription\nPOST /api/v1/services/cable"
      operationId: purchaseCableTVSubscriptionPOSTapiv1servicescable
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                smartcard_number:
                  type: string
                  description: ''
                  example: architecto
                provider:
                  type: string
                  description: ''
                  example: startimes
                  enum:
                    - dstv
                    - gotv
                    - startimes
                package_code:
                  type: string
                  description: ''
                  example: architecto
                amount:
                  type: number
                  description: 'Must be at least 1.'
                  example: 22
                ref:
                  type: string
                  description: ''
                  example: architecto
              required:
                - smartcard_number
                - provider
                - package_code
                - amount
                - ref
  /api/v1/services/exam-pins/purchase:
    post:
      summary: "Purchase Exam Pins\nPOST /api/v1/services/exam-pins"
      operationId: purchaseExamPinsPOSTapiv1servicesexamPins
      description: "Note: Exam pins route to LegacyFallbackProvider which returns PROCESSING status\nfor manual fulfillment by administrators."
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - General
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                exam_type:
                  type: string
                  description: ''
                  example: waec
                  enum:
                    - waec
                    - neco
                    - nabteb
                quantity:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                amount:
                  type: number
                  description: 'Must be at least 1.'
                  example: 22
                ref:
                  type: string
                  description: ''
                  example: architecto
              required:
                - exam_type
                - quantity
                - amount
                - ref
  /api/v1/catalog/networks:
    get:
      summary: "Get all networks\nGET /api/v1/catalog/networks"
      operationId: getAllNetworksGETapiv1catalognetworks
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  data:
                    -
                      id: 1
                      name: MTN
                      status: active
                      service_statuses:
                        vtu: active
                        sme: active
                        gifting: active
                        corporate: active
                        datapin: active
                    -
                      id: 2
                      name: GLO
                      status: active
                      service_statuses:
                        vtu: active
                        sme: active
                        gifting: active
                        corporate: active
                        datapin: active
                    -
                      id: 3
                      name: 9MOBILE
                      status: active
                      service_statuses:
                        vtu: active
                        sme: active
                        gifting: active
                        corporate: active
                        datapin: active
                    -
                      id: 4
                      name: AIRTEL
                      status: active
                      service_statuses:
                        vtu: active
                        sme: active
                        gifting: active
                        corporate: active
                        datapin: active
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        name: MTN
                        status: active
                        service_statuses:
                          vtu: active
                          sme: active
                          gifting: active
                          corporate: active
                          datapin: active
                      -
                        id: 2
                        name: GLO
                        status: active
                        service_statuses:
                          vtu: active
                          sme: active
                          gifting: active
                          corporate: active
                          datapin: active
                      -
                        id: 3
                        name: 9MOBILE
                        status: active
                        service_statuses:
                          vtu: active
                          sme: active
                          gifting: active
                          corporate: active
                          datapin: active
                      -
                        id: 4
                        name: AIRTEL
                        status: active
                        service_statuses:
                          vtu: active
                          sme: active
                          gifting: active
                          corporate: active
                          datapin: active
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        name:
                          type: string
                          example: MTN
                        status:
                          type: string
                          example: active
                        service_statuses:
                          type: object
                          properties:
                            vtu:
                              type: string
                              example: active
                            sme:
                              type: string
                              example: active
                            gifting:
                              type: string
                              example: active
                            corporate:
                              type: string
                              example: active
                            datapin:
                              type: string
                              example: active
      tags:
        - General
  /api/v1/catalog/data-plans:
    get:
      summary: "Get data plans\nGET /api/v1/catalog/data-plans?network={id}&type={type}"
      operationId: getDataPlansGETapiv1catalogdataPlansnetworkidtypetype
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  data:
                    -
                      id: 77
                      name: 200MB
                      network_id: 2
                      network_name: GLO
                      type: Corporate
                      price: 6700
                      user_price: 7200
                      validity_days: 30
                      plan_id: '325'
                    -
                      id: 78
                      name: 1GB
                      network_id: 1
                      network_name: MTN
                      type: SME2
                      price: 25400
                      user_price: 25900
                      validity_days: 30
                      plan_id: '333'
                    -
                      id: 79
                      name: 2GB
                      network_id: 1
                      network_name: MTN
                      type: SME2
                      price: 50800
                      user_price: 51500
                      validity_days: 30
                      plan_id: '334'
                    -
                      id: 80
                      name: 3GB
                      network_id: 1
                      network_name: MTN
                      type: SME2
                      price: 76200
                      user_price: 76900
                      validity_days: 30
                      plan_id: '335'
                    -
                      id: 81
                      name: 500MB
                      network_id: 1
                      network_name: MTN
                      type: SME2
                      price: 12700
                      user_price: 13000
                      validity_days: 30
                      plan_id: '332'
                    -
                      id: 82
                      name: 5GB
                      network_id: 1
                      network_name: MTN
                      type: SME2
                      price: 127000
                      user_price: 128500
                      validity_days: 30
                      plan_id: '336'
                    -
                      id: 83
                      name: 10GB
                      network_id: 1
                      network_name: MTN
                      type: SME2
                      price: 254000
                      user_price: 256000
                      validity_days: 30
                      plan_id: '337'
                    -
                      id: 233
                      name: 200MB
                      network_id: 2
                      network_name: GLO
                      type: coporate
                      price: 8500
                      user_price: 8500
                      validity_days: 30
                      plan_id: '233'
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: array
                    example:
                      -
                        id: 77
                        name: 200MB
                        network_id: 2
                        network_name: GLO
                        type: Corporate
                        price: 6700
                        user_price: 7200
                        validity_days: 30
                        plan_id: '325'
                      -
                        id: 78
                        name: 1GB
                        network_id: 1
                        network_name: MTN
                        type: SME2
                        price: 25400
                        user_price: 25900
                        validity_days: 30
                        plan_id: '333'
                      -
                        id: 79
                        name: 2GB
                        network_id: 1
                        network_name: MTN
                        type: SME2
                        price: 50800
                        user_price: 51500
                        validity_days: 30
                        plan_id: '334'
                      -
                        id: 80
                        name: 3GB
                        network_id: 1
                        network_name: MTN
                        type: SME2
                        price: 76200
                        user_price: 76900
                        validity_days: 30
                        plan_id: '335'
                      -
                        id: 81
                        name: 500MB
                        network_id: 1
                        network_name: MTN
                        type: SME2
                        price: 12700
                        user_price: 13000
                        validity_days: 30
                        plan_id: '332'
                      -
                        id: 82
                        name: 5GB
                        network_id: 1
                        network_name: MTN
                        type: SME2
                        price: 127000
                        user_price: 128500
                        validity_days: 30
                        plan_id: '336'
                      -
                        id: 83
                        name: 10GB
                        network_id: 1
                        network_name: MTN
                        type: SME2
                        price: 254000
                        user_price: 256000
                        validity_days: 30
                        plan_id: '337'
                      -
                        id: 233
                        name: 200MB
                        network_id: 2
                        network_name: GLO
                        type: coporate
                        price: 8500
                        user_price: 8500
                        validity_days: 30
                        plan_id: '233'
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 77
                        name:
                          type: string
                          example: 200MB
                        network_id:
                          type: integer
                          example: 2
                        network_name:
                          type: string
                          example: GLO
                        type:
                          type: string
                          example: Corporate
                        price:
                          type: integer
                          example: 6700
                        user_price:
                          type: integer
                          example: 7200
                        validity_days:
                          type: integer
                          example: 30
                        plan_id:
                          type: string
                          example: '325'
      tags:
        - General
  /api/v1/catalog/discos:
    get:
      summary: "Get all discos (electricity distribution companies)\nGET /api/v1/catalog/discos"
      operationId: getAllDiscoselectricityDistributionCompaniesGETapiv1catalogdiscos
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  data:
                    -
                      id: 1
                      name: 'Ikeja Electric'
                      abbreviation: IE
                      status: active
                    -
                      id: 2
                      name: 'Eko Electric'
                      abbreviation: EKEDC
                      status: active
                    -
                      id: 4
                      name: 'Port Harcourt Electric'
                      abbreviation: PHEDC
                      status: active
                    -
                      id: 6
                      name: 'Ibadan Electric'
                      abbreviation: IBEDC
                      status: active
                    -
                      id: 7
                      name: 'Kaduna Electric'
                      abbreviation: KEDC
                      status: active
                    -
                      id: 8
                      name: 'Abuja Electric'
                      abbreviation: AEDC
                      status: active
                    -
                      id: 9
                      name: 'Enugu Electric'
                      abbreviation: ENUGU
                      status: active
                    -
                      id: 10
                      name: 'Benin Electric'
                      abbreviation: BENIN
                      status: active
                    -
                      id: 11
                      name: 'Yola Electric'
                      abbreviation: YOLA
                      status: active
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        name: 'Ikeja Electric'
                        abbreviation: IE
                        status: active
                      -
                        id: 2
                        name: 'Eko Electric'
                        abbreviation: EKEDC
                        status: active
                      -
                        id: 4
                        name: 'Port Harcourt Electric'
                        abbreviation: PHEDC
                        status: active
                      -
                        id: 6
                        name: 'Ibadan Electric'
                        abbreviation: IBEDC
                        status: active
                      -
                        id: 7
                        name: 'Kaduna Electric'
                        abbreviation: KEDC
                        status: active
                      -
                        id: 8
                        name: 'Abuja Electric'
                        abbreviation: AEDC
                        status: active
                      -
                        id: 9
                        name: 'Enugu Electric'
                        abbreviation: ENUGU
                        status: active
                      -
                        id: 10
                        name: 'Benin Electric'
                        abbreviation: BENIN
                        status: active
                      -
                        id: 11
                        name: 'Yola Electric'
                        abbreviation: YOLA
                        status: active
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        name:
                          type: string
                          example: 'Ikeja Electric'
                        abbreviation:
                          type: string
                          example: IE
                        status:
                          type: string
                          example: active
      tags:
        - General
  /api/v1/catalog/cable-providers:
    get:
      summary: "Get all cable providers\nGET /api/v1/catalog/cable-providers"
      operationId: getAllCableProvidersGETapiv1catalogcableProviders
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  data:
                    -
                      id: 1
                      name: GOTV
                      status: active
                    -
                      id: 2
                      name: DSTV
                      status: active
                    -
                      id: 3
                      name: STARTIMES
                      status: active
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        name: GOTV
                        status: active
                      -
                        id: 2
                        name: DSTV
                        status: active
                      -
                        id: 3
                        name: STARTIMES
                        status: active
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        name:
                          type: string
                          example: GOTV
                        status:
                          type: string
                          example: active
      tags:
        - General
  /api/v1/catalog/cable-plans:
    get:
      summary: "Get cable plans\nGET /api/v1/catalog/cable-plans?provider={id}"
      operationId: getCablePlansGETapiv1catalogcablePlansproviderid
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  data:
                    -
                      id: 1
                      name: 'GOtv Smallie  - Monthly'
                      provider_id: 1
                      provider_name: GOTV
                      price: 135000
                      user_price: 140000
                      validity_days: 30
                      plan_id: '1'
                    -
                      id: 2
                      name: 'GOtv Smallie - Quarterly'
                      provider_id: 1
                      provider_name: GOTV
                      price: 350000
                      user_price: 356000
                      validity_days: 90
                      plan_id: '2'
                    -
                      id: 3
                      name: 'GOtv Smallie - Yearly'
                      provider_id: 1
                      provider_name: GOTV
                      price: 860000
                      user_price: 866000
                      validity_days: 365
                      plan_id: '3'
                    -
                      id: 4
                      name: 'GOtv Jinja'
                      provider_id: 1
                      provider_name: GOTV
                      price: 270000
                      user_price: 275000
                      validity_days: 30
                      plan_id: '4'
                    -
                      id: 5
                      name: 'GOtv Jolli'
                      provider_id: 1
                      provider_name: GOTV
                      price: 395000
                      user_price: 397000
                      validity_days: 30
                      plan_id: '5'
                    -
                      id: 6
                      name: 'GOtv Max'
                      provider_id: 1
                      provider_name: GOTV
                      price: 570000
                      user_price: 575000
                      validity_days: 30
                      plan_id: '6'
                    -
                      id: 7
                      name: 'GOtv Supa'
                      provider_id: 1
                      provider_name: GOTV
                      price: 760000
                      user_price: 765000
                      validity_days: 30
                      plan_id: '7'
                    -
                      id: 8
                      name: 'GOtv Super Plus'
                      provider_id: 1
                      provider_name: GOTV
                      price: 1255000
                      user_price: 1259000
                      validity_days: 30
                      plan_id: '8'
                    -
                      id: 9
                      name: 'DStv Padi'
                      provider_id: 2
                      provider_name: DSTV
                      price: 296000
                      user_price: 300000
                      validity_days: 30
                      plan_id: '9'
                    -
                      id: 10
                      name: 'DStv Yanga'
                      provider_id: 2
                      provider_name: DSTV
                      price: 420000
                      user_price: 425000
                      validity_days: 30
                      plan_id: '10'
                    -
                      id: 11
                      name: 'DStv Confam'
                      provider_id: 2
                      provider_name: DSTV
                      price: 740000
                      user_price: 745000
                      validity_days: 30
                      plan_id: '11'
                    -
                      id: 12
                      name: 'DStv Asia'
                      provider_id: 2
                      provider_name: DSTV
                      price: 995000
                      user_price: 999000
                      validity_days: 30
                      plan_id: '12'
                    -
                      id: 13
                      name: 'DStv Compact'
                      provider_id: 2
                      provider_name: DSTV
                      price: 1260000
                      user_price: 1270000
                      validity_days: 30
                      plan_id: '13'
                    -
                      id: 14
                      name: 'DStv Premium'
                      provider_id: 2
                      provider_name: DSTV
                      price: 2950000
                      user_price: 2955000
                      validity_days: 30
                      plan_id: '14'
                    -
                      id: 15
                      name: 'Nova - 1 Day'
                      provider_id: 3
                      provider_name: STARTIMES
                      price: 16000
                      user_price: 18000
                      validity_days: 1
                      plan_id: '15'
                    -
                      id: 16
                      name: 'Basic - 1 Day'
                      provider_id: 3
                      provider_name: STARTIMES
                      price: 31000
                      user_price: 32000
                      validity_days: 1
                      plan_id: '16'
                    -
                      id: 17
                      name: 'Classic - 1 Day'
                      provider_id: 3
                      provider_name: STARTIMES
                      price: 43000
                      user_price: 45000
                      validity_days: 1
                      plan_id: '17'
                    -
                      id: 18
                      name: 'Super - 1 Day'
                      provider_id: 3
                      provider_name: STARTIMES
                      price: 62000
                      user_price: 65000
                      validity_days: 1
                      plan_id: '18'
                    -
                      id: 19
                      name: 'Nova - 1 Week'
                      provider_id: 3
                      provider_name: STARTIMES
                      price: 65000
                      user_price: 70000
                      validity_days: 7
                      plan_id: '19'
                    -
                      id: 20
                      name: 'Basic - 1 Week'
                      provider_id: 3
                      provider_name: STARTIMES
                      price: 985105000
                      user_price: 110000
                      validity_days: 8
                      plan_id: '20'
                    -
                      id: 21
                      name: 'Smart - 1 Week'
                      provider_id: 3
                      provider_name: STARTIMES
                      price: 135000
                      user_price: 140000
                      validity_days: 8
                      plan_id: '21'
                    -
                      id: 22
                      name: 'Classic - 1 Week'
                      provider_id: 3
                      provider_name: STARTIMES
                      price: 155000
                      user_price: 160000
                      validity_days: 8
                      plan_id: '22'
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        name: 'GOtv Smallie  - Monthly'
                        provider_id: 1
                        provider_name: GOTV
                        price: 135000
                        user_price: 140000
                        validity_days: 30
                        plan_id: '1'
                      -
                        id: 2
                        name: 'GOtv Smallie - Quarterly'
                        provider_id: 1
                        provider_name: GOTV
                        price: 350000
                        user_price: 356000
                        validity_days: 90
                        plan_id: '2'
                      -
                        id: 3
                        name: 'GOtv Smallie - Yearly'
                        provider_id: 1
                        provider_name: GOTV
                        price: 860000
                        user_price: 866000
                        validity_days: 365
                        plan_id: '3'
                      -
                        id: 4
                        name: 'GOtv Jinja'
                        provider_id: 1
                        provider_name: GOTV
                        price: 270000
                        user_price: 275000
                        validity_days: 30
                        plan_id: '4'
                      -
                        id: 5
                        name: 'GOtv Jolli'
                        provider_id: 1
                        provider_name: GOTV
                        price: 395000
                        user_price: 397000
                        validity_days: 30
                        plan_id: '5'
                      -
                        id: 6
                        name: 'GOtv Max'
                        provider_id: 1
                        provider_name: GOTV
                        price: 570000
                        user_price: 575000
                        validity_days: 30
                        plan_id: '6'
                      -
                        id: 7
                        name: 'GOtv Supa'
                        provider_id: 1
                        provider_name: GOTV
                        price: 760000
                        user_price: 765000
                        validity_days: 30
                        plan_id: '7'
                      -
                        id: 8
                        name: 'GOtv Super Plus'
                        provider_id: 1
                        provider_name: GOTV
                        price: 1255000
                        user_price: 1259000
                        validity_days: 30
                        plan_id: '8'
                      -
                        id: 9
                        name: 'DStv Padi'
                        provider_id: 2
                        provider_name: DSTV
                        price: 296000
                        user_price: 300000
                        validity_days: 30
                        plan_id: '9'
                      -
                        id: 10
                        name: 'DStv Yanga'
                        provider_id: 2
                        provider_name: DSTV
                        price: 420000
                        user_price: 425000
                        validity_days: 30
                        plan_id: '10'
                      -
                        id: 11
                        name: 'DStv Confam'
                        provider_id: 2
                        provider_name: DSTV
                        price: 740000
                        user_price: 745000
                        validity_days: 30
                        plan_id: '11'
                      -
                        id: 12
                        name: 'DStv Asia'
                        provider_id: 2
                        provider_name: DSTV
                        price: 995000
                        user_price: 999000
                        validity_days: 30
                        plan_id: '12'
                      -
                        id: 13
                        name: 'DStv Compact'
                        provider_id: 2
                        provider_name: DSTV
                        price: 1260000
                        user_price: 1270000
                        validity_days: 30
                        plan_id: '13'
                      -
                        id: 14
                        name: 'DStv Premium'
                        provider_id: 2
                        provider_name: DSTV
                        price: 2950000
                        user_price: 2955000
                        validity_days: 30
                        plan_id: '14'
                      -
                        id: 15
                        name: 'Nova - 1 Day'
                        provider_id: 3
                        provider_name: STARTIMES
                        price: 16000
                        user_price: 18000
                        validity_days: 1
                        plan_id: '15'
                      -
                        id: 16
                        name: 'Basic - 1 Day'
                        provider_id: 3
                        provider_name: STARTIMES
                        price: 31000
                        user_price: 32000
                        validity_days: 1
                        plan_id: '16'
                      -
                        id: 17
                        name: 'Classic - 1 Day'
                        provider_id: 3
                        provider_name: STARTIMES
                        price: 43000
                        user_price: 45000
                        validity_days: 1
                        plan_id: '17'
                      -
                        id: 18
                        name: 'Super - 1 Day'
                        provider_id: 3
                        provider_name: STARTIMES
                        price: 62000
                        user_price: 65000
                        validity_days: 1
                        plan_id: '18'
                      -
                        id: 19
                        name: 'Nova - 1 Week'
                        provider_id: 3
                        provider_name: STARTIMES
                        price: 65000
                        user_price: 70000
                        validity_days: 7
                        plan_id: '19'
                      -
                        id: 20
                        name: 'Basic - 1 Week'
                        provider_id: 3
                        provider_name: STARTIMES
                        price: 985105000
                        user_price: 110000
                        validity_days: 8
                        plan_id: '20'
                      -
                        id: 21
                        name: 'Smart - 1 Week'
                        provider_id: 3
                        provider_name: STARTIMES
                        price: 135000
                        user_price: 140000
                        validity_days: 8
                        plan_id: '21'
                      -
                        id: 22
                        name: 'Classic - 1 Week'
                        provider_id: 3
                        provider_name: STARTIMES
                        price: 155000
                        user_price: 160000
                        validity_days: 8
                        plan_id: '22'
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        name:
                          type: string
                          example: 'GOtv Smallie  - Monthly'
                        provider_id:
                          type: integer
                          example: 1
                        provider_name:
                          type: string
                          example: GOTV
                        price:
                          type: integer
                          example: 135000
                        user_price:
                          type: integer
                          example: 140000
                        validity_days:
                          type: integer
                          example: 30
                        plan_id:
                          type: string
                          example: '1'
      tags:
        - General
  /api/v1/catalog/exam-types:
    get:
      summary: "Get all exam types\nGET /api/v1/catalog/exam-types"
      operationId: getAllExamTypesGETapiv1catalogexamTypes
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  data:
                    -
                      id: 1
                      name: WAEC
                      price: 350000
                      status: active
                    -
                      id: 2
                      name: NECO
                      price: 85000
                      status: active
                    -
                      id: 3
                      name: NABTEB
                      price: 95000
                      status: active
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        name: WAEC
                        price: 350000
                        status: active
                      -
                        id: 2
                        name: NECO
                        price: 85000
                        status: active
                      -
                        id: 3
                        name: NABTEB
                        price: 95000
                        status: active
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        name:
                          type: string
                          example: WAEC
                        price:
                          type: integer
                          example: 350000
                        status:
                          type: string
                          example: active
      tags:
        - General
