List cross-venue market clusters.
const url = 'https://data.predictefy.com/v1/clusters?sort=spread&limit=20';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://data.predictefy.com/v1/clusters?sort=spread&limit=20' \ --header 'Authorization: Bearer <token>'DARK behind READS_ENABLE_CLUSTERS. The indexed data page is fetched before the exact total. A cold or ceiling-expired total returns null immediately while one process-wide background count warms the cache under a three-second budget. meta.totalUnavailable explains the missing total, and hasMore remains exact because the query fetched one lookahead row.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”A page of clusters; an expensive total may be explicitly absent.
object
object
Optional cluster-page metadata. asOf is present only when page.total is served stale and records that exact count’s last successful computation time; totalUnavailable is present if and only if page.total is null; live/provenance identify a live discrepancy overlay.
object
Last successful exact-count time, present only while that total is stale.
Machine-readable explanation for an intentionally absent exact total.
object
Predictefy-live — served from the live WebSocket hub or live order book.
object
Total matching rows, or null when the total was NOT computed — never a fabricated 0. The data page is the product and the count is metadata, so routes may warm an exact total off-request or abandon a count that exceeds its short budget while the page is still served. null is always accompanied by meta.totalUnavailable, which says why; use hasMore / nextCursor to walk the result set.
Whether another page exists. Determined by fetching one row beyond the requested limit, so it stays correct even when total is null.
Opaque cursor for the next page. Omitted on the final page.
Example
{ "meta": { "provenance": { "source": "predictefy-live" } }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}