PawaBoostPawaBoostAPI Get API Key

Documentation

PawaBoost API

v1.0.0

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

url
https://pawaboost.com/api/v1

Authentication

Every request (except GET /api/v1) requires a Bearer token in the Authorization header, using an API key generated from your API Keys dashboard .

header
Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Example request:

curl
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:

HeaderDescription
X-RateLimit-LimitRequests allowed per window (60)
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetUnix ms timestamp when the window resets

Exceeding the limit returns a 429 with X-RateLimit-Remaining: 0.

Endpoints

GET/api/v1

Returns basic API metadata. No authentication required.

Example response · 200

json
{
  "success": true,
  "name": "PawaBoost API",
  "version": "1.0.0",
  "docs": "https://pawaboost.com/api-docs"
}
GET/api/v1/services services

List all active services available for ordering, with pricing and quantity limits.

Example response · 200

json
{
  "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
}
GET/api/v1/balance balance

Get the current wallet balance for the account that owns this API key.

Example response · 200

json
{
  "success": true,
  "balance": 15000,
  "currency": "NGN"
}
POST/api/v1/order orders

Place a new order. The cost is deducted from your wallet balance (PAWA Points applied first).

ParamTypeDescription
serviceId*stringID of the service to order (see /services)
link*stringTarget profile/post URL
quantity*numberMust be within the service's min/max quantity

Example response · 201

json
{
  "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"
  }
}
GET/api/v1/order/:id orders

Get the current status and delivery progress of a single order you placed.

ParamTypeDescription
id*stringOrder ID, from the path

Example response · 200

json
{
  "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"
  }
}
GET/api/v1/orders orders

List orders placed with this API key's account, newest first.

ParamTypeDescription
pagenumberPage number — default 1
limitnumberResults per page — default 20, max 100

Example response · 200

json
{
  "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
}
POST/api/v1/webhook/test

Send a test payload to the webhook URL configured on your API key, to verify your endpoint and signature verification.

Example response · 200

json
{
  "success": true,
  "message": "Test webhook dispatched"
}

Webhooks

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.

json
{
  "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.

json
{
  "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.

node.js
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");
});

Error Codes

StatusMeaningWhen it happens
200OKRequest succeeded.
400Bad RequestMissing/invalid fields, or quantity outside the service's min/max.
401UnauthorizedMissing, invalid, or inactive API key.
402Payment RequiredWallet balance (+ PAWA Points) is insufficient to cover the order.
404Not FoundService, order, or wallet not found — or the order isn't owned by this key's account.
429Too Many RequestsRate limit exceeded — 60 requests/minute per API key.
500Internal Server ErrorUnexpected server-side failure. Safe to retry with backoff.