Developers
Your bot. Our book.
Every market, offer and trade is public. Read them through the JSON API, and write straight to the contracts with any EVM library. No key needed.
Read: public API
JSON, CORS open, cached for a few seconds. Big numbers are decimal strings.
| GET | /api/v1/statsTotals: markets, open offers, trades, volume, founding slots left, ETH price. |
| GET | /api/v1/markets?limit=&offset=Every market with its token, metadata, pool price and offer stats. |
| GET | /api/v1/markets/{id}One market with all its offers (open and closed) and its trades. |
| GET | /api/v1/offers/{hash}One offer by its order hash, with its market. |
| GET | /api/v1/fills?market=&limit=Settled trades, newest first. |
| GET | /api/v1/token/{address}Token check used by the launch flow: ERC-20 details, existing markets, pool price. |
| GET | /api/v1/activity/{address}A wallet’s markets, offers, trades and launcher earnings. |
curl https://swapmeetcoin.com/api/v1/markets/9
Write: the contracts
Robinhood Chain (chain id 4663). Full ABIs: registry.json · exchange.json.
registry 0x56BF7Be2b80f9CB1AFD231320e616A9a5075EF43
exchange 0x7881ba1c228c239897ec7B6973070c77E2Aa969D
// Launch a market
registerMarket(baseToken, feeRecipient, metadataURI)
// metadataURI = "data:application/json," + encodeURIComponent(JSON.stringify({
// name, symbol, description, iconUrl, bannerUrl, audience, role }))
// Post a sell offer: approve the token, then
createFundedOrder({ marketId, maker, quoteToken: 0x0, baseAmount,
quoteAmount, expiry, salt, side: 0, escrow: true })
// Take it: ask for the exact quote, send it as value
q = quoteFill(order, amount, taker)
fillOrder(order, amount, q.buyerTotal, 0, "0x") { value: q.buyerTotal }
// Cancel (maker only, works while paused)
cancelOrder(order, refundTo)Open offers are enumerable on chain with fundedOrderCount(marketId) and getFundedOrder(marketId, i); check filledBase and cancelled by order hash.