Connect market data, checkups, and signals to your systems
This guide covers interfaces implemented in the current code: API Key and session authentication, consistent errors, pagination and rate limits, per-coin data, signed Webhooks, and Centrifugo realtime subscriptions.
Endpoint, parameter, and field tables read packages/api-client/openapi.json from this repository at build time, with authentication and business boundaries checked against platform routes. The page is static, makes no online requests, and does not assert that any external hostname has passed acceptance testing.
Quickstart
Create an API Key with only the scopes you need, then configure environment variables on a trusted server or in a local quantitative program. Never put the Key in source code, browser pages, logs, or a WS URL.
Set API_BASE to the API root of your actual deployment, without a trailing slash. This guide does not assume an online address for you.
Store FF_API_KEY in a secure environment variable or secret manager, and set ACCEPT_LANGUAGE to zh-CN, zh-TW, or en.
Call a minimal read-only endpoint and inspect the HTTP status, problem+json errors, and RateLimit response headers before expanding the integration.
Example responses illustrate JSON shapes, not live market data, performance, or returns. Assess production availability through your own deployment and health checks.
Authentication and API Key scopes
Open endpoints use Authorization: Bearer <API-Key>. Keys start with ffk_live_ or ffk_test_. The plaintext is shown once at creation; the platform stores only its hash and prefix. The Quant entitlement api.enabled is checked again on every authentication.
A Key can have a CIDR IP allowlist. Grant minimum scopes, keep environment-specific Keys separate, and revoke a Key when it is exposed or no longer used. Anonymous endpoints neither need nor should receive a Key.
API Key scopes
Scope
Allowed operations
read:market
Public coin state, radar lists, calibration, and market realtime channel tokens.
read:checkup
Read checkup archives owned by the Key's user; never reports owned by another user.
read:signals
Official signal lists and sig:{stream_code} realtime channels.
webhooks:manage
Create, list, and revoke Webhook endpoints and read their deliveries.
export:data
Market-state and signal CSV exports; the Key's user must also have data.export=full.
Forged, expired, revoked, or IP-rejected credentials return 401/403. Insufficient scope returns 403 FORBIDDEN; losing the API entitlement returns 402 ENT_FEATURE_LOCKED. /v1/me/api-keys creation, listing, and revocation use the user session, not another API Key.
Cookie sessions, CSRF, and idempotency
Browser Cookie session writes use double-submit validation: X-CSRF-Token must match the ff_csrf Cookie. Obtain a CSRF token first, then send it to session write endpoints such as API Key creation. Login rotates the token, so always use the latest value.
cookies.txt and CSRF_TOKEN are local placeholders. Requests authorized with an API Key generally skip CSRF. The Cookie refresh-token flow is the documented exception; do not generalize that exception to every Bearer request.
Idempotent writes
Designated writes such as orders, payments, subscription changes, and withdrawals require a client-generated UUID in Idempotency-Key. A scope and Key pair is retained for 24 hours: replaying the same request returns the first response. Never reuse a Key with a different body.
HTTP
Idempotency-Key: ${IDEMPOTENCY_KEY}
The same Key with a different request returns 422 IDEMPOTENCY_KEY_REUSED. If the first request is still running, the response is 409 IDEMPOTENCY_IN_PROGRESS. Send the header only to endpoints that explicitly require it; do not turn read-only calls into writes.
REST errors: application/problem+json
Success responses return a resource or list directly, without a {code,data} wrapper. Errors follow RFC 9457. Clients should inspect both HTTP status and the stable code. title and detail may be localized through Accept-Language and must not drive program logic.
Missing, invalid, or revoked authentication. Check credentials instead of retrying indefinitely.
FORBIDDEN
403
Insufficient scope, IP access, or resource permission. Fix authorization rather than varying the request.
ENT_FEATURE_LOCKED / ENT_QUOTA_EXCEEDED
402
The feature is not entitled or quota is exhausted. Inspect entitlement or reset information in meta.
NOT_FOUND / MARKET_COIN_NOT_FOUND
404
The resource or coin does not exist. Check path parameters and symbols.
VALIDATION_FAILED
422
Invalid parameters, body, cursor, or time window. Correct the fields identified in meta.errors.
IDEMPOTENCY_IN_PROGRESS
409
The same idempotent request is still running. Query later or retry with the original Key.
RATE_LIMITED
429
A rate limit was reached. Honor Retry-After and reduce concurrency or request frequency.
DEPENDENCY_UNAVAILABLE
503
A dependency is temporarily unavailable. Retry with bounded backoff; never fabricate successful data.
For 422 VALIDATION_FAILED, meta.errors is an array of {field,code,message}. Use request_id when contacting support. Errors deliberately omit SQL, stack traces, raw third-party responses, and secrets.
Rate limits, pagination, time, and amounts
Rate limits
API Key REST calls use a 60-second api.rate_per_min token bucket keyed by the Key, so changing IP does not change the bucket. Anonymous public endpoints have separate IP buckets with potentially different limits. Charged requests may return RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset after either success or a business error; 429 also includes Retry-After.
For regular lists, limit defaults to 20 and has a maximum of 100. When next_cursor is non-null, pass it back unchanged as cursor. Cursors are opaque: do not decode or construct them. Radar and predictions have their own schema limits, and short lists or CSV responses are not necessarily paginated.
Time input and output use ISO 8601 UTC, with Z on output. CSV windows are [from,to) and can span at most 31 days. JSON fields use snake_case. Missing values remain null and are never replaced with zero.
Numeric representation
Data kind
Rule
Platform ledger amounts
Decimal strings such as 39.000000. Never use binary floating point for amount calculations.
Trading prices and notional values
Trading-related amounts and prices use strings; display-only market fields may use number when the schema says so.
_pct / _ratio / _score
These suffixes mean percentage, decimal ratio, and score respectively. A _pct value of 12.5 means 12.5%; a score is not a probability.
Time
ISO 8601 UTC, for example 2026-10-28T00:00:00Z. Business days start at 00:00 UTC.
Per-coin checkups
The anonymous quick check returns six fields. It requires no login, consumes no full-checkup quota, and writes no archive. A separate IP limit may apply. sentence is generated in the requested language.
GET
/v1/public/checkup/symbols/{symbol}
operationId
checkup_public_symbol_get
Authentication
Anonymous; a separate IP rate limit may apply
Success response
200 · application/json
Request parameters
API field table: GET /v1/public/checkup/symbols/{symbol}
Field
Location
Type
Requirement
Constraints
Description
symbol
path
string
Required
—
Canonical engine coin symbol, for example BTCUSDT.
Response fields
API field table: GET /v1/public/checkup/symbols/{symbol}
Field
Type
Requirement
Constraints
Description
as_of
string
Required
—
Cutoff of the data visible in this response; may be null.
grade
string
Required
—
Checkup grade A–E; not calculated by the client.
sentence
string
Required
—
One-sentence checkup summary in the requested language.
stage
string
Required
—
Engine lifecycle stage code.
stale
boolean
Required
—
Whether the data is not current. true should be visible to users.
symbol
string
Required
—
Canonical engine coin symbol, for example BTCUSDT.
The JSON above is a shape example, not BTC's current grade or stage. Use the actual response's as_of and stale values to communicate freshness.
Checkup archives and full checks
A Key with read:checkup can access only its user's reports: read an archive by report_id; get the coin's latest archive through GET /v1/public/checkups/{symbol}/latest; or run a full check through GET /v1/public/checkups/{symbol}?depth=full. pro=true requests professional fields; backend entitlements and content still determine visibility. locked, sections, and pro cannot be unlocked by the client.
GET
/v1/public/checkup/reports/{report_id}
operationId
checkup_public_report_get
Authentication
Bearer API Key · read:checkup
Success response
200 · application/json
Request parameters
API field table: GET /v1/public/checkup/reports/{report_id}
Field
Location
Type
Requirement
Constraints
Description
report_id
path
string
Required
uuid
Report UUID. The open archive endpoint also verifies ownership.
pro
query
boolean
Optional
default=false
Whether to request professional-mode fields; defaults to false.
Response fields
API field table: GET /v1/public/checkup/reports/{report_id}
Field
Type
Requirement
Constraints
Description
anomaly_count
integer
Required
—
Number of anomalous items in the report or section.
as_of
string
Optional · Nullable
date-time
Cutoff of the data visible in this response; may be null.
cycle_at
string
Optional · Nullable
date-time
Engine cycle that produced this data.
depth
string
Required
quick | full
Checkup depth: quick or full.
formula_version
string
Required
—
Formula version used to produce the report.
grade
string
Required
—
Checkup grade A–E; not calculated by the client.
locked
boolean
Required
—
Whether this report is locked by entitlements.
long_risk
integer
Required
—
Long-risk score, not a probability.
meta
object
Required
—
Additional endpoint-defined metadata object.
pro
ProOut
Optional · Nullable
—
Whether to request professional-mode fields; defaults to false.
report_id
string
Optional · Nullable
uuid
Report UUID. The open archive endpoint also verifies ownership.
sections
array<SectionOut>
Required
—
Checkup report sections, each with ready, empty, or locked status.
short_risk
integer
Required
—
Short-risk score, not a probability.
source
string
Required
market | gateway
Data source or CSV record granularity.
stage
string
Required
—
Engine lifecycle stage code.
stale
boolean
Required
—
Whether the data is not current. true should be visible to users.
symbol
string
Required
—
Canonical engine coin symbol, for example BTCUSDT.
Anonymous and session predictions live at /v1/coins/{symbol}/predictions; API Key predictions live at /v1/public/coins/{symbol}/predictions and require read:market. For both, limit defaults to 50 with a maximum of 200, and viewer entitlements determine delay. Pass a non-null next_cursor back unchanged as cursor.
Radar or prediction type, depending on the endpoint.
direction
string
Required · Nullable
—
Prediction direction.
status
string
Required
open | hit | failed | expired | corrupt
Current resource status.
target_lo
number
Required · Nullable
—
Lower target bound, or null when unavailable.
target_hi
number
Required · Nullable
—
Upper target bound, or null when unavailable.
invalid_price
number
Required · Nullable
—
Prediction invalidation price, or null when unavailable.
resolve_price
number
Required · Nullable
—
Prediction resolution price, or null while unresolved.
opened_at
string
Required · Nullable
ISO 8601 UTC
When the prediction opened.
deadline
string
Required · Nullable
ISO 8601 UTC
Prediction deadline.
resolved_at
string
Required · Nullable
ISO 8601 UTC
When the prediction reached a terminal state, or null while unresolved.
era
string
Required
—
Engine era that produced the prediction.
The response card's OpenAPI is authoritative for the items element type. The table above reflects the platform market service's actual serialization. Prediction statuses are open, hit, failed, expired, and corrupt. Missing targets and results remain null. This is a prediction mirror, not a promise of returns.
Market data, signals, proofs, and CSV
These cards expand the real OpenAPI contracts directly. public in a path does not mean anonymous: check each endpoint's authentication row. When internal keys of free-form objects such as state, venues, and meta are not fixed by the schema, this page does not invent a field table for them.
GET
/v1/public/coins/{symbol}
operationId
market_public_coin_get
Authentication
Bearer API Key · read:market
Success response
200 · application/json
Request parameters
API field table: GET /v1/public/coins/{symbol}
Field
Location
Type
Requirement
Constraints
Description
symbol
path
string
Required
—
Canonical engine coin symbol, for example BTCUSDT.
Response fields
API field table: GET /v1/public/coins/{symbol}
Field
Type
Requirement
Constraints
Description
as_of
string
Optional · Nullable
—
Cutoff of the data visible in this response; may be null.
base_asset
string
Required
—
Base asset code.
delayed_minutes
integer
Optional
default=0
Minutes by which this view trails realtime data.
delisted
boolean
Required
—
Whether the coin has been delisted.
display_name
string
Required
—
Coin name for display.
first_seen_at
string
Optional · Nullable
—
When the platform first observed the coin.
last_seen_at
string
Optional · Nullable
—
When the platform most recently observed the coin.
listing_date
string
Optional · Nullable
—
Listing date, or null when unknown.
prefix_multiplier
integer
Optional · Nullable
—
Notional multiplier represented by the symbol prefix, or null.
primary_venue
string
Required
—
Current primary data venue.
quote_asset
string
Optional · Nullable
—
Quote asset code, or null when unknown.
state
object
Optional · Nullable
—
Latest or delayed coin-state object; its internal fields are not fixed by the current schema.
symbol
string
Required
—
Canonical engine coin symbol, for example BTCUSDT.
venues
array<object>
Optional
—
Array of venue coverage objects.
GET
/v1/public/radar/lists
operationId
market_public_radar_lists
Authentication
Bearer API Key · read:market
Success response
200 · application/json
Request parameters
API field table: GET /v1/public/radar/lists
Field
Location
Type
Requirement
Constraints
Description
type
query
string
Required
—
Radar or prediction type, depending on the endpoint.
limit
query
integer
Optional
default=50 · 1..200
Maximum entries in this page. See constraints for the default and upper bound.
Response fields
API field table: GET /v1/public/radar/lists
Field
Type
Requirement
Constraints
Description
as_of
string
Optional · Nullable
—
Cutoff of the data visible in this response; may be null.
delayed_minutes
integer
Optional
default=0
Minutes by which this view trails realtime data.
items
array<object>
Required
—
Resources in this page; see the type column for the element type.
type
string
Required
—
Radar or prediction type, depending on the endpoint.
GET
/v1/public/calibration
operationId
market_public_calibration
Authentication
Bearer API Key · read:market
Success response
200 · application/json
Request parameters
API field table: GET /v1/public/calibration
Field
Location
Type
Requirement
Constraints
Description
type
query
string
Optional · Nullable
—
Radar or prediction type, depending on the endpoint.
Response fields
API field table: GET /v1/public/calibration
Field
Type
Requirement
Constraints
Description
items
array<CalibrationItemOut>
Required
—
Resources in this page; see the type column for the element type.
GET
/v1/public/signals
operationId
signals_public_list
Authentication
Bearer API Key · read:signals
Success response
200 · application/json
Request parameters
API field table: GET /v1/public/signals
Field
Location
Type
Requirement
Constraints
Description
status
query
string
Optional · Nullable
open | closed
Current resource status.
symbol
query
string
Optional · Nullable
length 0..64
Canonical engine coin symbol, for example BTCUSDT.
limit
query
integer
Optional
default=20 · 1..100
Maximum entries in this page. See constraints for the default and upper bound.
cursor
query
string
Optional · Nullable
length 0..512
Opaque cursor returned by the previous page.
Response fields
API field table: GET /v1/public/signals
Field
Type
Requirement
Constraints
Description
items
array<SignalItem>
Required
—
Resources in this page; see the type column for the element type.
next_cursor
string
Optional · Nullable
—
Cursor for the next page, or null when no next page exists.
GET
/v1/public/signals/{stream}
operationId
signals_public_stream_list
Authentication
Bearer API Key · read:signals
Success response
200 · application/json
Request parameters
API field table: GET /v1/public/signals/{stream}
Field
Location
Type
Requirement
Constraints
Description
stream
path
string
Required
length 1..32
Official signal stream stream_code.
status
query
string
Optional · Nullable
open | closed
Current resource status.
symbol
query
string
Optional · Nullable
length 0..64
Canonical engine coin symbol, for example BTCUSDT.
limit
query
integer
Optional
default=20 · 1..100
Maximum entries in this page. See constraints for the default and upper bound.
cursor
query
string
Optional · Nullable
length 0..512
Opaque cursor returned by the previous page.
Response fields
API field table: GET /v1/public/signals/{stream}
Field
Type
Requirement
Constraints
Description
items
array<SignalItem>
Required
—
Resources in this page; see the type column for the element type.
next_cursor
string
Optional · Nullable
—
Cursor for the next page, or null when no next page exists.
POST
/v1/public/proofs/verify
operationId
signals_public_proofs_verify
Authentication
Anonymous; a separate IP rate limit may apply
Success response
200 · application/json
Request body fields
API field table: POST /v1/public/proofs/verify
Field
Type
Requirement
Constraints
Description
day
string
Optional · Nullable
date
UTC date of the proof batch.
leaf_hash
string
Optional · Nullable
length 64..64 · ^[0-9a-f]{64}$
64-character lowercase hexadecimal leaf hash to verify.
signal_id
string
Optional · Nullable
uuid
UUID of the signal to verify.
Response fields
API field table: POST /v1/public/proofs/verify
Field
Type
Requirement
Constraints
Description
day
string
Optional · Nullable
—
UTC date of the proof batch.
found
boolean
Required
—
Whether a matching proof item was found.
item_id
string
Optional · Nullable
—
Proof item identifier.
item_type
string
Optional · Nullable
—
Proof item type.
leaf_hash
string
Optional · Nullable
—
64-character lowercase hexadecimal leaf hash to verify.
leaf_matches_current
boolean
Optional · Nullable
—
Whether the supplied leaf matches the current record.
matches_root
boolean
Optional · Nullable
—
Whether the leaf and path compute to the batch root.
ots
object
Optional · Nullable
—
OpenTimestamps status object; may be null while pending or unavailable.
path
array<object>
Optional · Nullable
—
Merkle verification path.
root
string
Optional · Nullable
—
Merkle root for this UTC day's batch.
Historical state and signal CSV exports
Both CSV endpoints require export:data and data.export=full. A window can span at most 31 days and a file at most 100,000 data rows. Larger exports return 422 rather than silently truncating. Responses are text/csv with private, no-store and are suitable for streaming to storage.
GET
/v1/public/market/export/states.csv
operationId
market_public_states_csv_export
Authentication
Bearer API Key · export:data; data.export=full also required
Success response
200 · text/csv
Request parameters
API field table: GET /v1/public/market/export/states.csv
Field
Location
Type
Requirement
Constraints
Description
symbol
query
string
Required
length 1..64
Canonical engine coin symbol, for example BTCUSDT.
The market CSV header order above was checked against backend STATE_COLUMNS. Nested objects are compact JSON in cells, and spreadsheet formula prefixes in text are escaped. Empty cells mean missing data and must not be filled with zero. Signal CSV uses backend SIGNAL_COLUMNS and is exported through /v1/public/signals/export.csv.
Webhook endpoints, signatures, and retries
Webhook management uses webhooks:manage, not a Cookie session. The secret in the creation response appears only once; store it immediately in a secret manager. Endpoints must be allowed public HTTPS URLs and cannot contain usernames or passwords.
POST
/v1/me/webhooks
operationId
notify_webhooks_create
Authentication
Bearer API Key · webhooks:manage
Success response
201 · application/json
Request body fields
API field table: POST /v1/me/webhooks
Field
Type
Requirement
Constraints
Description
url
string
Required
length 8..2000
Public HTTPS receiver URL for the Webhook.
Response fields
API field table: POST /v1/me/webhooks
Field
Type
Requirement
Constraints
Description
created_at
unspecified
Required
—
Resource creation time in ISO 8601 UTC.
id
unspecified
Required
—
Resource UUID.
secret
unspecified
Required
—
Webhook signing secret, returned only once at creation.
Do not add newlines, reorder, or reserialize the raw request body. The primary signed material is id.timestamp.body. Compute HMAC-SHA256 with the endpoint secret and use constant-time comparison with v1=<hex> in FF-Webhook-Signature. The timestamp window is five minutes. X-FF-Signature signs only the raw body for compatibility; new integrations should prioritize the primary signature.
The example reads its secret from FF_WEBHOOK_SECRET and contains no real secret. Production code should also reject missing or malformed headers, cap raw body size, and parse JSON only after verification succeeds.
Delivery and retries
Only a 2xx receiver response counts as success. After the initial failure, retries occur after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours, and 24 hours: seven attempts in total. The delivery is then marked failed. An endpoint with no success for three consecutive days is disabled and its owner is notified.
Deduplicate on FF-Webhook-Id and event id, and make receivers idempotent. The same event succeeds at most once per endpoint. Only events that occur after endpoint creation are delivered. Read delivery states through GET /v1/me/webhooks/{endpoint_id}/deliveries and revoke an endpoint with DELETE /v1/me/webhooks/{endpoint_id}.
WebSocket connections and subscriptions
Realtime streams use Centrifugo. First exchange the API Key over HTTP for a 600-second connection JWT, then obtain a 600-second subscription JWT for each private channel. Finally connect to the Centrifugo WebSocket address supplied by your deployment. The long-lived API Key appears only in the HTTP Authorization header.
POST
/v1/public/realtime/token
operationId
signals_public_realtime_token_create
Authentication
Bearer API Key · read:market or read:signals
Success response
200 · application/json
Response fields
API field table: POST /v1/public/realtime/token
Field
Type
Requirement
Constraints
Description
allowed_channels
array<string>
Required
—
Channel classes granted to this Key; does not replace per-channel subscription tokens.
expires_in
integer
Required
—
Issued lifetime of the short-lived JWT, currently 600 seconds.
token
string
Required
—
Short-lived Centrifugo JWT, not the long-lived API Key.
GET
/v1/public/realtime/subscribe-token
operationId
signals_public_realtime_subscribe_token_get
Authentication
Bearer API Key · read:market or read:signals
Success response
200 · application/json
Request parameters
API field table: GET /v1/public/realtime/subscribe-token
Field
Location
Type
Requirement
Constraints
Description
channel
query
string
Required
length 1..160
Full Centrifugo channel to subscribe to.
Response fields
API field table: GET /v1/public/realtime/subscribe-token
Field
Type
Requirement
Constraints
Description
allowed_channels
array<string>
Required
—
Channel classes granted to this Key; does not replace per-channel subscription tokens.
channel
string
Required
—
Full Centrifugo channel to subscribe to.
expires_in
integer
Required
—
Issued lifetime of the short-lived JWT, currently 600 seconds.
token
string
Required
—
Short-lived Centrifugo JWT, not the long-lived API Key.
Each Key can hold at most 10 unexpired connection-token leases; subscription tokens do not consume these leases. Obtain a new connection token after the old connection expires rather than rotating early. This is an issuance-side lease limit, not a count of real online connections.
The example reuses the repository's @ff/realtime package and runs on a trusted server or local program. A revoked Key cannot obtain new tokens. Already-issued JWTs are stateless and can live until their original exp (600 seconds), so immediate disconnection is not guaranteed. user:* and admin:* channels are not available to API Keys.
Current open endpoint directory
This table enumerates real OpenAPI operations under /v1/public at build time. The specification is authoritative for operationIds, methods, and paths. New public endpoints enter the directory when the shared specification is regenerated; authentication metadata still needs review against backend routes.
API endpoint directory
Method
Path
Group
Authentication
operationId
GET
/v1/public/checkup/reports/{report_id}
Checkups
Bearer API Key · read:checkup
checkup_public_report_get
GET
/v1/public/checkup/symbols/{symbol}
Checkups
Anonymous; a separate IP rate limit may apply
checkup_public_symbol_get
GET
/v1/public/checkups/{symbol}
Checkups
Bearer API Key · read:checkup
checkup_public_symbol_full
GET
/v1/public/checkups/{symbol}/latest
Checkups
Bearer API Key · read:checkup
checkup_public_symbol_latest
GET
/v1/public/calibration
Market data
Bearer API Key · read:market
market_public_calibration
GET
/v1/public/coins/{symbol}
Market data
Bearer API Key · read:market
market_public_coin_get
GET
/v1/public/coins/{symbol}/predictions
Market data
Bearer API Key · read:market
market_public_coin_predictions
GET
/v1/public/market/export/states.csv
Market data
Bearer API Key · export:data; data.export=full also required
market_public_states_csv_export
GET
/v1/public/radar/lists
Market data
Bearer API Key · read:market
market_public_radar_lists
GET
/v1/public/affiliates/{slug}
Other public resources
Anonymous; a separate IP rate limit may apply
growth_public_affiliates_get
GET
/v1/public/affiliates/{slug}/bot
Other public resources
Anonymous; a separate IP rate limit may apply
growth_public_affiliate_bot_get
GET
/v1/public/live/certifications/{token}
Other public resources
Anonymous; a separate IP rate limit may apply
live_public_certification_get
GET
/v1/public/proofs
Public proofs
Anonymous; a separate IP rate limit may apply
signals_public_proofs_list
GET
/v1/public/proofs/{day}
Public proofs
Anonymous; a separate IP rate limit may apply
signals_public_proofs_get
POST
/v1/public/proofs/verify
Public proofs
Anonymous; a separate IP rate limit may apply
signals_public_proofs_verify
GET
/v1/public/realtime/subscribe-token
Realtime tokens
Bearer API Key · read:market or read:signals
signals_public_realtime_subscribe_token_get
POST
/v1/public/realtime/token
Realtime tokens
Bearer API Key · read:market or read:signals
signals_public_realtime_token_create
GET
/v1/public/signals
Signals
Bearer API Key · read:signals
signals_public_list
GET
/v1/public/signals/{stream}
Signals
Bearer API Key · read:signals
signals_public_stream_list
GET
/v1/public/signals/export.csv
Signals
Bearer API Key · export:data; data.export=full also required
signals_public_csv_export
Related management and session endpoints
API Key management, predictions, and Webhooks are not all under /v1/public, so they are listed separately to preserve their actual paths.
Admin, internal ingest, node control-plane, and management endpoints omitted here are not open APIs. Inclusion in this directory does not mean an external production hostname has passed acceptance or is reachable from your network.