{% extends 'partials/base.html' %} {% load humanize %} {% block content %}

Logs API

Browse categories and products, buy logs, and check your balance

T

Your API Key

Active
••••••••••••••••••••••••

Send this key as a header on every request: Authorization: Bearer <API_KEY>. Regenerating immediately invalidates the current key.

Getting Started

All endpoints are served under the base URL below. Requests and responses are JSON. Authenticate with your API key in the Authorization header.

BASE URL  https://{{ request.get_host|default:"api.thespeedkeys.com" }}/api/v1
HEADER    Authorization: Bearer <API_KEY>
GET /categories

Response 200

{
  "count": 3,
  "results": [
    { "id": 1, "name": "Facebook", "slug": "facebook", "product_count": 42 },
    { "id": 2, "name": "Instagram",        "slug": "instagram",        "product_count": 87 },
    { "id": 3, "name": "Tiktok",        "slug": "tiktok",        "product_count": 25 }
  ]
}
GET /products

Query Parameters

categoryint · optionalFilter by category id
in_stockbool · optionalOnly products with keys available
pageint · optionalPage number (default 1)

Response 200

{
  "count": 42,
  "results": [
    {
      "id": 128,
      "name": "Facebook 2025",
      "category_id": 1,
      "price": "3500.00",
      "stock": 57,
      "in_stock": true
    }
  ]
}
POST /buy

Body (JSON)

productintProduct id to purchase
quantityint · optionalNumber of keys (default 1)
{
  "product": 128,
  "quantity": 2
}

Response 201

{
  "order_id": 77213,
  "product": "Facebook 2025",
  "quantity": 2,
  "charge": "7000.00",
  "keys": [
    "XXXXX-XXXXX-XXXXX-XXXXX-11111",
    "XXXXX-XXXXX-XXXXX-XXXXX-22222"
  ]
}

The purchased keys are returned once, in this response. Store them — retrieve later from your order history.

GET /balance

Response 200

{
  "balance": "12500.00",
  "currency": "NGN"
}

Error Format

{
  "error": "insufficient_balance",
  "detail": "Wallet balance is too low for this order."
}
401Missing or invalid API key
402Insufficient wallet balance
404Product or category not found
409Out of stock / not enough keys
429Rate limit exceeded
{% endblock content %}