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

# Create Payment Link

> Create a shareable payment link

## Overview

Create a payment link that can be shared with customers to collect payments. Payment links allow you to generate shareable URLs that customers can use to make payments without requiring them to have an account.


## OpenAPI

````yaml POST /v1/links
openapi: 3.1.0
info:
  title: API
  version: 1.0.0
  description: >-
    Platnova's Business API allows businesses to issue virtual accounts and
    cards to their employees, vendors, or retail customers. It allows businesses
    to streamline the process of issuing cards, manage spending, and track
    transactions. The API documentation provides information on how to integrate
    our virtual card issuing system into a business's existing systems and
    outlines the features and functionalities of the API, including card and
    account creation, management, and reporting. It also provides technical
    specifications, such as API requests, responses, and authentication
    processes.


    The API documentation is intended for developers and IT teams to use in
    order to effectively implement Platnova solutions into their business
    processes.


    # Authentication/Authorization


    To access any of the resources on the `{BaseUrl}/v1/`, the client has to
    pass pre-defined headers for authentication and authorization.


    The API is secure and only authorized clients can consume the service. There
    are API keys assigned to every business and JWT tokens assigned to every
    account for authentication/authorization.


    ## Bearer Token


    Requests may accept jwt tokens as below.


    ``` json

    Authorization: Bearer <jwt token>

     ```

    ## API Key


    Requests may acccept an api key either in the request headers or as a query
    parameter. Some requests cannot be authorized using an API key.


    ``` json

    X-API-KEY: <api key>

     ```

    OR


    ``` json

    ?api-key=<api key>

     ```

    # Base URL


    [https://sandbox.api.platnova.co](https://sandbox.api.platnova.co)


    # Errors


    Unauthorized API key


    ``` json

    {
        "status": false,
        "data": {},
        "error": [],
        "message": "unauthorized access"
    }

     ```

    Permission Denied


    ``` json

    {
        "status": false,
        "data": {},
        "error": [],
        "message": "unauthorized access: permission denied"
    }

     ```
servers:
  - url: https://api.platnova.com
    description: Production server
  - url: https://sandbox.api.platnova.co
    description: Development server
security:
  - apiKeyAuth: []
tags:
  - name: Customer
    description: Create and manage customers
  - name: Virtual Account
    description: Create and manage virtual accounts
  - name: Card
    description: Create and manage cards
  - name: Wallet
    description: List and manage wallets
  - name: Payment
    description: Send and verify payments
  - name: Transaction
    description: List transactions and generate receipts
  - name: Checkout
    description: Create and retrieve checkout sessions
  - name: Payment Link
    description: Create and manage payment links
  - name: Invoice
    description: Create and manage invoices
paths:
  /v1/links:
    post:
      tags:
        - Payment Link
      summary: Create payment link
      description: Create a shareable payment link
      operationId: createLink
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLinkRequest'
            example:
              title: 'Invoice #1001'
              description: Payment for services
              amount: 50000
              currency: NGN
              expires_at: '2026-02-28T23:59:59Z'
              customer:
                can_set_price: false
              payment:
                limit: 1
                payment_methods:
                  - id: bank_transfer
                    value: '058'
      responses:
        '200':
          description: Payment link created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        description: Link UID
                      title:
                        type: string
                      description:
                        type: string
                      amount:
                        type: number
                      url:
                        type: string
                        description: Shareable URL path
                      status:
                        type: integer
                      expires_at:
                        type: string
                        format: date-time
                      created_at:
                        type: string
                        format: date-time
                      updated_at:
                        type: string
                        format: date-time
                  error:
                    type: array
                    items: {}
                  message:
                    type: string
        '400':
          description: >-
            Bad request (e.g. payment methods required, amount required when
            customer cannot set price, invalid payment method)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError422'
              example:
                error:
                  title:
                    - This field is required
                  currency:
                    - This field is required
                  payment:
                    - This field is required
components:
  schemas:
    CreateLinkRequest:
      type: object
      required:
        - title
        - currency
        - payment
      properties:
        title:
          type: string
          description: Link title
        description:
          type: string
          description: Optional description
        amount:
          type: number
          description: Fixed amount; required when customer.can_set_price is false
        currency:
          type: string
          description: Currency code (e.g. NGN, USD)
        expires_at:
          type: string
          format: date-time
          description: Optional expiry (ISO 8601)
        customer:
          type: object
          properties:
            can_set_price:
              type: boolean
              description: If true, payer can choose amount; then amount may be omitted
        payment:
          type: object
          required:
            - payment_methods
          properties:
            limit:
              type: integer
              description: Max number of payments per link
            payment_methods:
              type: array
              items:
                type: object
                required:
                  - id
                  - value
                properties:
                  id:
                    type: string
                    description: Payment method type (e.g. bank_transfer)
                  value:
                    type: string
                    description: Method-specific value (e.g. bank code)
    Error:
      type: object
      properties:
        status:
          type: boolean
        data:
          type: object
        error:
          type: array
          items: {}
        message:
          type: string
          description: Error message
    ValidationError422:
      type: object
      description: Validation error response (422). Keys are request body field names.
      properties:
        error:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Field name to list of error messages
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
      description: API key for authentication.

````