Skip to main content
POST
/
v1
/
payment-codes
Create Payment Code
curl --request POST \
  --url https://api.monime.io/v1/payment-codes \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: <idempotency-key>' \
  --header 'Monime-Space-Id: <monime-space-id>' \
  --data '{
  "mode": "one_time",
  "name": "Home EDSA Meter Top-up",
  "enable": true,
  "amount": {
    "currency": "<string>",
    "value": 123
  },
  "duration": "1h30m",
  "customer": {
    "name": "Musa Kamara"
  },
  "reference": "<string>",
  "authorizedProviders": [
    "m17"
  ],
  "authorizedPhoneNumber": "<string>",
  "recurrentPaymentTarget": {
    "expectedPaymentCount": 10,
    "expectedPaymentTotal": {
      "currency": "<string>",
      "value": 123
    }
  },
  "financialAccountId": "<string>",
  "metadata": {}
}'
{
  "success": true,
  "messages": [
    "<any>"
  ],
  "result": {
    "id": "<string>",
    "mode": "one_time",
    "status": "pending",
    "name": "Home EDSA Meter Top-up",
    "amount": {
      "currency": "<string>",
      "value": 123
    },
    "enable": true,
    "expireTime": "2023-11-07T05:31:56Z",
    "customer": {
      "name": "Musa Kamara"
    },
    "ussdCode": "<string>",
    "reference": "<string>",
    "authorizedProviders": [
      "m17",
      "m18"
    ],
    "authorizedPhoneNumber": "<string>",
    "recurrentPaymentTarget": {
      "expectedPaymentCount": 10,
      "expectedPaymentTotal": {
        "currency": "<string>",
        "value": 123
      }
    },
    "financialAccountId": "<string>",
    "processedPaymentData": {
      "amount": {
        "currency": "<string>",
        "value": 123
      },
      "orderId": "<string>",
      "paymentId": "<string>",
      "orderNumber": "<string>",
      "channelData": {
        "providerId": "<string>",
        "accountId": "<string>",
        "reference": "<string>"
      },
      "financialTransactionReference": "<string>",
      "metadata": {}
    },
    "createTime": "2023-11-07T05:31:56Z",
    "updateTime": "2023-11-07T05:31:56Z",
    "ownershipGraph": {
      "owner": {
        "id": "<string>",
        "type": "<string>",
        "metadata": {},
        "owner": {
          "id": "<string>",
          "type": "<string>",
          "metadata": {},
          "owner": {}
        }
      }
    },
    "metadata": {}
  }
}

Authorizations

Authorization
string
header
required

Bearer HTTP authentication specified with the header Authorization: Bearer <access_token>

Headers

Idempotency-Key
string
required

This header is used to uniquely identify a logical request, ensuring that it is not processed more than once during retries.

Maximum length: 64
Monime-Version
enum<string> | null

Specifies which version of the Monime API will handle this request.

Available options:
caph.2025-08-23,
caph.2025-06-20
Monime-Space-Id
string
required

The value is the tenancy parameter that Monime uses to determine which space the request is intended for.

Maximum length: 64

Body

application/json

Creates a new payment code with the specified parameters for value collection and provider restrictions.

name
string | null
required

Descriptive name for the payment code, used for display or tracking.

Required string length: 3 - 64
Example:

"Home EDSA Meter Top-up"

mode
enum<string>
default:one_time

Defines whether the payment code is single-use ('one_time') or reusable ('recurrent').

Available options:
one_time,
recurrent
enable
boolean
default:true

Whether the payment code should be enabled for use on creation.

amount
object

Amount to charge per use of the payment code. For 'recurrent' codes, this applies to each payment.

duration
string
default:10m

How long the payment code remains valid before expiring.

Example:

"1h30m"

customer
object | null

Customer associated with the payment code, if any.

reference
string | null

Reference tag to associate with this payment code for reconciliation or tracking.

Maximum length: 64
authorizedProviders
enum<string>[] | null

List of mobile money provider IDs permitted to process payments using this code.

Required array length: 1 - 10 elements
authorizedPhoneNumber
string

MSISDN of the mobile money account exclusively allowed to use this code.

recurrentPaymentTarget
object | null

Defines the target number of payments or total amount for completing a recurrent code.

financialAccountId
string | null

Financial account where collected funds are settled. Defaults to the main account if omitted.

Maximum length: 64
metadata
object | null

Optional metadata for attaching custom business context to the payment code.

Response

200 - application/json

OK

success
boolean

Represents the status of the query operation, confirming if it was successful. This field is always true

messages
any[]

Contains a list of messages providing relevant information or feedback related to the query or operation

result
object

A Payment Code is a programmable, short-lived token that allows users to collect payments from others.
It is especially useful in USSD-like or QR-based flows, where the payer enters or scans a code to complete a transaction.

Payment Codes provide flexibility for both one-time and recurrent collections, with configurable restrictions and targets.


Use Cases

  • USSD Payment Collection
    A merchant generates a Payment Code and displays it in USSD. Customers enter the code to make payments.
    Example: A vendor creates a one-time code for SLE 50 which a customer redeems via their mobile money wallet.

  • QR Code at Point of Sale
    The Payment Code is encoded as a QR displayed at checkout. Customers scan the QR to pay.
    Example: A shop generates a QR-based Payment Code for SLE 200, which is redeemed on the spot.

  • Recurring Subscription Collection
    A fitness center issues a recurrent Payment Code for monthly fees.
    Example: The code accepts up to 12 payments of SLE 500 each, after which it auto-completes.

  • Targeted Collection
    Restrict a Payment Code to a specific MSISDN or provider.
    Example: Only customers on Orange Money with a registered number can redeem the code.


⌘I