Addons
API reference

Addons API

Curated packs that bundle several plugins into one themed install — a zombie server, a match server, an admin toolkit.

No key required Read-only https://api.counter-strike-boost.com

Overview #

An addon pack is an ordered, curated list of plugins from the plugin directory. There is no separate download for a pack: the detail response hands you an install_url per bundled plugin, and you install each one exactly as you would a standalone plugin.

GET/v1/addonsPaginated list of published packs
GET/v1/addons/{slug}One pack plus its bundled plugins
A pack is a recipe, not an artifact

Packs stay current automatically: install_url always points at each plugin's latest published version at the moment you read it. Cache the plugin files, not the pack response.

List addon packs #

GET /v1/addons addons:read auth optional

Published packs, sorted by all-time downloads descending. There is no search or category filter here — the pack catalogue is small enough to fetch whole.

Parameters

page_n integer default 1

1-based page number, clamped to 1–100000.

per_page integer default 24

Items per page, clamped to 1–100.

Response fields

FieldTypeNotes
plugin_count integer Number of plugins in the pack, as curated. The detail response may list fewer if a bundled plugin has since been unpublished.
downloads integer All-time pack downloads.
detail_url / page_url string API detail URL and the human-facing page.

A brand-new install has no published packs — an empty "addons": [] with "total": 0 is a perfectly normal 200. Handle it.

Request
cURL
curl "https://api.counter-strike-boost.com/v1/addons?per_page=2"
JavaScript
const res  = await fetch(
  "https://api.counter-strike-boost.com/v1/addons?per_page=2"
);
const data = await res.json();

if (!data.status) {
  throw new Error(data.error);   // stable machine-readable code
}
PHP
<?php
$body = file_get_contents(
    "https://api.counter-strike-boost.com/v1/addons?per_page=2"
);
$data = json_decode($body, true);

if (empty($data['status'])) {
    throw new RuntimeException($data['error'] ?? 'request_failed');
}
Python
import requests

r = requests.get(
    "https://api.counter-strike-boost.com/v1/addons?per_page=2",
    timeout=30,
)
r.raise_for_status()
data = r.json()
Response 200 OK
200 OK
{
  "addons": [
    {
      "created_at": "2026-07-18 11:04:31",
      "description": "Everything a public 24/7 server needs on day one: admin menu, ban manager, adverts and anti-cheat.",
      "detail_url": "https://api.counter-strike-boost.com/v1/addons/essential-server-pack",
      "downloads": 512,
      "name": "Essential Server Pack",
      "page_url": "https://counter-strike-boost.com/addons/essential-server-pack",
      "plugin_count": 6,
      "slug": "essential-server-pack"
    }
  ],
  "page": 1,
  "per_page": 2,
  "status": true,
  "total": 1,
  "total_pages": 1
}

Get an addon pack #

GET /v1/addons/{slug} addons:read auth optional

The pack plus its bundled plugins in curation order. Each plugin arrives with its latest version resolved and an install_url you can hand straight to a downloader — no second round-trip to /v1/plugins/{slug} needed.

Parameters

slug string path required

Pack slug, e.g. essential-server-pack.

Response fields

FieldTypeNotes
plugins object[] In curation order — the pack author decided it, so install in this order.
plugins[].install_url string Pre-built download URL for the plugin's latest version, kind=amxx. Empty string if that plugin currently has no published version — skip those rather than requesting an empty URL.
plugins[].latest_version string Resolved at read time. Want a different kind? Rebuild the URL from slug + this version.

A bundled plugin that has been unpublished simply disappears from plugins, while plugin_count keeps the curated number. If the two disagree, trust the array — it is what you can actually install. Iterating over plugins and skipping empty install_url values is always correct.

Request
cURL
curl "https://api.counter-strike-boost.com/v1/addons/essential-server-pack"
JavaScript
const res  = await fetch(
  "https://api.counter-strike-boost.com/v1/addons/essential-server-pack"
);
const data = await res.json();

if (!data.status) {
  throw new Error(data.error);   // stable machine-readable code
}
PHP
<?php
$body = file_get_contents(
    "https://api.counter-strike-boost.com/v1/addons/essential-server-pack"
);
$data = json_decode($body, true);

if (empty($data['status'])) {
    throw new RuntimeException($data['error'] ?? 'request_failed');
}
Python
import requests

r = requests.get(
    "https://api.counter-strike-boost.com/v1/addons/essential-server-pack",
    timeout=30,
)
r.raise_for_status()
data = r.json()
Response
200 OK
{
  "addon": {
    "created_at": "2026-07-18 11:04:31",
    "description": "Everything a public 24/7 server needs on day one.",
    "downloads": 512,
    "name": "Essential Server Pack",
    "page_url": "https://counter-strike-boost.com/addons/essential-server-pack",
    "plugin_count": 6,
    "plugins": [
      {
        "category": "admin",
        "detail_url": "https://api.counter-strike-boost.com/v1/plugins/csb-admin-menu",
        "install_url": "https://api.counter-strike-boost.com/v1/plugins/csb-admin-menu/download/1.0.0?kind=amxx",
        "latest_version": "1.0.0",
        "name": "CSB Admin Menu",
        "rating": { "avg": 4.6, "count": 23 },
        "slug": "csb-admin-menu"
      },
      {
        "category": "hud-info",
        "detail_url": "https://api.counter-strike-boost.com/v1/plugins/csb-server-adverts",
        "install_url": "https://api.counter-strike-boost.com/v1/plugins/csb-server-adverts/download/1.0.0?kind=amxx",
        "latest_version": "1.0.0",
        "name": "CSB Server Adverts",
        "rating": { "avg": 0, "count": 0 },
        "slug": "csb-server-adverts"
      }
    ],
    "slug": "essential-server-pack"
  },
  "status": true
}
404 Not Found
{
  "error": "not_found",
  "status": false
}

Recipe: install a whole pack #

Read the pack, then fetch each plugin in order. Every bundled plugin also needs a line in plugins.ini, so keep the filenames as you go.

Implementation
Shell
SLUG=essential-server-pack
curl -s "https://api.counter-strike-boost.com/v1/addons/$SLUG" \
  | jq -r '.addon.plugins[] | select(.install_url != "") | .install_url' \
  | while read -r url; do curl -OJ "$url"; done
Node.js
const API = 'https://api.counter-strike-boost.com';

const res  = await fetch(`${API}/v1/addons/essential-server-pack`);
const { addon } = await res.json();

for (const plugin of addon.plugins) {
  // A plugin with no published version has an empty install_url.
  if (!plugin.install_url) continue;

  const file = await fetch(plugin.install_url);
  if (!file.ok) {
    const err = await file.json();          // { status:false, error:"..." }
    console.warn(`skip ${plugin.slug}: ${err.error}`);
    continue;
  }
  await writeFile(
    `cstrike/addons/amxmodx/plugins/${plugin.slug}-${plugin.latest_version}.amxx`,
    Buffer.from(await file.arrayBuffer())
  );
}

Each of those downloads compiles a plugin, so a six-plugin pack costs six units of your hourly compile budget. Pace bulk installs, or use a key.

Something wrong or missing?

These pages are generated from the live API contract and verified against production on 2026-07-31. If a response here does not match what you got, tell us — that is a bug on our side.