curl --request POST \
--url https://api.clickpesa.com/third-parties/checkout-link/generate-checkout-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"totalPrice": "<string>",
"orderReference": "<string>",
"customerName": "<string>",
"customerEmail": "<string>",
"customerPhone": "<string>",
"description": "<string>",
"callbackUrl": "<string>",
"wooCommerceCallbackURL": "<string>",
"checksum": "<string>"
}
'import requests
url = "https://api.clickpesa.com/third-parties/checkout-link/generate-checkout-url"
payload = {
"totalPrice": "<string>",
"orderReference": "<string>",
"customerName": "<string>",
"customerEmail": "<string>",
"customerPhone": "<string>",
"description": "<string>",
"callbackUrl": "<string>",
"wooCommerceCallbackURL": "<string>",
"checksum": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
totalPrice: '<string>',
orderReference: '<string>',
customerName: '<string>',
customerEmail: '<string>',
customerPhone: '<string>',
description: '<string>',
callbackUrl: '<string>',
wooCommerceCallbackURL: '<string>',
checksum: '<string>'
})
};
fetch('https://api.clickpesa.com/third-parties/checkout-link/generate-checkout-url', 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.clickpesa.com/third-parties/checkout-link/generate-checkout-url",
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([
'totalPrice' => '<string>',
'orderReference' => '<string>',
'customerName' => '<string>',
'customerEmail' => '<string>',
'customerPhone' => '<string>',
'description' => '<string>',
'callbackUrl' => '<string>',
'wooCommerceCallbackURL' => '<string>',
'checksum' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.clickpesa.com/third-parties/checkout-link/generate-checkout-url"
payload := strings.NewReader("{\n \"totalPrice\": \"<string>\",\n \"orderReference\": \"<string>\",\n \"customerName\": \"<string>\",\n \"customerEmail\": \"<string>\",\n \"customerPhone\": \"<string>\",\n \"description\": \"<string>\",\n \"callbackUrl\": \"<string>\",\n \"wooCommerceCallbackURL\": \"<string>\",\n \"checksum\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.clickpesa.com/third-parties/checkout-link/generate-checkout-url")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"totalPrice\": \"<string>\",\n \"orderReference\": \"<string>\",\n \"customerName\": \"<string>\",\n \"customerEmail\": \"<string>\",\n \"customerPhone\": \"<string>\",\n \"description\": \"<string>\",\n \"callbackUrl\": \"<string>\",\n \"wooCommerceCallbackURL\": \"<string>\",\n \"checksum\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.clickpesa.com/third-parties/checkout-link/generate-checkout-url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"totalPrice\": \"<string>\",\n \"orderReference\": \"<string>\",\n \"customerName\": \"<string>\",\n \"customerEmail\": \"<string>\",\n \"customerPhone\": \"<string>\",\n \"description\": \"<string>\",\n \"callbackUrl\": \"<string>\",\n \"wooCommerceCallbackURL\": \"<string>\",\n \"checksum\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"checkoutLink": "<string>",
"clientId": "<string>"
}{
"message": "Invalid Order Reference, should only contain alphanumeric characters and cannot be blank"
}{
"message": "Unauthorized"
}{
"message": "Checkout is not available for this merchant"
}{
"message": "Order reference {Your reference} already used: Create a different reference"
}Generate Checkout Link
Generates a link for receiving payments via Hosted Checkout. After payment, customers are redirected to the Return URL configured on your hosted application in the dashboard. For payment status updates, use application webhooks and/or an optional callbackUrl on the request body (see Payment notifications in the Checkout Link API guide).
curl --request POST \
--url https://api.clickpesa.com/third-parties/checkout-link/generate-checkout-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"totalPrice": "<string>",
"orderReference": "<string>",
"customerName": "<string>",
"customerEmail": "<string>",
"customerPhone": "<string>",
"description": "<string>",
"callbackUrl": "<string>",
"wooCommerceCallbackURL": "<string>",
"checksum": "<string>"
}
'import requests
url = "https://api.clickpesa.com/third-parties/checkout-link/generate-checkout-url"
payload = {
"totalPrice": "<string>",
"orderReference": "<string>",
"customerName": "<string>",
"customerEmail": "<string>",
"customerPhone": "<string>",
"description": "<string>",
"callbackUrl": "<string>",
"wooCommerceCallbackURL": "<string>",
"checksum": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
totalPrice: '<string>',
orderReference: '<string>',
customerName: '<string>',
customerEmail: '<string>',
customerPhone: '<string>',
description: '<string>',
callbackUrl: '<string>',
wooCommerceCallbackURL: '<string>',
checksum: '<string>'
})
};
fetch('https://api.clickpesa.com/third-parties/checkout-link/generate-checkout-url', 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.clickpesa.com/third-parties/checkout-link/generate-checkout-url",
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([
'totalPrice' => '<string>',
'orderReference' => '<string>',
'customerName' => '<string>',
'customerEmail' => '<string>',
'customerPhone' => '<string>',
'description' => '<string>',
'callbackUrl' => '<string>',
'wooCommerceCallbackURL' => '<string>',
'checksum' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.clickpesa.com/third-parties/checkout-link/generate-checkout-url"
payload := strings.NewReader("{\n \"totalPrice\": \"<string>\",\n \"orderReference\": \"<string>\",\n \"customerName\": \"<string>\",\n \"customerEmail\": \"<string>\",\n \"customerPhone\": \"<string>\",\n \"description\": \"<string>\",\n \"callbackUrl\": \"<string>\",\n \"wooCommerceCallbackURL\": \"<string>\",\n \"checksum\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.clickpesa.com/third-parties/checkout-link/generate-checkout-url")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"totalPrice\": \"<string>\",\n \"orderReference\": \"<string>\",\n \"customerName\": \"<string>\",\n \"customerEmail\": \"<string>\",\n \"customerPhone\": \"<string>\",\n \"description\": \"<string>\",\n \"callbackUrl\": \"<string>\",\n \"wooCommerceCallbackURL\": \"<string>\",\n \"checksum\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.clickpesa.com/third-parties/checkout-link/generate-checkout-url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"totalPrice\": \"<string>\",\n \"orderReference\": \"<string>\",\n \"customerName\": \"<string>\",\n \"customerEmail\": \"<string>\",\n \"customerPhone\": \"<string>\",\n \"description\": \"<string>\",\n \"callbackUrl\": \"<string>\",\n \"wooCommerceCallbackURL\": \"<string>\",\n \"checksum\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"checkoutLink": "<string>",
"clientId": "<string>"
}{
"message": "Invalid Order Reference, should only contain alphanumeric characters and cannot be blank"
}{
"message": "Unauthorized"
}{
"message": "Checkout is not available for this merchant"
}{
"message": "Order reference {Your reference} already used: Create a different reference"
}Authorizations
Authorization header containing the JWT access token returned from the generate token endpoint. The token already includes the Bearer prefix. Example: Authorization: Bearer eyJhbGciOi...
Body
- Body With Total Amount
- Body With Order Items
Your order amount
Your unique Order reference
Your order payment currency to receive in(e.g., TZS, USD)
TZS, USD Your customer name
Your customer email
Your customer phone number, starting with country code and without the plus sign, e.g., 255712345678
Your order description
Optional URL that receives an HTTP POST when a payment for this checkout link succeeds. Separate from application webhooks configured in the dashboard.
Optional WooCommerce order callback URL for this checkout link.
If enabled, this is the generated checksum of the payload. Refer to the documentation for more details.

