Crowdstrike api
Cyber Threat Intelligence Skills for each stage of the CTI Lifecycle.
npx -y skills add Liberty91LTD/cti-skills --skill crowdstrike-apiAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 8 stars8 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
CrowdStrike Falcon Intelligence (Intel API) reference. OAuth2 auth, Falcon Query Language, indicator (IOC) lookups, threat-actor entities, intel reports, MITRE ATT&CK mappings, malware families, vulnerabilities, rule sets.
SKILL.md
9.9 KB, as published. Nobody here has run it
CrowdStrike Falcon Intelligence (Intel) API
This is reference documentation. The agent-invokable lookup skill is /lookup-crowdstrike; the runtime CLI is tools/clis/crowdstrike.py. Read this file when the lookup skill's options are not enough and you need to know which raw endpoint to hit, what fields a response carries, or how to construct an FQL query the CLI does not expose directly.
Source of truth: https://developer.crowdstrike.com/api-reference/collections/intel/
Base URL
OAuth2 base differs by cloud region. The Intel path prefix is /intel/.
| Cloud | Base URL |
|---|---|
| US-1 (default) | https://api.crowdstrike.com |
| US-2 | https://api.us-2.crowdstrike.com |
| EU-1 | https://api.eu-1.crowdstrike.com |
| US-GovCloud | https://api.laggar.gcw.crowdstrike.com |
Override with CROWDSTRIKE_BASE_URL (or --base-url). FalconPy also accepts the short names us-1, us-2, eu-1, usgov1.
Authentication
OAuth2 client-credentials flow:
POST /oauth2/tokenwith form-encodedclient_idandclient_secret.- Response:
{"access_token": "<jwt>", "expires_in": 1799, "token_type": "bearer"}. - All subsequent requests carry
Authorization: Bearer <access_token>.
FalconPy performs this exchange and refresh automatically when given client_id= / client_secret=.
# Manual token exchange
TOKEN=$(curl -s -X POST "https://api.crowdstrike.com/oauth2/token" \
-d "client_id=$CROWDSTRIKE_CLIENT_ID&client_secret=$CROWDSTRIKE_CLIENT_SECRET" | jq -r .access_token)
# Subsequent call
curl -s "https://api.crowdstrike.com/intel/combined/actors/v1?filter=origins.slug%3A%27ru%27&limit=10" \
-H "Authorization: Bearer $TOKEN"
The API client needs the Intel scopes: Indicators (Falcon Intelligence): Read, Actors (Falcon Intelligence): Read, Reports (Falcon Intelligence): Read, and Rules (Falcon Intelligence): Read for rule-set endpoints. Create it in the Falcon console → Support and resources → API clients and keys. If the env vars are unset, inform the user to run /cti-setup or ./scripts/setup.sh.
Rate limits
Per-tenant token bucket. Responses carry X-RateLimit-Limit and X-RateLimit-Remaining. On exhaustion the API returns HTTP 429 with a Retry-After: <seconds> header — back off and retry. 429 is also returned briefly if you call before the OAuth token is minted.
Falcon Query Language (FQL)
Query/combined endpoints accept a filter parameter in FQL:
- Equality:
malicious_confidence:'high',name:'FANCY BEAR'(actor name; exact match) - Country slugs are ISO 3166-1 alpha-2 codes, not names:
origins.slug:'ru'(Russia),'cn'(China),'ir'(Iran),'kp'(North Korea),target_countries.slug:'us' - Other nested arrays use word slugs:
target_industries.slug:'financial-services',motivations.slug:'state-sponsored',actors.slug:'mustang-panda' - Comparisons / dates:
created_date:>'2025-01-01',last_updated:>=1704067200 - Boolean combine:
+= AND,,= OR. e.g.origins.slug:'cn'+target_industries.slug:'government' - Free-text: the separate
qparameter does a fuzzy text match across the entity (used byactor/reports --search) - Sort:
sort=created_date|desc,sort=last_activity_date|desc.nameis not a sortable field on the actors endpoint — sorting by it silently returns zero results - Page:
limit(max 5000 for most, 10000 for indicators) +offset
Capability map
| Group | Operation | Method + endpoint | FalconPy method |
|---|---|---|---|
| Actors | QueryIntelActorEntities | GET /intel/combined/actors/v1 | query_actor_entities |
| Actors | QueryIntelActorIds | GET /intel/queries/actors/v1 | query_actor_ids |
| Actors | GetIntelActorEntities | GET /intel/entities/actors/v1 | get_actor_entities |
| Indicators | QueryIntelIndicatorEntities | GET /intel/combined/indicators/v1 | query_indicator_entities |
| Indicators | QueryIntelIndicatorIds | GET /intel/queries/indicators/v1 | query_indicator_ids |
| Indicators | GetIntelIndicatorEntities | POST /intel/entities/indicators/GET/v1 | get_indicator_entities |
| Reports | QueryIntelReportEntities | GET /intel/combined/reports/v1 | query_report_entities |
| Reports | QueryIntelReportIds | GET /intel/queries/reports/v1 | query_report_ids |
| Reports | GetIntelReportEntities | GET /intel/entities/reports/v1 | get_report_entities |
| Reports | GetIntelReportPDF | GET /intel/entities/report-files/v1 | get_report_pdf |
| MITRE | QueryMitreAttacks | GET /intel/combined/mitre-attacks/v1 | query_mitre_attacks |
| MITRE | QueryMitreAttacksForMalware | GET /intel/combined/mitre-attacks-for-malware/v1 | query_mitre_attacks_for_malware |
| MITRE | GetMitreReport | GET /intel/entities/mitre-reports/v1 | get_mitre_report |
| MITRE | GetMalwareMitreReport | GET /intel/entities/malware-mitre-reports/v1 | get_malware_mitre_report |
| MITRE | PostMitreAttacks | POST /intel/entities/mitre/v1 | post_mitre_attacks |
| Malware | QueryIntelMalwareEntities | GET /intel/combined/malware/v1 | query_malware / query_malware_entities |
| Malware | GetIntelMalwareEntities | GET /intel/entities/malware/v1 | get_malware_entities |
| Vulnerabilities | QueryVulnerabilities | GET /intel/queries/vulnerabilities/v1 | query_vulnerabilities |
| Vulnerabilities | GetVulnerabilities | GET /intel/entities/vulnerabilities/GET/v1 | get_vulnerabilities |
| Rule sets | QueryIntelRuleIds | GET /intel/queries/rules/v1 | query_rule_ids |
| Rule sets | GetIntelRuleEntities | GET /intel/entities/rules/v1 | get_rule_entities |
| Rule sets | GetIntelRuleFile | GET /intel/entities/rules-files/v1 | get_rule_file |
| Rule sets | GetLatestIntelRuleFile | GET /intel/entities/rules-latest-files/v1 | get_latest_intel_rule_file |
The CLI wraps the bold-path subset (actors, indicators, reports, mitre-attacks, mitre-reports). The rest are reachable directly via FalconPy if a skill needs them.
Key endpoints — examples
Indicator (IOC) lookup
# Single-value lookup (CLI: `indicator <value>`)
curl -s "https://api.crowdstrike.com/intel/combined/indicators/v1?filter=indicator%3A%271.1.1.1%27&limit=50" \
-H "Authorization: Bearer $TOKEN"
# Browse/sweep the feed — latest high-confidence malicious IOCs (CLI: `indicators --malicious`)
curl -s "https://api.crowdstrike.com/intel/combined/indicators/v1?filter=malicious_confidence%3A%27high%27&sort=published_date%7Cdesc&limit=10" \
-H "Authorization: Bearer $TOKEN"
type values are: ip_address, domain, url, hash_md5, hash_sha1, hash_sha256, email_address, file_name, mutex_name, registry, service_name, username, persona_name, x509_serial, x509_subject (and more). Combine confidence + type + actors:'<slug>' + malware_families:'<fam>' + published_date:>EPOCH with +. Requires the Indicators (Falcon Intelligence): Read scope — without it the endpoint returns HTTP 403 "scope not permitted" even though Actors/Reports work.
Response resources[] highlights: indicator, type (ip_address/domain/hash_sha256/url/…), malicious_confidence (high/medium/low/unverified), actors[] (slugs), malware_families[], kill_chains[], threat_types[], reports[] (report IDs), labels[], relations[], published_date, last_updated.
Actor entities
# Search by origin (ISO country-code slug; sort by activity, NOT name)
curl -s "https://api.crowdstrike.com/intel/combined/actors/v1?filter=origins.slug%3A%27ru%27&sort=last_activity_date%7Cdesc&limit=30" \
-H "Authorization: Bearer $TOKEN"
# Free-text profile lookup
curl -s "https://api.crowdstrike.com/intel/combined/actors/v1?q=Charming%20Kitten&limit=1" \
-H "Authorization: Bearer $TOKEN"
Actor resources[] fields: id, name, slug, short_description, description, known_as, origins[], target_countries[], target_industries[], motivations[], capability, group, actor_type, first_activity_date, last_activity_date, url. Each origins/target_* element is {id, value, slug}.
Reports
# Latest reports for an actor
curl -s "https://api.crowdstrike.com/intel/combined/reports/v1?filter=actors.slug%3A%27mustang-panda%27&sort=created_date%7Cdesc&limit=5" \
-H "Authorization: Bearer $TOKEN"
# Download a report PDF (binary)
curl -s "https://api.crowdstrike.com/intel/entities/report-files/v1?ids=CSA-250123" \
-H "Authorization: Bearer $TOKEN" -o report.pdf
Report resources[] fields: id, name, title, slug, short_description, description, created_date, last_modified_date, actors[], target_countries[], target_industries[], motivations[], tags[], report_type, sub_type, url, attachments[].
MITRE ATT&CK for an actor
# Technique IDs mapped to an actor (by slug or id)
curl -s "https://api.crowdstrike.com/intel/combined/mitre-attacks/v1?id=charming-kitten" \
-H "Authorization: Bearer $TOKEN"
# Full ATT&CK report — csv | json | json_navigator
curl -s "https://api.crowdstrike.com/intel/entities/mitre-reports/v1?actor_id=charming-kitten&format=json_navigator" \
-H "Authorization: Bearer $TOKEN"
QueryMitreAttacks returns a flat list of ATT&CK technique IDs in resources[]. GetMitreReport returns the full mapping; json_navigator is an ATT&CK Navigator layer JSON you can load directly into the Navigator UI. Resolve technique IDs against the bundled dataset with /mitre-attack.
Response shape
FalconPy returns {status_code, headers, body} where body = {meta, resources, errors}. The CLI unwraps body.resources and emits a normalised envelope. See skills/lookup-crowdstrike/SKILL.md § Response format.