mcpField
C
crowdsec-service-api

crowdsec-service-api

github.com/crowdsecuritySecurity2684 installsUpdated today
Repository

About crowdsec-service-api

A guide for CrowdSec administrators using the cloud-side Service API to manage lists, decisions, firewall integrations, and remediation metrics. It distinguishes this API from the local engine and requires confirmation before production changes.

Key features

  1. 01Manage cloud blocklists and allowlists
  2. 02Configure firewall integrations
  3. 03Create organization-level decisions
  4. 04Retrieve remediation metrics
  5. 05Require confirmation for mutations

Use cases

  1. 01Add IPs to a cloud blocklist through the API
  2. 02Set up a cloud integration for a firewall or appliance
  3. 03Review an organization's remediation metrics
  4. 04Check changes that affect subscribed engines

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/crowdsecurity/crowdsec-skill --skill crowdsec-service-api

After installing, type/crowdsec-service-apiin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
allowlists.md
authentication.md
blocklists.md
decisions.md
integrations.md
metrics.md

Details

From the project README

CrowdSec Service API (SAPI) — cloud blocklist / allowlist / integration automation

SAPI is the premium REST API behind the CrowdSec Console. It manages cloud-side objects (private blocklists, allowlists, decisions, firewall integrations) that then push down to enrolled engines and bouncers. It is not the local engine API — there is no cscli here, only HTTPS.

Boundary — this skill vs the crowdsec skill

You want to…Use
Create/manage a private blocklist in the cloud, push IPs to it via APIthis skill
Wire a firewall/appliance (Palo Alto, Fortinet…) to a cloud integrationthis skill
Manage cloud allowlists, subscribe engines/tags/orgs to liststhis skill
Create/manage org-level decisions (targeted or ad-hoc bans, non-IP scopes, per tag/entity)this skill
Pull remediation ROI metricsthis skill
Install / run / debug the local engine, cscli, bouncers, WAFthe crowdsec skill
Enroll an engine into the Console (cscli console enroll)the crowdsec skill → references/install/console.md
Configure a local allowlist/whitelist on one enginethe crowdsec skill → references/configure/allowlists.md

Cloud allowlists/blocklists here only take effect on an engine once that engine is enrolled and subscribed to the list. The enrollment half lives in the crowdsec skill.

Operating contract

Every call here hits production and can change what subscribed engines enforce.

1 — Resolve the key. Never echo it, never write it anywhere but the file below:

KEY="${CROWDSEC_SAPI_KEY:-$(cat ~/.config/crowdsec/sapi_key 2>/dev/null)}"
[ -n "$KEY" ] || echo "No key: export CROWDSEC_SAPI_KEY or store it in ~/.config/crowdsec/sapi_key (chmod 0600)"

2 — Validate before acting — one read call confirms the key and shows which tenant is about to change:

curl -s -H "x-api-key: $KEY" https://admin.api.crowdsec.net/v1/info
# → {"organization_id":"…","subscription_type":"…","api_key_name":"…"}

3 — Classify read vs mutate. GET / download / POST …/search are safe — run them directly. Every POST / PATCH / DELETE that changes state requires explicit confirmation first: present the exact URL and JSON body, then wait for a yes.

4 — Extra-danger operations — spell out the consequence in plain words before the confirm, because subscribed engines enforce these lists, so a change can block or unblock real traffic and is hard to undo:

OperationWhy it's dangerous
POST …/ips/bulk_overwriteReplaces the entire blocklist content.
DELETE /blocklists/{id} · /allowlists/{id} · /integrations/{id}Removes the object and everyone's subscription/feed to it.
POST …/ips/deleteUn-blocks IPs fleet-wide.
POST /decisions with target.type: orgBans fleet-wide across every enrolled engine in the org.
…/shares / unshareGrants/revokes another organization access.
any …/subscribers changeChanges which engines/bouncers enforce the list.

5 — Clean up any object created only to test a recipe. A key that was exposed anywhere in transit must be rotated.

Step — Detect the intent

Cue from userGo to
"test my key", "what org / plan am I on"references/authentication.md
"create a blocklist", "push IPs from my SIEM/SOAR", "expire IPs", "share a blocklist with another org", "subscribe my engine to a list"references/blocklists.md
"cloud allowlist via API", "allow my office/CDN across the fleet"references/allowlists.md
"connect Palo Alto / Fortinet / Cisco / F5 / Sophos / pfSense / OPNsense", "firewall integration", "pull IP list in vendor format", "paginate the feed"references/integrations.md
"remediation metrics", "how much did CrowdSec save / block", "ROI dashboard"references/metrics.md
"org-level decisions via API", "aggregated decisions"references/decisions.md

Step — curl cheat sheet

All assume KEY is set (see operating contract). jq optional for readability.

PurposeCommand
Who am I / validate keycurl -s -H "x-api-key: $KEY" $B/info
List blocklistscurl -s -H "x-api-key: $KEY" "$B/blocklists"
List allowlistscurl -s -H "x-api-key: $KEY" "$B/allowlists"
List integrationscurl -s -H "x-api-key: $KEY" "$B/integrations"
List / find decisionscurl -s -H "x-api-key: $KEY" "$B/decisions" · …?ips=1.2.3.4
Remediation metricscurl -s -H "x-api-key: $KEY" "$B/metrics/remediation?start_date=$FROM&end_date=$TO"
Add IPs to a blocklist (mutating — confirm)curl -s -H "x-api-key: $KEY" -H 'Content-Type: application/json' -X POST "$B/blocklists/$ID/ips" -d '{"ips":["1.2.3.4"]}'
Create a decision (mutating — confirm)curl -s -H "x-api-key: $KEY" -H 'Content-Type: application/json' -X POST "$B/decisions" -d '{"duration":"4h","origin":"cscli","scenario":"manual","scope":"Ip","type":"ban","value":"1.2.3.4","target":{"type":"org","value":"<org>"}}'

where B=https://admin.api.crowdsec.net/v1.

Hard don'ts

  • Don't send a mutating call before the URL + body have been shown and approved (see operating contract §3–4).
  • Don't use …/ips/bulk_overwrite when the user means "add a few IPs" — that's …/ips. bulk_overwrite wipes the list first.
  • Don't print, log, or persist the API key anywhere but ~/.config/crowdsec/sapi_key. Resolve it from there or from the env var only.
  • Don't assume a cloud allowlist/blocklist is enforced just because the API call succeeded — the engine must be enrolled and subscribed, and it pulls on a poll cycle (verify locally via the crowdsec skill).

Docs

Canonical: https://docs.crowdsec.net/u/console/service_api/getting_started. Each references/ file cites the specific upstream page and the live OpenAPI operation it derives from.

Comments

Markdown supported