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_urlis 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.
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 withwallet_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 setwallet_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.
Claim links
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_idbecomes the id of their own account andclaimedturns true, - you receive the
platform_user.claimedwebhook.
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, plusplatform_user.created, platform_user.claimed, platform_user.x_connected, wallet.added and verification.expired. See White-Label events.

