Backtest

Enqueue a backtest job

Min tier: free. Replays historical whale/insider signals through a stake rule and returns immediately with a job id — the simulation runs on a worker queue. Poll GET /v1/backtest/{job_id} until status is done or error.

The body is validated with a strict schema: unknown fields are rejected with 400 bad_request (the message names the offending path). A request with no body, or a body that is not valid JSON, is also 400.

Guardrails:

  • Per-key concurrency: at most 3 queued+running jobs per API key. Exceeding it returns 429 with code rate_limited — the same code and the same X-RateLimit-*/Retry-After headers as a quota 429, even though the correct response is to poll your existing jobs rather than sleep for the quota window.
  • Global back-pressure: 503 (code internal_error, no Retry-After) when 50 jobs are already queued.
  • Window cap: period.to - period.from may not exceed 1,095 days (3 years).

There is no Idempotency-Key support: a retried POST enqueues a second job and consumes another concurrency slot.

post/v1/backtest/run

Request

  • Base URL: https://crowdintel.xyz/api
  • URL: https://crowdintel.xyz/api/v1/backtest/run
  • Auth: HTTP bearer

Request body

signal'whale' | 'insider' | 'all'

Which detector's signals to replay. all = whale ∪ insider.

initial_capitalnumber

Starting bankroll (USD) for the equity curve. Default 10000.

Response

Job accepted and queued.

job_idinteger required
status'queued' required
pollstring required

Path to poll for the result.

Example response

{
  "poll": "/api/v1/backtest/412"
}

Changes

No recorded changes to this operation across all 1 revision of this API.