Public API v1

Tools API

Browse working tools and picture packs, purchase them with wallet balance, and deliver protected downloads to your integration.

POST https://xclusiveplugs.com/api/v1/tools/orders
{
  "tool_id": 12,
  "idempotency_key": "tool-order-20260502-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://xclusiveplugs.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://xclusiveplugs.com/api/v1/wallet" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://xclusiveplugs.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://xclusiveplugs.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://xclusiveplugs.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://xclusiveplugs.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"
  }
}

Local Delivery

Wallet-Backed Tool Checkout

The Tools API uses Xclusive Plugs inventory only. Your integration lists active tools, places a wallet-backed order, then downloads owned files through a protected endpoint.

No external API Idempotent checkout Protected downloads Order history
GET

List Tools

/tools

Returns active working tools and picture packs. Use type to filter by tool or picture.

Query Type Description
typestringOptional. Either tool or picture.
per_pageintegerOptional. Values from 1 to 100. Defaults to 25.
Request Examples
curl -X GET "https://xclusiveplugs.com/api/v1/tools?type=tool" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://xclusiveplugs.com/api/v1/tools?type=tool', {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY_HERE'
  }
});
const data = await response.json();
console.log(data);
import requests

url = 'https://xclusiveplugs.com/api/v1/tools?type=tool'
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://xclusiveplugs.com/api/v1/tools?type=tool',
    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://xclusiveplugs.com/api/v1/tools?type=tool"))
    .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,
      "type": "tool",
      "name": "Automation Toolkit",
      "description": "Ready-to-use workflow files.",
      "image": "/storage/uploads/tools/example.png",
      "price": "5000.00",
      "currency": "NGN",
      "number_of_pictures": 0,
      "number_of_videos": 0,
      "available": true
    }
  ]
}
GET

Get Tool

/tools/{tool_id}

Returns one active tool or picture pack. Delivery links and protected file paths are only available after purchase.

Request Examples
curl -X GET "https://xclusiveplugs.com/api/v1/tools/12" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://xclusiveplugs.com/api/v1/tools/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://xclusiveplugs.com/api/v1/tools/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://xclusiveplugs.com/api/v1/tools/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://xclusiveplugs.com/api/v1/tools/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());
POST

Purchase Tool

/tools/orders

Purchases a tool, deducts the wallet balance, creates a completed order, and returns a protected download URL.

Do not send price from your integration. Xclusive Plugs calculates the charge from the current tool price. Use a unique idempotency_key for every checkout attempt.
Request Examples
curl -X POST "https://xclusiveplugs.com/api/v1/tools/orders" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"tool_id":12,"idempotency_key":"tool-order-20260502-0001"}'
const response = await fetch('https://xclusiveplugs.com/api/v1/tools/orders', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "tool_id": 12,
    "idempotency_key": "tool-order-20260502-0001"
})
});
const data = await response.json();
console.log(data);
import requests

url = 'https://xclusiveplugs.com/api/v1/tools/orders'
headers = {
    'Accept': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Content-Type': 'application/json'
}
payload = {
    "tool_id": 12,
    "idempotency_key": "tool-order-20260502-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://xclusiveplugs.com/api/v1/tools/orders',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => '{"tool_id":12,"idempotency_key":"tool-order-20260502-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 = """
{
    "tool_id": 12,
    "idempotency_key": "tool-order-20260502-0001"
}
""";

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://xclusiveplugs.com/api/v1/tools/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": "tools-api-ABC1234567-1777560000",
    "status": "completed",
    "tool_id": 12,
    "tool_name": "Automation Toolkit",
    "tool_type": "tool",
    "quantity": 1,
    "price": "5000.00",
    "currency": "NGN",
    "balance_after": "15000.00",
    "download_url": "https://xclusiveplugs.com/api/v1/tools/orders/tools-api-ABC1234567-1777560000/download"
  }
}
GET

List Tool Orders

/tools/orders

Returns the authenticated user's tool purchase history.

Request Examples
curl -X GET "https://xclusiveplugs.com/api/v1/tools/orders" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://xclusiveplugs.com/api/v1/tools/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://xclusiveplugs.com/api/v1/tools/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://xclusiveplugs.com/api/v1/tools/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://xclusiveplugs.com/api/v1/tools/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());
GET

Get Tool Order

/tools/orders/{order_id}

Returns one tool order owned by the authenticated account, including the protected download endpoint.

Request Examples
curl -X GET "https://xclusiveplugs.com/api/v1/tools/orders/tools-api-ABC1234567-1777560000" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY_HERE"
const response = await fetch('https://xclusiveplugs.com/api/v1/tools/orders/tools-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://xclusiveplugs.com/api/v1/tools/orders/tools-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://xclusiveplugs.com/api/v1/tools/orders/tools-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://xclusiveplugs.com/api/v1/tools/orders/tools-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());
GET

Download Tool

/tools/orders/{order_id}/download

Downloads the purchased tool files. If a tool is delivered by a managed external link instead of protected files, the endpoint returns that delivery URL as JSON.

Request Examples
curl -L "https://xclusiveplugs.com/api/v1/tools/orders/tools-api-ABC1234567-1777560000/download" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY_HERE" \
  --output tool-assets.zip
import { writeFile } from 'node:fs/promises';

const response = await fetch('https://xclusiveplugs.com/api/v1/tools/orders/tools-api-ABC1234567-1777560000/download', {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY_HERE'
  }
});
const file = Buffer.from(await response.arrayBuffer());
await writeFile('tool-assets.zip', file);
import requests

url = 'https://xclusiveplugs.com/api/v1/tools/orders/tools-api-ABC1234567-1777560000/download'
headers = {
    'Accept': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY_HERE'
}

response = requests.get(url, headers=headers)
with open('tool-assets.zip', 'wb') as file:
    file.write(response.content)
<?php

$ch = curl_init();

$headers = [
    'Accept: application/json',
    'Authorization: Bearer YOUR_API_KEY_HERE'
];

$file = fopen('tool-assets.zip', 'w');

curl_setopt_array($ch, [
    CURLOPT_URL => 'https://xclusiveplugs.com/api/v1/tools/orders/tools-api-ABC1234567-1777560000/download',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_FILE => $file,
    CURLOPT_FOLLOWLOCATION => true,
]);

$response = curl_exec($ch);
fclose($file);
curl_close($ch);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://xclusiveplugs.com/api/v1/tools/orders/tools-api-ABC1234567-1777560000/download"))
    .header("Accept", "application/json")
    .header("Authorization", "Bearer YOUR_API_KEY_HERE")
    .GET()
    .build();

client.send(request, HttpResponse.BodyHandlers.ofFile(Path.of("tool-assets.zip")));

Failure Handling

Error Format

JSON errors
Error Response
{
  "success": false,
  "status": 409,
  "message": "This tool has already been purchased by this account.",
  "code": "TOOL_ALREADY_OWNED"
}
UNAUTHENTICATEDThe bearer token is missing, invalid, or revoked.
VALIDATION_FAILEDOne or more request fields are missing or invalid.
TOOL_NOT_FOUNDThe tool does not exist or is unavailable.
TOOL_ALREADY_OWNEDThe account has already purchased this tool.
TOOL_ORDER_NOT_FOUNDThe order ID does not belong to the authenticated account.
TOOL_DOWNLOAD_NOT_AVAILABLENo downloadable files are available for the purchased tool.
INSUFFICIENT_BALANCEThe wallet balance cannot cover the calculated price.
IDEMPOTENCY_KEY_REUSEDThe key was used for a different request body.