/api/v1/sniper/targets/{target_id}/stopStop an active sniper target.
Stop an active sniper target.
Why use this
Common use case
Cancel an active or pending sniper target — moves the target to terminal STOPPED state with resolution_reason='manual_stop'. Frees the plan-allocated sniper slot for another target. The endpoint is idempotent (calling stop on an already-STOPPED target returns 200 with the same body, NOT a 409 conflict) — convenient for cleanup scripts that may unconditionally call stop. Stop events do NOT fire webhook notifications (the customer just dispatched the stop, no need to inform them). For natural-end stops (window expired) the same resolution_reason field will read window_expired; for filing-fired stops filing_hit. Pair with GET /api/v1/sniper/targets?status=ACTIVE to list all active targets and bulk-stop selectively. The freed slot can be re-used immediately by another POST /api/v1/sniper/targets call.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| target_id | path | required | — | — | Target ID (format: `tgt_<base62-12chars>`). From [POST /api/v1/sniper/targets](/docs/sniper/sniper-module/post-sniper-targets) creation response or [GET /api/v1/sniper/targets](/docs/sniper/sniper-module/get-sniper-targets) listing. Returns 404 when the target_id is unknown OR is owned by a different user (no information leak about other users' targets). | tgt_abc123def456 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| target_id | string | no | Echoed target identifier. |
| ticker | string | no | Echoed canonical hyphen-form ticker. |
| status | string | no | Always `STOPPED` after this call (terminal state). |
| resolution_reason | string | no | Always `manual_stop` for stop calls (vs `window_expired` for natural-end stops or `filing_hit` for filing-fired stops). |
| stopped_at | string | no | ISO 8601 UTC timestamp of the stop event (server-side). |
| slots_available | integer | no | Updated remaining plan-allocated sniper-slot budget after the stop. Useful for refreshing the 'X of 5 slots used' indicator in the UI immediately on stop response. |
Sample response
- "target_id": "tgt_abc123def456"
- "ticker": "TSLA"
- "status": "STOPPED"
- "resolution_reason": "manual_stop"
- "stopped_at": "2026-05-02T21:42:18Z"
- "slots_available": 5
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl -X POST "https://api.finradar.ai/api/v1/sniper/targets/{target_id}/stop" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).