> ## Documentation Index
> Fetch the complete documentation index at: https://docs.niobi.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Payment Link

> Creates a payment link, and allows you to pass customer details, such as name, email, or phone number, so that the generated payment link is prefilled with this information. When shared with a customer, the link opens Niobi's [hosted checkout](/collecting-payments/methods#hosted-checkout) page, where they confirm their details and complete payment without you building any UI.

<Note>
  Please make sure to generate a new `signature` whenever you are creating a new payment link request.
</Note>

<Note>
  You can pre-fill the payer's details on the link by passing `first_name`, `last_name`, `email`, and `phone` at creation time. When these are included, the customer's [hosted checkout](/collecting-payments/payment-links) page loads with their details already filled in, so they only need to pick a payment method and confirm.
</Note>

<Card title="Currency Country ID (Optional)">
  `currency_country_id` identifies the country of the payer (customer), based on the selected currency. It is used to support multi-country currency scenarios and ensures payments are routed correctly depending on the payer’s location.
  For backward compatibility, this field is optional; if omitted the system will infer the country from `currency` and `country_id` where possible.
</Card>

## List of Supported Countries

This endpoint covers every corridor available through the payment link API.

<div className="payment-link-countries-table">
  | ID | Country        | Code   | Currency  | Payment Method type                         | Status                          |
  | -- | -------------- | ------ | --------- | ------------------------------------------- | ------------------------------- |
  | 1  | Kenya          | 254    | KES       | till number, pay bill, pesalink, send money | Active                          |
  | 2  | Benin          | 229    | XOF       | mtn                                         | Active                          |
  | 3  | Cote D'Ivoire  | 225    | XOF       | mtn, Orange                                 | Active                          |
  | 4  | Cameroon       | 237    | XAF       | mtn, Orange                                 | Active                          |
  | 5  | DRC            | 243    | CDF       | Airtel, Orange, Vodacom                     | Active                          |
  | 7  | Malawi         | 265    | MWK       | Airtel, TNM                                 | Coming Soon (Q3 2026)           |
  | 8  | Rwanda         | 250    | RWF       | MTN MOMO, Airtel, eKash                     | Active                          |
  | 9  | Senegal        | 221    | XOF       | Orange, Free                                | Active                          |
  | 10 | Tanzania       | 255    | TZS       | Airtel, Halotel, Tigo                       | Active                          |
  | 11 | Uganda         | 256    | UGX       | mtn, Airtel                                 | Active                          |
  | 12 | Zambia         | 260    | ZMW       | Zamtel, mtn                                 | Active                          |
  | 13 | Sierra Leone   | 232    | SLE       | Orange                                      | Active                          |
  | 15 | South Africa   | 27     | ZAR       | bank\_eft, capitec                          | Active                          |
  | 16 | Ghana          | 233    | GHS       | mtn, At(AirtelTigo), Vodafone               | Active                          |
  | 17 | Nigeria        | 234    | NGN       | bank                                        | Active                          |
  | 18 | Burkina Faso   | 226    | XOF       | Orange, Moov                                | Active                          |
  | 19 | Canada         | 1      | CAD       | SWIFT                                       | Not Supported via Payment Links |
  | 20 | China          | 86     | CNY       | CNAP Payout, CNAP Payin, AliPay, WeChat Pay | Coming Soon (Q4 2026)           |
  | 21 | Egypt          | 20     | EGP       | Vodafone Cash, Orange Cash, Etisalat Cash   | Coming Soon (Q1 2027)           |
  | 22 | Ethiopia       | 251    | ETB       | Tele-Birr, M-Birr                           | Coming Soon (Q1 2027)           |
  | 23 | Europe         | EU     | EUR       | SEPA                                        | Not Supported via Payment Links |
  | 24 | Mali           | 223    | XOF       | Orange, Moov                                | Active                          |
  | 25 | Mozambique     | 258    | MZN       | Vodacom MPESA, Movitel, Tmcel, SIMO         | Coming Soon (Q1 2027)           |
  | 26 | Pakistan       | 92     | PKR       | SWIFT, Raast, JazzCash, Easypaisa           | Coming Soon (Q4 2026)           |
  | 27 | Stablecoins    | CRYPTO | USDT/USDC | ERC20, TRC20, Polygon, Solana               | Active                          |
  | 28 | Togo           | 228    | XOF       | Moov, T Money                               | Active                          |
  | 29 | UAE            | 971    | AED       | SWIFT                                       | Not Supported via Payment Links |
  | 30 | United Kingdom | 44     | GBP       | SWIFT, FPS                                  | Coming Soon (Q4 2026)           |
  | 31 | United States  | 1      | USD       | SWIFT, ACH, Fedwire                         | Coming Soon (Q4 2026)           |
</div>

<Note>
  For Senegal Orange deposits, the end user receives an SMS with a shortcode after the deposit is initiated. They dial the shortcode, triggering a USSD prompt where they input their PIN to approve the transaction.
</Note>


## OpenAPI

````yaml post /api/v3/payment-link-api/create
openapi: 3.0.0
info:
  title: Niobi API
  description: >-
    REST API for collecting payments, sending payouts, and managing
    multi-currency wallets across Africa and global corridors. All requests
    require IP whitelisting and a unique per-request HMAC SHA-256 signature.
  version: 4.0.0
servers:
  - url: https://sandbox.users.niobi.co
    description: Sandbox, Development and Testing
security: []
tags:
  - name: Niobi
    description: API Endpoints of Niobi
paths:
  /api/v3/payment-link-api/create:
    post:
      tags:
        - payment-link
      summary: Create Payment Link
      description: >-
        Creates a payment link, and allows you to pass customer details, such as
        name, email, or phone number, so that the generated payment link is
        prefilled with this information. When shared with a customer, the link
        opens Niobi's [hosted
        checkout](/collecting-payments/methods#hosted-checkout) page, where they
        confirm their details and complete payment without you building any UI.
      operationId: 8c0c62aaa073c36980bba5b57d1518c1
      requestBody:
        description: Payload for creating a payment link for API
        required: true
        content:
          application/json:
            schema:
              required:
                - client_id
                - salt
                - sender
                - timestamp
                - signature
                - params
                - params.business_name
                - params.country_id
                - params.currency
              properties:
                client_id:
                  description: >-
                    The Client id is your public key which is generated when you
                    are creating a new API integration from our app.
                  type: string
                  example: K1PoY1WYricSpXh6Wm24twnk6ecPJOWrHGsqiKJr
                salt:
                  type: string
                  description: >-
                    Salt is used for security purposes. This is a random string
                    and can be unique value for each request or always the same.
                  example: justrandomstring
                sender:
                  type: string
                  description: >-
                    The Sender is the title of the API Integration which was
                    created through our app. you can just copy this title and
                    use it whenever making a new signature
                  example: John.co
                timestamp:
                  type: integer
                  description: this is the current timestamp when the request is being made
                  example: 1709363033
                signature:
                  type: string
                  example: >-
                    2193d01d50d4bd5da234ac0e0add5d4ccb40907a1b1ab27a12d2c1d88a5d5807
                params:
                  properties:
                    business_name:
                      type: string
                      example: my business
                    item_name:
                      type: string
                      example: item name
                    callback_url:
                      type: string
                      format: uri
                      example: https://webhook.site/unique-id
                    redirection_url:
                      type: string
                      format: uri
                      example: https://webhook.site/unique-id
                    currency:
                      type: string
                      example: KES
                    amount:
                      type: integer
                      example: 5000
                    logo:
                      type: string
                      format: logo
                      example: >-
                        This is brand logo. Use the base64 format to upload a
                        file of maximum 2MB size.
                    country_id:
                      type: integer
                      example: 1
                      description: Niobi Country ID (e.g. 1 for Kenya)
                    currency_country_id:
                      type: integer
                      example: 1
                      description: Currency Country ID
                    first_name:
                      type: string
                      example: John
                      description: Customer first name
                    last_name:
                      type: string
                      example: Doe
                      description: Customer last name
                    email:
                      type: string
                      example: johndoe@example.com
                      description: Customer email address
                    phone:
                      type: string
                      example: '254161166649'
                      description: Customer phone number in international format
                  type: object
              type: object
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Payment link created successfully.
                  data:
                    type: object
                    properties:
                      payment_link_id:
                        type: integer
                        example: 142
                        description: Unique internal payment link ID
                      link:
                        type: string
                        example: >-
                          https://payments.niobi.co/pay/550e8400-e29b-41d4-a716-446655440000?environment=dev
                        description: Hosted checkout URL to redirect the customer to
                      amount:
                        type: number
                        example: 5000
                        description: Payment link fixed amount
                      logo:
                        type: string
                        example: https://s3.amazonaws.com/.../logo.png
                        description: Hosted merchant brand logo URL
                      business_name:
                        type: string
                        example: Acme Store
                        description: Merchant trading name displayed on checkout
                      currency_country_id:
                        type: integer
                        example: 1
                        description: Currency country ID
                      country_id:
                        type: integer
                        example: 1
                        description: Destination country ID
                      currency:
                        type: string
                        example: KES
                        description: Billing currency code
                      item_name:
                        type: string
                        example: Software Subscription
                        description: Product or service line item title
                      callback_url:
                        type: string
                        example: https://example.com/callback
                        description: Webhook listener for payment completion events
                      redirection_url:
                        type: string
                        example: https://example.com/checkout/success
                        description: Customer post-payment redirect URL
                      description:
                        type: string
                        example: Monthly subscription fee
                        description: Checkout item description
                      long_description:
                        type: string
                        example: >-
                          Covers the Pro plan for one calendar month, billed in
                          advance.
                        description: >-
                          Extended checkout description, JSON-encoded if passed
                          as structured content
                      status:
                        type: string
                        example: active
                        description: 'Status: active, expired, or completed'
                      first_name:
                        type: string
                        example: John
                        description: Pre-filled customer first name
                      last_name:
                        type: string
                        example: Doe
                        description: Pre-filled customer last name
                      email:
                        type: string
                        example: johndoe@example.com
                        description: Pre-filled customer email
                      phone:
                        type: string
                        example: '254161166649'
                        description: Pre-filled customer mobile number
                type: object
              example:
                success: true
                message: Payment link created successfully.
                data:
                  payment_link_id: 142
                  link: >-
                    https://payments.niobi.co/pay/550e8400-e29b-41d4-a716-446655440000?environment=dev
                  amount: 5000
                  logo: https://s3.amazonaws.com/.../logo.png
                  business_name: Acme Store
                  currency_country_id: 1
                  country_id: 1
                  currency: KES
                  item_name: Software Subscription
                  callback_url: https://example.com/callback
                  redirection_url: https://example.com/checkout/success
                  description: Monthly subscription fee
                  long_description: >-
                    Covers the Pro plan for one calendar month, billed in
                    advance.
                  status: active
                  first_name: John
                  last_name: Doe
                  email: johndoe@example.com
                  phone: '254161166649'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: Payment link was not created.
                type: object
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: Entity integration record not found.
                type: object
      security:
        - apiKeyAuth: []
components: {}

````