Product · Developers
Intelligence API
A versioned, least-privilege REST API over the governed Fortune.ML platform. Authenticate with a scoped key; every request is checked against your live entitlement, data rights, and each capability's real system availability. A scope is necessary but never sufficient — it cannot manufacture data or a model the platform cannot honestly deliver.
Authentication
Keys are minted from the session-gated developer surface and are shown in plaintext exactly once. The server stores only a hash — it can verify a key but can never reveal it. Keys are TEST-mode only until a billing path is configured. Send your key as a bearer token.
curl https://fortune.ml/api/v1/fortune/account \ -H "Authorization: Bearer fml_test_..."
Scopes
Each scope maps to the capability it depends on. At request time the granted scope is intersected with your live account entitlement, so prediction:read on a valid key still returns no prediction until predictions are available.
| Scope | Depends on | Description |
|---|---|---|
| reference:read | API_ACCESS only | Read global security reference identity (customer-safe, no market numbers). |
| markets:read | global market data | Read governed market data (quotes, bars) for entitled markets only. |
| stocks:read | standard stock intelligence | Read customer-safe stock intelligence sections. |
| daily:read | daily fortune | Read governed Daily Fortune output. |
| discovery:read | discovery | Run allowlisted descriptive discovery queries. |
| alerts:read | alerts | Read this account's own alert history. |
| account:read | API_ACCESS only | Read this account's plan, entitlements, usage and credit balance. |
| prediction:read | advanced prediction | Read prediction outlook availability (predictions not yet available). |
| exports:read | export | Read export job status (bulk export activation is governed). |
Endpoints
Every data endpoint is governed: it returns only customer-safe, cleared content and never a fabricated number. When the underlying data plane has nothing cleared, the response reports freshness UNAVAILABLE rather than inventing a value.
| Method | Path | Scope | Notes |
|---|---|---|---|
| GET | /api/v1/fortune/openapi | public | Machine-readable OpenAPI document. |
| GET | /api/v1/fortune/account | account:read | Your plan, entitlements and credit balance. |
| GET | /api/v1/fortune/usage | account:read | Your own 30-day metered usage summary. |
| GET | /api/v1/fortune/reference/{symbol} | reference:read | Global reference identity — no market numbers. |
| GET | /api/v1/fortune/markets/quote/{symbol} | markets:read | Governed quotes for entitled markets only. |
| GET | /api/v1/fortune/stocks/{symbol} | stocks:read | Customer-safe stock intelligence sections. |
| GET | /api/v1/fortune/daily | daily:read | Governed Daily Fortune briefing. |
| GET | /api/v1/fortune/discovery | discovery:read | Allowlisted descriptive discovery only. |
| GET | /api/v1/fortune/prediction/outlook/{symbol} | prediction:read | Prediction availability — predictions not yet available. |
Response envelope
Every response shares one stable envelope: a request id for support and idempotency, the API version, the resolved capability, freshness, and metered usage. Errors use the same envelope with a machine-readable code.
{
"apiVersion": "v1",
"requestId": "req_...",
"ok": true,
"data": { "...": "..." },
"meta": { "capability": "reference.identity", "freshness": "FRESH", "usageUnits": 1 }
}