Create Manual Order
curl --request POST \
--url https://api.sabivendor.com/api/v1/hub/shop/{shopId}/order \
--header 'Content-Type: application/json' \
--header 'X-Shop-API-Key: <x-shop-api-key>' \
--data '
{
"customerName": "<string>",
"customerPhoneNumber": "<string>",
"totalPrice": 123,
"paymentStatus": "<string>",
"orderStatus": "<string>",
"orders": [
{}
]
}
'import requests
url = "https://api.sabivendor.com/api/v1/hub/shop/{shopId}/order"
payload = {
"customerName": "<string>",
"customerPhoneNumber": "<string>",
"totalPrice": 123,
"paymentStatus": "<string>",
"orderStatus": "<string>",
"orders": [{}]
}
headers = {
"X-Shop-API-Key": "<x-shop-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Shop-API-Key': '<x-shop-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
customerName: '<string>',
customerPhoneNumber: '<string>',
totalPrice: 123,
paymentStatus: '<string>',
orderStatus: '<string>',
orders: [{}]
})
};
fetch('https://api.sabivendor.com/api/v1/hub/shop/{shopId}/order', 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.sabivendor.com/api/v1/hub/shop/{shopId}/order",
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([
'customerName' => '<string>',
'customerPhoneNumber' => '<string>',
'totalPrice' => 123,
'paymentStatus' => '<string>',
'orderStatus' => '<string>',
'orders' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Shop-API-Key: <x-shop-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.sabivendor.com/api/v1/hub/shop/{shopId}/order"
payload := strings.NewReader("{\n \"customerName\": \"<string>\",\n \"customerPhoneNumber\": \"<string>\",\n \"totalPrice\": 123,\n \"paymentStatus\": \"<string>\",\n \"orderStatus\": \"<string>\",\n \"orders\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Shop-API-Key", "<x-shop-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.sabivendor.com/api/v1/hub/shop/{shopId}/order")
.header("X-Shop-API-Key", "<x-shop-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customerName\": \"<string>\",\n \"customerPhoneNumber\": \"<string>\",\n \"totalPrice\": 123,\n \"paymentStatus\": \"<string>\",\n \"orderStatus\": \"<string>\",\n \"orders\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sabivendor.com/api/v1/hub/shop/{shopId}/order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Shop-API-Key"] = '<x-shop-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"customerName\": \"<string>\",\n \"customerPhoneNumber\": \"<string>\",\n \"totalPrice\": 123,\n \"paymentStatus\": \"<string>\",\n \"orderStatus\": \"<string>\",\n \"orders\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Order created successfully",
"data": {
"id": 502,
"orderStatus": "delivered",
"paymentStatus": "paid",
"reference": "ORD-502-XYZ"
}
}
{
"message": "FORM_VALIDATION_ERROR",
"code": 400,
"validationErrors": [
{
"path": [
"orders",
0,
"orderProductQty"
],
"message": "Quantity must be at least 1"
}
]
}
Order Fulfillment
Create Manual Order
POST
/
api
/
v1
/
hub
/
shop
/
{shopId}
/
order
Create Manual Order
curl --request POST \
--url https://api.sabivendor.com/api/v1/hub/shop/{shopId}/order \
--header 'Content-Type: application/json' \
--header 'X-Shop-API-Key: <x-shop-api-key>' \
--data '
{
"customerName": "<string>",
"customerPhoneNumber": "<string>",
"totalPrice": 123,
"paymentStatus": "<string>",
"orderStatus": "<string>",
"orders": [
{}
]
}
'import requests
url = "https://api.sabivendor.com/api/v1/hub/shop/{shopId}/order"
payload = {
"customerName": "<string>",
"customerPhoneNumber": "<string>",
"totalPrice": 123,
"paymentStatus": "<string>",
"orderStatus": "<string>",
"orders": [{}]
}
headers = {
"X-Shop-API-Key": "<x-shop-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Shop-API-Key': '<x-shop-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
customerName: '<string>',
customerPhoneNumber: '<string>',
totalPrice: 123,
paymentStatus: '<string>',
orderStatus: '<string>',
orders: [{}]
})
};
fetch('https://api.sabivendor.com/api/v1/hub/shop/{shopId}/order', 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.sabivendor.com/api/v1/hub/shop/{shopId}/order",
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([
'customerName' => '<string>',
'customerPhoneNumber' => '<string>',
'totalPrice' => 123,
'paymentStatus' => '<string>',
'orderStatus' => '<string>',
'orders' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Shop-API-Key: <x-shop-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.sabivendor.com/api/v1/hub/shop/{shopId}/order"
payload := strings.NewReader("{\n \"customerName\": \"<string>\",\n \"customerPhoneNumber\": \"<string>\",\n \"totalPrice\": 123,\n \"paymentStatus\": \"<string>\",\n \"orderStatus\": \"<string>\",\n \"orders\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Shop-API-Key", "<x-shop-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.sabivendor.com/api/v1/hub/shop/{shopId}/order")
.header("X-Shop-API-Key", "<x-shop-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customerName\": \"<string>\",\n \"customerPhoneNumber\": \"<string>\",\n \"totalPrice\": 123,\n \"paymentStatus\": \"<string>\",\n \"orderStatus\": \"<string>\",\n \"orders\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sabivendor.com/api/v1/hub/shop/{shopId}/order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Shop-API-Key"] = '<x-shop-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"customerName\": \"<string>\",\n \"customerPhoneNumber\": \"<string>\",\n \"totalPrice\": 123,\n \"paymentStatus\": \"<string>\",\n \"orderStatus\": \"<string>\",\n \"orders\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Order created successfully",
"data": {
"id": 502,
"orderStatus": "delivered",
"paymentStatus": "paid",
"reference": "ORD-502-XYZ"
}
}
{
"message": "FORM_VALIDATION_ERROR",
"code": 400,
"validationErrors": [
{
"path": [
"orders",
0,
"orderProductQty"
],
"message": "Quantity must be at least 1"
}
]
}
Logs an offline order (e.g., walk-in customer, phone order) directly from your backend/pos.
Authorizations
string
required
Your Secret API Key (
sk_live_... or sk_test_...) generated from the Developer dashboard. Must be kept secret.Path Parameters
string
required
The unique UUID of the shop.
Request Body (JSON)
string
required
Customer name.
string
required
Customer contact phone number. Must be valid.
number
required
Total price in Kobo.
string
pending or paid.string
confirmed, delivered, etc.array
required
Ordered items list containing
productId, variantId, and orderProductQty (min 1).{
"status": "success",
"message": "Order created successfully",
"data": {
"id": 502,
"orderStatus": "delivered",
"paymentStatus": "paid",
"reference": "ORD-502-XYZ"
}
}
{
"message": "FORM_VALIDATION_ERROR",
"code": 400,
"validationErrors": [
{
"path": [
"orders",
0,
"orderProductQty"
],
"message": "Quantity must be at least 1"
}
]
}
⌘I