Integrate social media growth into your platform
The PawaBoost API lets you place and track social media growth orders, check services and pricing, read your wallet balance, and receive real-time webhooks — all from your own product. Every request is authenticated with an API key you generate from your dashboard.
Base URL
https://pawaboost.com/api/v1Every request (except GET /api/v1) requires a Bearer token in the Authorization header, using an API key generated from your API Keys dashboard .
Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxExample request:
curl https://pawaboost.com/api/v1/balance \
-H "Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Rate limits
Each API key is limited to 60 requests per minute, tracked in a sliding window per key. Every response includes headers describing your current usage:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Requests allowed per window (60) |
| X-RateLimit-Remaining | Requests left in the current window |
| X-RateLimit-Reset | Unix ms timestamp when the window resets |
Exceeding the limit returns a 429 with X-RateLimit-Remaining: 0.
/api/v1Returns basic API metadata. No authentication required.
Example response · 200
{
"success": true,
"name": "PawaBoost API",
"version": "1.0.0",
"docs": "https://pawaboost.com/api-docs"
}/api/v1/services servicesList all active services available for ordering, with pricing and quantity limits.
Example response · 200
{
"success": true,
"services": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Instagram Followers - Real Quality",
"platform": "INSTAGRAM",
"category": "FOLLOWERS",
"minQuantity": 100,
"maxQuantity": 50000,
"pricePerUnit": 1200,
"serviceType": "INSTANT",
"deliveryTime": "0-1 Hour",
"discountPercent": null
}
],
"count": 1
}/api/v1/balance balanceGet the current wallet balance for the account that owns this API key.
Example response · 200
{
"success": true,
"balance": 15000,
"currency": "NGN"
}/api/v1/order ordersPlace a new order. The cost is deducted from your wallet balance (PAWA Points applied first).
| Param | Type | Description |
|---|---|---|
| serviceId* | string | ID of the service to order (see /services) |
| link* | string | Target profile/post URL |
| quantity* | number | Must be within the service's min/max quantity |
Example response · 201
{
"success": true,
"order": {
"id": "clxorder1234567890",
"status": "PROCESSING",
"service": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Instagram Followers - Real Quality"
},
"link": "https://instagram.com/yourpage",
"quantity": 1000,
"charge": 1200,
"createdAt": "2026-07-18T10:00:00.000Z"
}
}/api/v1/order/:id ordersGet the current status and delivery progress of a single order you placed.
| Param | Type | Description |
|---|---|---|
| id* | string | Order ID, from the path |
Example response · 200
{
"success": true,
"order": {
"id": "clxorder1234567890",
"status": "COMPLETED",
"service": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Instagram Followers - Real Quality"
},
"link": "https://instagram.com/yourpage",
"quantity": 1000,
"charge": 1200,
"startCount": 542,
"remains": 0,
"createdAt": "2026-07-18T10:00:00.000Z",
"updatedAt": "2026-07-18T12:30:00.000Z"
}
}/api/v1/orders ordersList orders placed with this API key's account, newest first.
| Param | Type | Description |
|---|---|---|
| page | number | Page number — default 1 |
| limit | number | Results per page — default 20, max 100 |
Example response · 200
{
"success": true,
"orders": [
{
"id": "clxorder1234567890",
"status": "COMPLETED",
"service": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Instagram Followers - Real Quality"
},
"link": "https://instagram.com/yourpage",
"quantity": 1000,
"charge": 1200,
"createdAt": "2026-07-18T10:00:00.000Z"
}
],
"total": 42,
"page": 1,
"limit": 20
}/api/v1/webhook/testSend a test payload to the webhook URL configured on your API key, to verify your endpoint and signature verification.
Example response · 200
{
"success": true,
"message": "Test webhook dispatched"
}Configure a webhook URL and secret on any API key from your API Keys dashboard to receive real-time events as your orders progress. Delivery is best-effort — a failed delivery is logged and not retried, so don't rely on webhooks alone; poll GET /api/v1/order/:id if you need a guarantee.
order.created
Fired right after a POST /api/v1/order request succeeds.
{
"event": "order.created",
"data": {
"id": "clxorder1234567890",
"status": "PROCESSING",
"serviceId": "clx1a2b3c4d5e6f7g8h9",
"serviceName": "Instagram Followers - Real Quality",
"link": "https://instagram.com/yourpage",
"quantity": 1000,
"charge": 1200,
"createdAt": "2026-07-18T10:00:00.000Z"
},
"timestamp": 1752835200000
}order.updated
Fired when an order's delivery status changes.
{
"event": "order.updated",
"data": {
"id": "clxorder1234567890",
"status": "COMPLETED",
"startCount": 542,
"remains": 0,
"updatedAt": "2026-07-18T12:30:00.000Z"
},
"timestamp": 1752842400000
}Verifying signatures
Every request carries an X-PawaBoost-Signature header — sha256=<hex digest>, an HMAC-SHA256 of the raw JSON body signed with your webhook secret — and an X-PawaBoost-Event header naming the event. Always verify the signature before trusting the payload.
const crypto = require("crypto");
function verifyWebhook(rawBody, signatureHeader, secret) {
const expected =
"sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const expectedBuf = Buffer.from(expected);
const givenBuf = Buffer.from(signatureHeader || "");
if (expectedBuf.length !== givenBuf.length) return false;
return crypto.timingSafeEqual(expectedBuf, givenBuf);
}
// Example (Express) — use express.raw() so req.body is the untouched bytes
app.post("/webhooks/pawaboost", express.raw({ type: "application/json" }), (req, res) => {
const signature = req.headers["x-pawaboost-signature"];
const isValid = verifyWebhook(req.body, signature, process.env.PAWABOOST_WEBHOOK_SECRET);
if (!isValid) return res.status(401).send("Invalid signature");
const event = JSON.parse(req.body);
console.log("Received:", event.event, event.data);
res.status(200).send("ok");
});| Status | Meaning | When it happens |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Missing/invalid fields, or quantity outside the service's min/max. |
| 401 | Unauthorized | Missing, invalid, or inactive API key. |
| 402 | Payment Required | Wallet balance (+ PAWA Points) is insufficient to cover the order. |
| 404 | Not Found | Service, order, or wallet not found — or the order isn't owned by this key's account. |
| 429 | Too Many Requests | Rate limit exceeded — 60 requests/minute per API key. |
| 500 | Internal Server Error | Unexpected server-side failure. Safe to retry with backoff. |