curl --request POST \
--url https://secureapi.tender.cash/v1/api/agent/create \
--header 'Content-Type: <content-type>' \
--header 'authorization: <api-key>' \
--header 'x-access-id: <x-access-id>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-timestamp: <x-timestamp>' \
--data '
{
"type": "online",
"name": "Lagos Fashion Store",
"email": "lagosfashion@store.com",
"location": "Lagos",
"country": "Nigeria",
"currency": "NGN",
"outletIntent": "API integration"
}
'const options = {
method: 'POST',
headers: {
authorization: '<api-key>',
'x-timestamp': '<x-timestamp>',
'x-request-id': '<x-request-id>',
'x-access-id': '<x-access-id>',
'Content-Type': '<content-type>'
},
body: JSON.stringify({
type: 'online',
name: 'Lagos Fashion Store',
email: 'lagosfashion@store.com',
location: 'Lagos',
country: 'Nigeria',
currency: 'NGN',
outletIntent: 'API integration'
})
};
fetch('https://secureapi.tender.cash/v1/api/agent/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://secureapi.tender.cash/v1/api/agent/create"
payload = {
"type": "online",
"name": "Lagos Fashion Store",
"email": "lagosfashion@store.com",
"location": "Lagos",
"country": "Nigeria",
"currency": "NGN",
"outletIntent": "API integration"
}
headers = {
"authorization": "<api-key>",
"x-timestamp": "<x-timestamp>",
"x-request-id": "<x-request-id>",
"x-access-id": "<x-access-id>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://secureapi.tender.cash/v1/api/agent/create",
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([
'type' => 'online',
'name' => 'Lagos Fashion Store',
'email' => 'lagosfashion@store.com',
'location' => 'Lagos',
'country' => 'Nigeria',
'currency' => 'NGN',
'outletIntent' => 'API integration'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: <content-type>",
"authorization: <api-key>",
"x-access-id: <x-access-id>",
"x-request-id: <x-request-id>",
"x-timestamp: <x-timestamp>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"status": "success",
"message": "success",
"data": {
"id": "66f33b1fa9446a6b6b8f32cd",
"reference": "vbibtucm9ynq3k2x7p",
"name": "Lagos Fashion Store",
"type": "online",
"email": "<string>",
"phoneNumber": "<string>",
"location": "<string>",
"country": "<string>",
"active": true,
"merchantId": "<string>",
"currency": "NGN",
"totalSales": "0",
"defaultFiatCurrency": {
"currency": "<string>",
"rate": "<string>",
"useSystemRate": true
},
"createdAt": "2023-11-07T05:31:56Z"
}
}{
"status": "error",
"message": "phoneNumber must include a valid country code",
"data": null
}{
"status": "error",
"message": "INVALID_REQUEST_SIGNATURE",
"data": {}
}{
"status": "error",
"message": "Too many requests. Max 120 per 60s.",
"data": null
}Create Outlet
Create an outlet (agent or sub-business) under your merchant account
curl --request POST \
--url https://secureapi.tender.cash/v1/api/agent/create \
--header 'Content-Type: <content-type>' \
--header 'authorization: <api-key>' \
--header 'x-access-id: <x-access-id>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-timestamp: <x-timestamp>' \
--data '
{
"type": "online",
"name": "Lagos Fashion Store",
"email": "lagosfashion@store.com",
"location": "Lagos",
"country": "Nigeria",
"currency": "NGN",
"outletIntent": "API integration"
}
'const options = {
method: 'POST',
headers: {
authorization: '<api-key>',
'x-timestamp': '<x-timestamp>',
'x-request-id': '<x-request-id>',
'x-access-id': '<x-access-id>',
'Content-Type': '<content-type>'
},
body: JSON.stringify({
type: 'online',
name: 'Lagos Fashion Store',
email: 'lagosfashion@store.com',
location: 'Lagos',
country: 'Nigeria',
currency: 'NGN',
outletIntent: 'API integration'
})
};
fetch('https://secureapi.tender.cash/v1/api/agent/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://secureapi.tender.cash/v1/api/agent/create"
payload = {
"type": "online",
"name": "Lagos Fashion Store",
"email": "lagosfashion@store.com",
"location": "Lagos",
"country": "Nigeria",
"currency": "NGN",
"outletIntent": "API integration"
}
headers = {
"authorization": "<api-key>",
"x-timestamp": "<x-timestamp>",
"x-request-id": "<x-request-id>",
"x-access-id": "<x-access-id>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://secureapi.tender.cash/v1/api/agent/create",
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([
'type' => 'online',
'name' => 'Lagos Fashion Store',
'email' => 'lagosfashion@store.com',
'location' => 'Lagos',
'country' => 'Nigeria',
'currency' => 'NGN',
'outletIntent' => 'API integration'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: <content-type>",
"authorization: <api-key>",
"x-access-id: <x-access-id>",
"x-request-id: <x-request-id>",
"x-timestamp: <x-timestamp>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"status": "success",
"message": "success",
"data": {
"id": "66f33b1fa9446a6b6b8f32cd",
"reference": "vbibtucm9ynq3k2x7p",
"name": "Lagos Fashion Store",
"type": "online",
"email": "<string>",
"phoneNumber": "<string>",
"location": "<string>",
"country": "<string>",
"active": true,
"merchantId": "<string>",
"currency": "NGN",
"totalSales": "0",
"defaultFiatCurrency": {
"currency": "<string>",
"rate": "<string>",
"useSystemRate": true
},
"createdAt": "2023-11-07T05:31:56Z"
}
}{
"status": "error",
"message": "phoneNumber must include a valid country code",
"data": null
}{
"status": "error",
"message": "INVALID_REQUEST_SIGNATURE",
"data": {}
}{
"status": "error",
"message": "Too many requests. Max 120 per 60s.",
"data": null
}x-access-id, x-request-id, x-timestamp, and an HMAC-SHA256
authorization signature. See Authentication.type | Use for | Required fields |
|---|---|---|
online (default) | A website, app or other online integration | name, location, country, outletIntent |
whatsapp | A WhatsApp sales channel | name, phoneNumber, outletIntent: "Whatsapp" |
pos) outlets can’t be created through the API. Create them from the
Tender merchant dashboard.Headers
{"timeStamp":"<x-timestamp>","requestId":"<x-request-id>","accessId":"<x-access-id>"}, signed with your access secret. The request body is not part of the signature.Example: "pV3n0o8kq0lK2mJ8bZ1yq3Yt6hR0cXK9u4mVJ2l9sE0=""2026-10-15T09:45:53.000Z""550e8400-e29b-41d4-a716-446655440000""your-access-id-here""application/json"Body
online or whatsapp. Defaults to online.Example: "online""Lagos Fashion Store"online and whatsapp outlets. One of
Woocommerce, Webhook, API integration, Shopify, Wix, Squarespace or Whatsapp.
For whatsapp outlets it must be Whatsapp.Example: "API integration"online outlets.Example: "Lagos"online outlets.Example: "Nigeria"+, the country code and the number, with no spaces.
Required for whatsapp outlets, and each WhatsApp number can belong to only one outlet.
Optional for online outlets, but must be E.164 if sent.Example: "+2348012345678""lagosfashion@store.com"type=fiat). Defaults to USD.Example: "NGN""https://example.com/avatar.png"$ \ ( ) < >.
Response
"success""success"Show data properties
Show data properties
"66f33b1fa9446a6b6b8f32cd""vbibtucm9ynq3k2x7p""Lagos Fashion Store""online""lagosfashion@store.com""+2348012345678""Lagos""Nigeria"true"6538e8f9bdec6d1a21978a64""NGN""0" for a new outlet.Example: "0""2026-10-15T09:45:53.000Z"Errors
All errors return HTTP 400.| Message | Cause |
|---|---|
phoneNumber must include a valid country code | phoneNumber isn’t in E.164 format |
outletIntent must be a string / outletIntent must be one of the following values: … | outletIntent is missing or not an allowed value |
location must be a string / country must be a string | Missing location or country on an online outlet |
Select WhatsApp as the social channel | A whatsapp outlet without outletIntent: "Whatsapp" |
WhatsApp number is linked to another outlet. Use a different number. | The WhatsApp number is already in use |
Agent Already exists / Email Already taken | The email is already used by an outlet |
Currency is not supported | currency isn’t a supported fiat currency |
Example request
curl -X POST https://sandbox-api.tender.cash/v1/api/agent/create \
-H "Content-Type: application/json" \
-H "x-access-id: your-access-id-here" \
-H "x-request-id: 550e8400-e29b-41d4-a716-446655440000" \
-H "x-timestamp: 2026-10-15T09:45:53.000Z" \
-H "authorization: pV3n0o8kq0lK2mJ8bZ1yq3Yt6hR0cXK9u4mVJ2l9sE0=" \
-d '{
"type": "online",
"name": "Lagos Fashion Store",
"email": "lagosfashion@store.com",
"location": "Lagos",
"country": "Nigeria",
"currency": "NGN",
"outletIntent": "API integration"
}'
Example response
{
"status": "success",
"message": "success",
"data": {
"id": "66f33b1fa9446a6b6b8f32cd",
"name": "Lagos Fashion Store",
"email": "lagosfashion@store.com",
"country": "Nigeria",
"location": "Lagos",
"type": "online",
"active": true,
"reference": "vbibtucm9ynq3k2x7p",
"merchantId": "6538e8f9bdec6d1a21978a64",
"currency": "NGN",
"totalSales": "0",
"defaultFiatCurrency": {
"currency": "NGN",
"rate": "1500",
"useSystemRate": true
},
"createdAt": "2026-10-15T09:45:53.000Z"
}
}
Authorizations
Signed (HMAC) authentication. Required headers: x-access-id, x-request-id (UUID v4), x-timestamp (ISO 8601, must be within 5 minutes of server time), and authorization: the Base64 HMAC-SHA256 of the JSON string {"timeStamp":"","requestId":"","accessId":""} (keys in that order, no whitespace) using your access secret. The request body, method and path are not signed. The API key must be linked to an outlet.
Headers
Base64-encoded HMAC-SHA256 signature of {"timeStamp":"<x-timestamp>","requestId":"<x-request-id>","accessId":"<x-access-id>"}, signed with your access secret. The request body is not part of the signature.
ISO 8601 timestamp; must be within 5 minutes of server time
A unique UUID v4 per request
Your API access ID provided by Tender
Media type of the request body
Body
online outlets require location, country and outletIntent. whatsapp outlets require phoneNumber and outletIntent Whatsapp. POS outlets are created from the dashboard.
500"Lagos Fashion Store"
online, whatsapp Woocommerce, Webhook, API integration, Shopify, Wix, Squarespace, Whatsapp "API integration"
500"Lagos"
500"Nigeria"
E.164
^\+[1-9]\d{7,14}$"+2348012345678"
500"lagosfashion@store.com"
"NGN"
500