Every regime, every signal, every briefing — programmatic.
Authenticated JSON over HTTPS, with webhooks, server-sent events, and first-class SDKs for Python, TypeScript, Go, and Rust. The API surfaces every primitive the product is built on — if it's visible in Intelligence or Signal, it's available via Build.
Two tokens, two environments.
Every request carries a bearer token in the Authorization header. Tokens are issued from the Build section of Your Arcane — one for production, one for sandbox. Sandbox responses are deterministic and free. Production counts against your plan quota.
Keys are prefixed by environment: production keys start ark_live_; sandbox keys start ark_test_. Keys are shown only once at issue time; rotate freely.
Security notes: never embed keys in client-side code; use ark_test_ for local development; revoke any key that may have been exposed from Your Arcane · Build.
Hello, SPY.
The three most common patterns, in four languages. Pick the one closest to your stack and adapt.
First-class clients.
Typed, maintained, versioned, and published under Arcane. SDKs track API v1 exactly; major versions follow semver.
pip install arcane-sdknpm install @arcane/sdkgo get github.com/arcane/go-sdkcargo add arcane-sdkCommunity-maintained clients (Ruby, Elixir, Java) are listed at arcane.io/sdks but are not covered by Arcane's support SLA.
We never fail your requests.
Quota is enforced through overage billing, not request denial. You can set a hard cap in Build settings if you want the service to return 429 at the limit instead.
| Plan | Monthly calls | Burst / sec | Sustained / min |
|---|---|---|---|
| Pro | 250,000 | 10 | 1,000 |
| Desk | 1,000,000 | 50 | 5,000 |
| Institutional | Contract | Contract | Contract |
Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. Overage calls include X-RateLimit-Overage: 42 indicating how many calls into overage this request was.
Structured, actionable.
Errors return a 4xx or 5xx status with a JSON body containing code, message, and often a doc_url pointing at the exact section of this reference that explains the fix.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Malformed parameters or body |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | Key does not have access to this resource |
| 404 | not_found | Resource does not exist |
| 404 | symbol_not_covered | Symbol is not in the Arcane universe |
| 429 | rate_limited | Hard cap reached |
| 503 | temporarily_unavailable | Try again after the delay in Retry-After |
Cursor-based, stable.
List endpoints paginate with cursors. Pass limit (max 100) and after (cursor from previous page). Response includes has_more and next_cursor.
Get current regime.
/regime/{symbol}/history.
| Param | Type | In | Description |
|---|---|---|---|
| symbol | string | path · req | Arcane ticker · e.g. SPY, BTC, EURUSD |
| as_of | ISO 8601 | query · opt | Snapshot at a specific time; defaults to now |
granularity=hour for intraday.
| Param | Type | In | Description |
|---|---|---|---|
| from | ISO 8601 | query · req | Start of range |
| to | ISO 8601 | query · opt | End of range; defaults to now |
| granularity | enum | query · opt | day (default) · hour · minute (Institutional only) |
state, regime, and class.Transition events.
symbols, severity, and regime. Falls back to Server-Sent Events for clients behind restrictive proxies.The editorial archive.
type (pre-market · midday · after-hours · weekly · transition · deep), author, or date range.Push over pull.
Webhooks deliver events to your endpoint as they happen. Register via POST /signals/subscribe or from the Build section of Your Arcane.
Signing & verification
Every webhook carries an X-Arcane-Signature header. Verify by HMAC-SHA256 of the raw body with your signing secret.
Event types
| Event | Description |
|---|---|
| signal.normal | Asset transitioned into Normal state |
| signal.elevated | Asset transitioned into Elevated state |
| signal.high_risk | Asset transitioned into High Risk state |
| regime.flip | Primary regime classification changed |
| briefing.published | New briefing published; includes id and type |
| model.version | Regime model version updated (rare) |
Retry policy
Arcane expects a 2xx response within 10 seconds. Non-2xx responses are retried with exponential backoff (5s, 30s, 2m, 10m, 1h) for up to 24 hours. After 24 hours of continuous failure, the subscription is auto-paused and an email is sent to the account owner.
Idempotency: every event carries a unique event_id. Your endpoint should be safe to receive the same event more than once.