Skip to main content
POST
/
v1
/
links
Create payment link
curl --request POST \
  --url https://api.platnova.com/v1/links \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <api-key>' \
  --data '
{
  "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"
      }
    ]
  }
}
'
import requests

url = "https://api.platnova.com/v1/links"

payload = {
"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"
}
]
}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
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'}]}
})
};

fetch('https://api.platnova.com/v1/links', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.platnova.com/v1/links",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.platnova.com/v1/links"

payload := strings.NewReader("{\n \"title\": \"Invoice #1001\",\n \"description\": \"Payment for services\",\n \"amount\": 50000,\n \"currency\": \"NGN\",\n \"expires_at\": \"2026-02-28T23:59:59Z\",\n \"customer\": {\n \"can_set_price\": false\n },\n \"payment\": {\n \"limit\": 1,\n \"payment_methods\": [\n {\n \"id\": \"bank_transfer\",\n \"value\": \"058\"\n }\n ]\n }\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.platnova.com/v1/links")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Invoice #1001\",\n \"description\": \"Payment for services\",\n \"amount\": 50000,\n \"currency\": \"NGN\",\n \"expires_at\": \"2026-02-28T23:59:59Z\",\n \"customer\": {\n \"can_set_price\": false\n },\n \"payment\": {\n \"limit\": 1,\n \"payment_methods\": [\n {\n \"id\": \"bank_transfer\",\n \"value\": \"058\"\n }\n ]\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.platnova.com/v1/links")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Invoice #1001\",\n \"description\": \"Payment for services\",\n \"amount\": 50000,\n \"currency\": \"NGN\",\n \"expires_at\": \"2026-02-28T23:59:59Z\",\n \"customer\": {\n \"can_set_price\": false\n },\n \"payment\": {\n \"limit\": 1,\n \"payment_methods\": [\n {\n \"id\": \"bank_transfer\",\n \"value\": \"058\"\n }\n ]\n }\n}"

response = http.request(request)
puts response.read_body
{
  "status": true,
  "data": {
    "id": "<string>",
    "title": "<string>",
    "description": "<string>",
    "amount": 123,
    "url": "<string>",
    "status": 123,
    "expires_at": "2023-11-07T05:31:56Z",
    "created_at": "2023-11-07T05:31:56Z",
    "updated_at": "2023-11-07T05:31:56Z"
  },
  "error": [
    "<unknown>"
  ],
  "message": "<string>"
}
{
"status": true,
"data": {},
"error": [
"<unknown>"
],
"message": "<string>"
}
{
"error": {
"title": [
"This field is required"
],
"currency": [
"This field is required"
],
"payment": [
"This field is required"
]
}
}

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.

Authorizations

X-API-KEY
string
header
required

API key for authentication.

Body

application/json
title
string
required

Link title

currency
string
required

Currency code (e.g. NGN, USD)

payment
object
required
description
string

Optional description

amount
number

Fixed amount; required when customer.can_set_price is false

expires_at
string<date-time>

Optional expiry (ISO 8601)

customer
object

Response

Payment link created successfully

status
boolean
data
object
error
any[]
message
string