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"
]
}
}Payment Links
Create Payment Link
Create a shareable payment link
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
API key for authentication.
Body
application/json
Link title
Currency code (e.g. NGN, USD)
Show child attributes
Show child attributes
Optional description
Fixed amount; required when customer.can_set_price is false
Optional expiry (ISO 8601)
Show child attributes
Show child attributes
⌘I

