https://app.robin.markets/api/v1. There is no auth and CORS is open, so every call below works from the browser or a server.
All token and USDC amounts are 6-decimal integer strings (
"1500000" =
1.5). APY values are plain numbers in percent (6 = 6.00%). A
conditionId is the Polymarket condition id (bytes32 hex) and is the primary
key everywhere.1
Index the market
POST /markets is the only mutating call in the API. It indexes any conditionIds Robin doesn’t know yet — pulling them from Polymarket — and returns the same { markets, notFound } shape as GET /markets, so the response is directly usable.You can pass any Polymarket conditionId, whether or not Robin has seen it before.Reads (
GET /markets, GET /markets/{conditionId}) are pure — they never write. A 404 or a notFound entry just means “not indexed yet”. Call POST /markets once to index it from Polymarket, then read.2
Read the APY headline
Each entry in the returned
markets[] carries an APY breakdown. The headline fields are numbers in percent:The total folds three Robin bonuses on top of the organic base: the 6% guarantee floor, the +1% matching bonus for the minority (pool-balancing) side, and the +1% points boost. Points are abstracted away — they appear only as a line in the APY response, never as something you handle directly.Use
apy.min and apy.max for user-friendly apy display.The three bonuses are an off-chain programme run by Robin: they are computed at withdrawal and paid in a single USDC transaction from Robin’s operator wallet, separate from the on-chain withdrawal. The vault itself pays only the organic yield (
apy.base).3
Read the APY headline
Each entry in the returned
markets[] carries an APY breakdown. The headline fields are numbers in percent:The total folds three Robin bonuses on top of the organic base: the 6% guarantee floor, the +1% matching bonus for the minority (pool-balancing) side, and the +1% points boost. Points are abstracted away — they appear only as a line in the APY response, never as something you handle directly.Use
apy.min and apy.max for user-friendly apy display.The three bonuses are an off-chain programme run by Robin: they are computed at withdrawal and paid in a single USDC transaction from Robin’s operator wallet, separate from the on-chain withdrawal. The vault itself pays only the organic on-chain yield (
apy.base).4
Quote a personalized stake
GET /quote projects the APY a specific wallet would earn for a given stake. Pass wallet, the conditionIds, and aligned yesAmounts / noAmounts (6-decimal strings).projectedApy breakdown for that wallet:5
Quote a personalized stake
GET /quote projects the APY a specific wallet would earn for a given stake. Pass wallet, the conditionIds, and aligned yesAmounts / noAmounts (6-decimal strings).projectedApy breakdown for that wallet:6
Let the user stake on-chain
Quoting is read-only. Actually staking means building and sending a deposit transaction from the user’s resolved wallet — the only on-chain step in this flow.The transport depends on the wallet kind (DepositWallet push vs. Safe proxy pull or push), and a fresh TWAP is required before the vault accepts the deposit. See Deposits for the full transaction-building walkthrough.
Next steps
API overview
Conventions, rate limits, and the full endpoint surface.
Deposits
Build and send the on-chain deposit transaction.
Wallets
Resolve the user’s Robin staking wallet before any read or write.