Skip to main content
The Data API returns the profiles, verified wallets and trading data of the people who signed in to your platform with CabalSpy ID. It follows the same conventions as the CabalSpy API: the same envelope, the same error format and the same blockchain, address and period parameters. Wallet statistics are computed exactly like the CabalSpy API, so a wallet shows the same numbers on both.

Base URL

Authentication

The Data API uses the same API key as the CabalSpy API. In the API Dashboard, open the API keys page and switch on CabalSpy ID for the key you want to use. A key without it is refused with product_not_enabled. Pass the key as an Authorization Bearer header or as the apiKey or api_key query parameter, the same as on the CabalSpy API.
Your API key is a secret. Call the Data API from your backend, never from code that ships to the browser.

Instance

A key works with one CabalSpy ID instance at a time. If your account has a single instance, nothing else is needed. With several instances, add instance=<client_id> to every request, otherwise the API answers instance_required and lists your instances.
string
The Instance ID (csid_...) to work with. Only needed when your account has several instances.

Scope: who a key can see

A key sees the users of its instance only:
  • Live instances: the users who signed in to any live app on your registrable domain, within your plan’s user limit.
  • Development and sandbox instances: the users who signed in to that app.
Users beyond your plan’s user limit, users who removed access to your app and users you blocked are not visible. Requests for them return profile_not_found or wallet_not_found. On the Enterprise plan, add scope=global to see every CabalSpy ID user. Other plans get scope_not_allowed.
string
default:"instance"
instance or global. global requires the Enterprise plan.

Response format

Every successful response has the same envelope.
Success
pagination is only present on list endpoints. meta.cached and meta.cache_age_seconds show whether the data came from the short-lived cache. Errors carry a machine-readable code, a message, the request id and a link to the error reference.
Error

Pagination

List endpoints are cursor based. Read next_cursor from the response and pass it back as cursor to get the next page. When next_cursor is null, or has_more is false, you have reached the end.

Rate-limit headers

Every authenticated response carries the limit of your plan. Above the limit the API answers 429 rate_limit_exceeded with Retry-After: 1. See Plans and limits.

Common parameters

Endpoints

You can try every endpoint in the sandbox in the dashboard on the CabalSpy ID tab.