DestinationTag set to the outcome index and SourceTag set to counsel’s attribution tag. counsel constructs the unsigned Payment and shows you the projected odds. You sign it in your own wallet and submit it. There is no deposit step and no counsel-side key in the path. The flow is non-custodial end to end.
This page walks the canonical developer path: GET /markets to find a market and outcome, then GET /markets/:id/bet-intent to get an unsigned Payment plus the projected odds after your stake, then sign and submit.
Find a market and outcome
List open markets and pick one. Each market carries its outcomes; the outcome index is what goes in You can also fetch a single market by id with
DestinationTag.GET /markets/:id.Fetch a bet intent
Call The unsigned Payment is addressed to the market’s pool account, with
GET /markets/:id/bet-intent with your account, the outcome index, and the amount in XRP. The response gives you an unsigned XRPL Payment ready to sign, plus the projected odds for that outcome after your stake is added to the pool.The XRPL address that will sign and send the bet. Used to address the unsigned Payment.
The outcome index. This becomes the
DestinationTag on the Payment.Your stake in XRP.
DestinationTag set to your outcome index and SourceTag set to counsel’s attribution tag.The projected odds are indicative. counsel is parimutuel, so every later bet from any participant shifts the line until
bet_cutoff. The split is computed from the actual pool state at close, not from the figure shown when you signed. See Odds and Payouts.Sign in your own wallet
Sign the unsigned Payment with your own key. counsel never sees your secret. In the app this is Xaman, GemWallet, or Crossmark; for a bot it is your client signing with its own seed.
The whole flow with counsel-js
placeBet collapses the four steps into one call: it fetches the unsigned intent, signs it with the seed you pass, and submits it. The seed stays on your machine.
Non-custodial signing
counsel constructs the Payment but never holds it. The signing step happens entirely in your wallet or your client, with your key.counsel builds, you sign
The bet-intent endpoint returns an unsigned Payment. Signing and submitting are yours. counsel does not relay or proxy your signed transaction.
Pools are multisig
Stakes land in per-market accounts secured by a multisig SignerList with the master key disabled. No single key can move funds.
Everything is on-chain
Your bet is a tagged Payment in the pool account’s transaction history. Anyone can index it and recompute the pool state.
Bots are first-class
A bot is an ordinary XRPL client: read a market, fetch an unsigned intent, sign with its own key, submit. Same path as the app.