API Reference
The NeuroStrike REST API — authenticate with an API key to list targets, launch Strikes, and pull findings.
The NeuroStrike REST API lets you launch Strikes and pull results from your own tooling — CI
pipelines, ticketing, or a SIEM. All endpoints live under https://neurostrike.com/api/v1 and
return JSON.
The full machine-readable specification (OpenAPI 3.0) is published at
/api/openapi. Import it into Postman, Insomnia, or a code
generator to get typed clients.
Authentication
Create an API key in the dashboard under Settings → API keys. The key is shown once — store it in a secrets manager. Each key belongs to one organization; every request made with it is scoped to that organization.
Send the key on every request, either as a bearer token or in the X-API-Key header:
curl -H "Authorization: Bearer $NEUROSTRIKE_API_KEY" \
https://neurostrike.com/api/v1/target/listPermissions
A key only grants the permissions you select when you create it. The defaults are scan:read,
scan:write, and finding:read.
| Permission | Allows |
|---|---|
target:read | List and read targets |
scan:read | List Strikes and read a Strike with its findings |
scan:write | Launch a Strike |
finding:read | List findings |
Keys can be given an expiry date and revoked at any time from the same settings page.
Targets
GET /api/v1/target/list
List the organization's targets. Requires target:read.
| Query parameter | Type | Notes |
|---|---|---|
verified | boolean | Only verified (or unverified) targets |
isActive | boolean | Only active (or inactive) targets |
limit | number | 1–100, default 20 |
cursor | string | From the previous page's nextCursor |
GET /api/v1/target/get
Get one target. Requires target:read.
| Query parameter | Type | Notes |
|---|---|---|
targetId | string | Required |
Targets are created and ownership-verified in the dashboard (DNS TXT record, file upload, HTML meta tag, or IP ownership). A Strike can only be launched against a verified target.
Strikes
POST /api/v1/scan/trigger
Launch a Strike against a verified target. Requires scan:write.
curl -X POST https://neurostrike.com/api/v1/scan/trigger \
-H "Authorization: Bearer $NEUROSTRIKE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "targetId": "tgt_123", "customInstructions": "Focus on the API; do not brute-force logins." }'| Body field | Type | Notes |
|---|---|---|
targetId | string | Required |
customInstructions | string | Optional, up to 10,000 characters. Advisory guidance for the AI — see Configuration |
{ "scanId": "scn_456", "status": "QUEUED", "message": "Scan triggered successfully" }The request is refused if the target is unverified or inactive, if it is marked as a production environment without production Strikes enabled, if its on-prem agent is offline, or if your plan's Strike quota is used up.
GET /api/v1/scan/list
List Strikes, newest first. Requires scan:read.
| Query parameter | Type | Notes |
|---|---|---|
targetId | string | Only Strikes for this target |
status | string | QUEUED, RUNNING, COMPLETED, FAILED, or CANCELLED |
limit | number | 1–100, default 20 |
cursor | string | From the previous page's nextCursor |
GET /api/v1/scan/get
Get one Strike with its findings. Requires scan:read.
| Query parameter | Type | Notes |
|---|---|---|
scanId | string | Required |
Secrets found during a Strike are redacted from finding evidence before they are returned.
Findings
GET /api/v1/finding/list
List findings across the organization. Requires finding:read.
| Query parameter | Type | Notes |
|---|---|---|
targetId | string | Only findings for this target |
scanId | string | Only findings from this Strike |
severity | string | CRITICAL, HIGH, MEDIUM, LOW, or INFO |
status | string | OPEN, IN_PROGRESS, RESOLVED, WONT_FIX, or FALSE_POSITIVE |
category | string | e.g. INJECTION, AUTHORIZATION, XSS — see the OpenAPI spec for the full list |
limit | number | 1–100, default 20 |
cursor | string | From the previous page's nextCursor |
Pagination
List endpoints return a page of results and a cursor:
{ "items": [ ... ], "nextCursor": "clx..." }Pass nextCursor as the cursor query parameter to get the next page. When nextCursor is absent,
you have reached the end.
Errors
Errors use standard HTTP status codes with a JSON body containing a message and a code:
| Status | Meaning |
|---|---|
400 | Invalid input |
401 | Missing, invalid, or expired API key |
403 | The key lacks the required permission, or the action is not authorized |
404 | The resource does not exist in this organization |
412 | A precondition failed (e.g. the target is not verified) |
429 | Rate limit exceeded |
Rate limits
Each API key may make 120 requests per minute. Requests over the limit receive 429; wait and
retry with backoff.