/api/insiders/syncTrigger an on-demand insider data sync.
Trigger an on-demand insider data sync. Re-runs the Form 4 RSS poller and writes any newly-discovered transactions to the insiders tables. Idempotent — re-runs are no-ops if nothing new is in the EDGAR feed.
Why use this
Triggers an on-demand sync of recent Form 4 filings — useful when you want the most recent transactions before the next scheduled poll runs (default cadence: every 60 seconds). Returns immediately with a queued job descriptor; the actual sync runs asynchronously on the insider Celery worker. Subsequent reads from GET /insider-module/api/insiders/transactions/latest will reflect the newly indexed rows once last_synced_at advances. The 25-token cost reflects the heavier downstream work this endpoint dispatches.
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| job_id | string | no | Celery task UUID assigned to the sync job. Surface this in support tickets when a sync appears to have hung — operations can grep this directly out of `flower` / Celery logs to trace the worker, queue, and per-step duration. |
| queued_at | string | no | ISO-8601 UTC timestamp at which the job entered the `sec_insiders` Celery queue (NOT the timestamp at which a worker started executing it). For end-to-end latency measurement, compare this against the `last_synced_at` value returned by subsequent reads. |
| status | string | no | Always the literal string `"queued"` on a successful enqueue. The sync itself is asynchronous — this endpoint never returns `"completed"`. To detect completion, poll `GET /insider-module/api/insiders/transactions/latest` and compare its `last_synced_at` against `queued_at`, or subscribe to the WebSocket push stream. |
| estimated_seconds | integer | no | Server-side ETA (in whole seconds) for the sync to complete, computed from current EDGAR feed depth and worker concurrency. Typical range 30-90s in steady state; 120-300s during 13F deadline windows when the insider worker shares CPU with form_13f workers. Treat as a hint, not a contract — schedule a re-poll at `queued_at + 1.5 × estimated_seconds`. |
Sample response
- "job_id": "8f1a2b30-c4d5-46e7-9f01-23456789abcd"
- "queued_at": "2026-05-01T20:55:12.000Z"
- "status": "queued"
- "estimated_seconds": 60
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/insiders/sync?api_Token=YOUR_API_KEY" \
-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).