Skip to main content
With White-Label your platform keeps its own login and its own brand. Your users never see a CabalSpy ID sign-in. You tell CabalSpy ID who your users are and which wallets they have, by your own user id, and you get their trades, PnL, profiles, leaderboards and trading competitions through the Data API. You build the UI. It works with the wallets your users already have, from Privy, Dynamic, your own wallet infrastructure or any other provider. No wallet connect, no signatures and no payment are needed to start.

Quickstart

Import users, show a profile, rank them and start a competition.

Inbound URL

Let Privy, Dynamic or your backend send new sign-ups automatically.

Competitions

Trading competitions between your users, ranked on real trades.

How it works

1

Create an instance and an API key

Create a CabalSpy ID instance in the API Dashboard and enable CabalSpy ID for your API key, exactly as described in Authentication. White-Label uses the same key, envelope, errors and rate limit as the rest of the Data API.
2

Add your users

Send each user with your own user id and at least one wallet: one by one with Create or update a user, up to 1,000 at a time with Import, or automatically on sign-up through the inbound URL.
3

Read their data

From then on every trade of their wallets is tracked. Read a complete profile in one call, rank your users on the platform leaderboard, and use every other Data API endpoint with your user id in place of csid_id.

Concepts

Platform users and managed accounts

A user you add is a platform user. For each one CabalSpy ID keeps a managed account that belongs to your instance:
  • It has no CabalSpy ID login of its own and never appears on CabalSpy ID’s public pages. profile_url is always null.
  • Consent and a plan seat for your instance are implied: your platform informs its users. It is counted against your plan’s user limit like a signed-in user.
  • Through the API you can verify its wallets, connect X and Telegram, write theses in its name and apply for the KOL badge.
  • The person can later take it into a normal CabalSpy ID with a claim link, if you allow it.
Every action you take for a platform user is recorded in an audit log with your instance.

external_id

external_id is your id of the user, for example the id from your database, from Privy (did:privy:...) or from Dynamic. It is 1 to 128 printable ASCII characters without spaces, and unique within your instance. Each platform user also has a csid_id, the CabalSpy ID account id. Use external_id everywhere: on the /v1/platform-users endpoints, and on every other Data API endpoint in place of csid_id, see external_id in the Data API. A key only ever reaches the platform users of its own instance.

Every user has a wallet

A platform user needs at least one wallet. Creating a user without one is refused with wallet_required, and the last wallet of a user cannot be removed (last_wallet). Delete the user instead. A wallet is an object with an address and optional chains and source, or just the address as a string: A request can carry up to 10 wallets. A user can hold up to 5 Solana and 5 EVM wallets.

Unverified and verified wallets

Wallets you send are unverified: you vouch that they belong to the user. They are tracked and count for data, profiles and leaderboards straight away, unless you set wallet_trust to verified_only. A wallet becomes verified with the same on-chain payment verification as on the CabalSpy ID website: the user sends a tiny, unique amount from the wallet. You start it with Verify a wallet. Verification is optional and works as a trust badge. Whoever verifies an address owns it. If another account verifies an address that one of your users has as an unverified wallet, that copy stops counting. Every wallet in a user object carries a status: counts is true for verified and active.
Wallet lookup and the address parameter of Profile only find payment-verified wallets. Find a platform user by external_id instead.

Settings

Your instance has a few White-Label settings. Read and change them with Settings, or in the dashboard on the instance’s White-label tab. The dashboard always saves all of them together, so after a save there claim_links is set explicitly and no longer follows white_label. A claim link lets a person take their managed account into their own, normal CabalSpy ID. They sign in on CabalSpy ID with their own account and confirm. Then:
  • their payment-verified wallets move to their CabalSpy ID; unverified wallets do not,
  • X and Telegram come along if their CabalSpy ID has none yet, and so do their theses and Trade Feed,
  • your instance keeps access to them, the user’s csid_id becomes the id of their own account and claimed turns true,
  • you receive the platform_user.claimed webhook.
After the claim the person manages the account themselves. Changing it through the API returns account_claimed, and deleting the user only removes the link to your platform.

Plan limits

White-Label is available on every plan. The plan sets how many users you can have.
  • Live instances count platform users against the user limit of your domain’s plan, together with everyone who signed in with CabalSpy ID. When the limit is reached, new users are refused with plan_user_limit (existing users can still be updated).
  • Sandbox and development instances can hold 25 platform users. Go live with a verified domain for your plan’s limit.

Webhooks

Platform users trigger the regular webhooks of your instance, plus platform_user.created, platform_user.claimed, platform_user.x_connected, wallet.added and verification.expired. See White-Label events.

Endpoints