Public API v1

Logs API

Integrate log catalog browsing, wallet-backed purchases, and order history into your server-side workflow using one account API key.

POST https://www.logspanel.com/api/v1/logs/orders
{
  "category_id": 12,
  "quantity": 1,
  "idempotency_key": "website-order-20260501-0001"
}

Documentation Hub

API Collections

Shared documentation system for every public API collection.

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

Security

Authentication

Bearer API Key

Generate your API key from API Access. Copy it immediately; it is displayed only once. Generating a new key revokes the previous key.

Required headers
Accept: application/json
Authorization: Bearer YOUR_API_KEY_HERE
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
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"
  }
}
GET

List Parent Categories

/logs/parent-categories

Returns active parent categories for building filters and category navigation. Requires bearer authentication.

Request Examples
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 active log categories with price and available quantity. Requires bearer authentication.

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
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
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
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
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.
Loading