Base URL
Production Endpoint
All paths in this guide are relative to the current API base URL. Protected endpoints require bearer authentication.
https://www.logspanel.com/api/v1
Generate your API key from API Access . Copy it immediately; it is displayed only once. Generating a new key revokes the previous key.
401 Response
{
"success": false,
"status": 401,
"message": "Unauthenticated. Please provide a valid bearer token.",
"code": "UNAUTHENTICATED"
}
GET
Wallet Balance
/wallet
Returns the authenticated user's wallet balance. Requires bearer authentication.
Request Examples
Copy
cURL
JavaScript
Python
PHP
Java
curl -X GET "https://www.logspanel.com/api/v1/wallet" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://www.logspanel.com/api/v1/wallet', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/wallet'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/wallet',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/wallet"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
200 Response
{
"success": true,
"data": {
"balance": "12500.00",
"currency": "NGN"
}
}
Complete Log Catalog
Your existing GET /api/v1/logs/categories and POST /api/v1/logs/orders integration now supports the complete catalog. Existing positive category IDs stay unchanged; additional inventory uses stable negative integer IDs. Pass the returned ID unchanged as category_id. Providers remain internal. The optional /logs/products representation below also remains available.
Requires logs:read. Pagination defaults to 25 products; per_page accepts 1–100 and page starts at 1. Responses contain data, links, meta and success. Follow links.next until it is null to fetch all products.
Request
Copy
cURL
JavaScript
Python
PHP
Java
curl -X GET "https://www.logspanel.com/api/v1/logs/products?per_page=100&page=1" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://www.logspanel.com/api/v1/logs/products?per_page=100&page=1', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/logs/products?per_page=100&page=1'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/logs/products?per_page=100&page=1',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/logs/products?per_page=100&page=1"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{
"product_ref": "550e8400-e29b-41d4-a716-446655440000",
"name": "Example Account",
"description": "Product details and purchase conditions",
"selling_price": "2500.00",
"currency": "NGN",
"available_quantity": 34,
"min_quantity": 1,
"max_quantity": 100,
"purchasable": true
}
Fetch one product using GET /api/v1/logs/products/{product_ref}. Keep the returned reference unchanged. Selling prices include platform markup; inventory and prices may change before checkout. A removed or disabled product returns LOG_PRODUCT_NOT_FOUND (404).
The category endpoints below also return the combined catalog. Omit parent_category_id to fetch everything; unassigned products are excluded when filtering by a specific parent. Follow every pagination link. Local category price retains its historical meaning; use selling_price for the final checkout price.
Purchase from the Complete Catalog
Requires logs:buy. Send product_ref to the existing purchase endpoint. Existing category_id requests remain supported, but never send both identifiers. Quantity must be 1–100 and within the selected product's limits. Idempotency keys must be 8–120 characters.
Request
Copy
cURL
JavaScript
Python
PHP
Java
curl -X POST "https://www.logspanel.com/api/v1/logs/orders" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"product_ref":"550e8400-e29b-41d4-a716-446655440000","quantity":1,"idempotency_key":"website-order-20260922-0001"}'
const response = await fetch('https://www.logspanel.com/api/v1/logs/orders', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"product_ref": "550e8400-e29b-41d4-a716-446655440000",
"quantity": 1,
"idempotency_key": "website-order-20260922-0001"
})
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/logs/orders'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
}
payload = {
"product_ref": "550e8400-e29b-41d4-a716-446655440000",
"quantity": 1,
"idempotency_key": "website-order-20260922-0001"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE',
'Content-Type: application/json'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/logs/orders',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{"product_ref":"550e8400-e29b-41d4-a716-446655440000","quantity":1,"idempotency_key":"website-order-20260922-0001"}',
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
String payload = """
{
"product_ref": "550e8400-e29b-41d4-a716-446655440000",
"quantity": 1,
"idempotency_key": "website-order-20260922-0001"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/logs/orders"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
A completed purchase returns HTTP 201 with order_id, status, product_ref, product_name, quantity, unit_price, total, currency, balance_after and delivered items. Each item contains serial, details and video.
HTTP 202 with status: pending means confirmation is still in progress, with funds reserved. Keep the same idempotency key and unchanged payload; do not submit a fresh purchase. Confirmed rejection returns LOG_PURCHASE_REJECTED (409) and releases reserved funds. Completed and rejected results are replayed on same-key retries with Idempotent-Replayed: true. Reusing a key for another payload or endpoint returns IDEMPOTENCY_KEY_REUSED (409).
Retrieve an Order and Its Delivered Items
Requires orders:read. Only the order owner can retrieve it. This lookup never creates another purchase.
Request
Copy
cURL
JavaScript
Python
PHP
Java
curl -X GET "https://www.logspanel.com/api/v1/logs/orders/logs-api-ABC1234567-1777560000" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://www.logspanel.com/api/v1/logs/orders/logs-api-ABC1234567-1777560000', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/logs/orders/logs-api-ABC1234567-1777560000'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/logs/orders/logs-api-ABC1234567-1777560000',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/logs/orders/logs-api-ABC1234567-1777560000"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Completed purchases return 200 with delivered items; pending purchases return 202; confirmed failures return 409. Unknown orders and orders belonging to someone else return LOG_ORDER_NOT_FOUND (404). Older orders may provide delivery_text when structured items are unavailable. History retains the public category ID as product_id and includes product_ref when available.
Unexpected purchase failures return LOG_SERVICE_UNAVAILABLE (503) with a support request_id. Retry with the original idempotency key. This error does not establish that an account restriction is blocking purchases.
Poll pending orders conservatively, such as every 10 seconds, and stop after completion or failure. If an order remains pending, contact support with its order ID. Limits are shared: 60 API requests per minute, plus 20 purchase requests per minute. Respect Retry-After on 429 responses.
Other errors include LOG_QUANTITY_OUT_OF_RANGE (422), LOG_SERVICE_UNAVAILABLE (503), LOG_PURCHASE_PENDING (409) and LOG_PURCHASE_FAILED (422). Invalid fields return 422 with an errors object; missing abilities return 403.
GET
List Parent Categories
/logs/parent-categories
Returns active parent categories for building filters and category navigation. Requires bearer authentication.
Request Examples
Copy
cURL
JavaScript
Python
PHP
Java
curl -X GET "https://www.logspanel.com/api/v1/logs/parent-categories" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://www.logspanel.com/api/v1/logs/parent-categories', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/logs/parent-categories'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/logs/parent-categories',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/logs/parent-categories"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
200 Response
{
"success": true,
"data": [
{
"id": 2,
"name": "Accounts",
"description": "Social and premium account logs",
"image": "/storage/uploads/parent_categories/accounts.png",
"available_categories_count": 8
}
]
}
GET
List Log Categories
/logs/categories
Lists the combined catalog with price and available quantity. Existing local IDs remain unchanged; additional inventory uses stable negative integer category IDs. Pass IDs back unchanged. Requires bearer authentication. Omit the optional parent filter and follow all pages to fetch everything.
Query
Type
Description
per_page
integer
Optional. Values from 1 to 100. Defaults to 25.
parent_category_id
integer
Optional. Filter log categories by parent category.
Request Examples
Copy
cURL
JavaScript
Python
PHP
Java
curl -X GET "https://www.logspanel.com/api/v1/logs/categories?per_page=25&parent_category_id=2" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://www.logspanel.com/api/v1/logs/categories?per_page=25&parent_category_id=2', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/logs/categories?per_page=25&parent_category_id=2'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/logs/categories?per_page=25&parent_category_id=2',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/logs/categories?per_page=25&parent_category_id=2"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
200 Response
{
"success": true,
"data": [
{
"id": 12,
"name": "Facebook Logs",
"description": "Fresh account logs",
"image": "/storage/uploads/log_categories/facebook.png",
"price": "2500.00",
"currency": "NGN",
"available_quantity": 34,
"parent_category": {
"id": 2,
"name": "Accounts"
}
}
]
}
GET
Get Single Log Category
/logs/categories/{category}
Returns the details for one log category by category ID. Purchased log details are returned only after a successful purchase.
Request Examples
Copy
cURL
JavaScript
Python
PHP
Java
curl -X GET "https://www.logspanel.com/api/v1/logs/categories/12" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://www.logspanel.com/api/v1/logs/categories/12', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/logs/categories/12'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/logs/categories/12',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/logs/categories/12"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
200 Response
{
"success": true,
"data": {
"id": 12,
"name": "Facebook Logs",
"description": "Fresh account logs",
"image": "/storage/uploads/log_categories/facebook.png",
"price": "2500.00",
"currency": "NGN",
"available_quantity": 34
}
}
POST
Purchase Logs
/logs/orders
Purchases logs from a category, deducts the wallet balance, and returns the purchased log details.
The server calculates price and wallet deduction. Do not send price from your integration. Use a unique idempotency_key for every checkout attempt.
Body
Type
Description
category_id
integer
Required. Existing log category ID.
quantity
integer
Required. Minimum 1, maximum 100.
idempotency_key
string
Required. Unique key for this checkout attempt.
Request Examples
Copy
cURL
JavaScript
Python
PHP
Java
curl -X POST "https://www.logspanel.com/api/v1/logs/orders" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"category_id":12,"quantity":2,"idempotency_key":"website-order-20260501-0001"}'
const response = await fetch('https://www.logspanel.com/api/v1/logs/orders', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"category_id": 12,
"quantity": 2,
"idempotency_key": "website-order-20260501-0001"
})
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/logs/orders'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
}
payload = {
"category_id": 12,
"quantity": 2,
"idempotency_key": "website-order-20260501-0001"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE',
'Content-Type: application/json'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/logs/orders',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{"category_id":12,"quantity":2,"idempotency_key":"website-order-20260501-0001"}',
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
String payload = """
{
"category_id": 12,
"quantity": 2,
"idempotency_key": "website-order-20260501-0001"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/logs/orders"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
201 Response
{
"success": true,
"data": {
"order_id": "logs-api-ABC1234567-1777560000",
"status": "completed",
"product_id": 12,
"product_name": "Facebook Logs",
"quantity": 2,
"unit_price": "2500.00",
"total": "5000.00",
"currency": "NGN",
"balance_after": "7500.00",
"items": [
{
"serial": 1,
"details": "log details here",
"video": null
}
]
}
}
GET
List Log Orders
/logs/orders
Returns the authenticated user's Logs order history. Requires bearer authentication.
Request Examples
Copy
cURL
JavaScript
Python
PHP
Java
curl -X GET "https://www.logspanel.com/api/v1/logs/orders" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://www.logspanel.com/api/v1/logs/orders', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
});
const data = await response.json();
console.log(data);
import requests
url = 'https://www.logspanel.com/api/v1/logs/orders'
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY_HERE'
}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$ch = curl_init();
$headers = [
'Accept: application/json',
'Authorization: Bearer YOUR_API_KEY_HERE'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.logspanel.com/api/v1/logs/orders',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.logspanel.com/api/v1/logs/orders"))
.header("Accept", "application/json")
.header("Authorization", "Bearer YOUR_API_KEY_HERE")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
200 Response
{
"success": true,
"data": [
{
"order_id": "logs-api-ABC1234567-1777560000",
"status": "completed",
"product_id": 12,
"product_name": "Facebook Logs",
"quantity": 2,
"unit_price": "2500.00",
"total": "5000.00",
"currency": "NGN",
"created_at": "2026-05-01T12:00:00.000000Z"
}
]
}
Reference
Error Responses
JSON
Error Format
{
"success": false,
"status": 402,
"message": "Insufficient wallet balance.",
"code": "INSUFFICIENT_BALANCE"
}
USER_DISABLEDThe buyer account is disabled.
USER_BANNEDThe buyer account is banned.
UNAUTHENTICATEDThe bearer token is missing, invalid, or revoked.
VALIDATION_FAILEDOne or more request fields are missing or invalid.
LOG_CATEGORY_NOT_FOUNDThe category does not exist or is unavailable.
INSUFFICIENT_BALANCEThe wallet balance cannot cover the purchase.
OUT_OF_STOCKThere are not enough logs in the selected category.
IDEMPOTENCY_KEY_REUSEDThe idempotency key was used for a different request.