woopwoop

Objects

Every object the API sends and takes, field by field.

Amounts are in whole units (SOL, not lamports; coins, not raw units) unless a field says otherwise. Times are ISO 8601 strings, or Unix seconds where the type is an integer. A type "or null" is always present but can be null; an optional field can be left out.

Requests

LaunchRequest

A new coin. The same form as woop's launch page.

ts
type LaunchRequest = {
  wallet: string; // The creator. Signs and pays for the launch, and is credited as its creator
  name: string; // 1–32 characters
  symbol: string; // The ticker: 2–10 letters or numbers
  image: string; // From POST /uploads, or any https image URL (woop stores it)
  pair: string; // A pair's symbol or mint from GET /pairs
  description?: string; // Up to 280 characters
  banner?: string; // A 3:1 banner: from POST /uploads (kind banner) or an https URL
  links?: Links; // The coin's website and socials
  firstBuy?: string; // The creator's buy in the fair opening, in the pair token (e.g. "0.5")
  unlockDays?: number; // Days the creator's coins unlock over after graduation (default 10)
  cliffDays?: number; // Days after graduation before they start unlocking (default 0)
};
FieldTypeDescription
walletstringThe creator. Signs and pays for the launch, and is credited as its creator
namestring1–32 characters
symbolstringThe ticker: 2–10 letters or numbers
imagestringFrom POST /uploads, or any https image URL (woop stores it)
pairstringA pair's symbol or mint from GET /pairs
descriptionstringUp to 280 charactersoptional
bannerstringA 3:1 banner: from POST /uploads (kind banner) or an https URLoptional
linksLinksThe coin's website and socialsoptional
firstBuystringThe creator's buy in the fair opening, in the pair token (e.g. "0.5")optional
unlockDaysintegerDays the creator's coins unlock over after graduation (default 10)optional
cliffDaysintegerDays after graduation before they start unlocking (default 0)optional

Example

json
{
  "wallet": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "name": "Moon Cat",
  "symbol": "MCAT",
  "image": "https://zync-pad.b-cdn.net/coins/img/a9788d7c9762b17650551eb2.webp",
  "pair": "SOL",
  "description": "The cat that went to the moon.",
  "links": {
    "website": "https://mooncat.xyz",
    "x": "https://x.com/mooncat"
  },
  "firstBuy": "0.5"
}

Inside LaunchRequest. https only.

ts
type Links = {
  website?: string; // Website
  x?: string; // X profile
  telegram?: string; // Telegram
};
FieldTypeDescription
websitestringWebsiteoptional
xstringX profileoptional
telegramstringTelegramoptional

TradeRequest

A buy or a sell.

ts
type TradeRequest = {
  wallet: string; // The trader
  mint: string; // The coin
  side: 'buy' | 'sell'; // Buy or sell
  amount: string; // Buys: pair token to spend, fees included. Sells: coins to sell
  mode?: 'instant' | 'block'; // instant (default) fills now; block joins the open Fair Block
  slippageBps?: number; // Instant trades: the most the price may move, in basis points
  payWith?: 'pair' | 'sol'; // sol pays with SOL on a non-SOL pair, swapped in the same transaction (mainnet)
  ref?: string; // A promoter wallet: it earns 0.25% of the trade
};
FieldTypeDescription
walletstringThe trader
mintstringThe coin
sidebuy|sellBuy or sell
amountstringBuys: pair token to spend, fees included. Sells: coins to sell
modeinstant|blockinstant (default) fills now; block joins the open Fair Blockoptional
slippageBpsintegerInstant trades: the most the price may move, in basis pointsoptional
payWithpair|solsol pays with SOL on a non-SOL pair, swapped in the same transaction (mainnet)optional
refstringA promoter wallet: it earns 0.25% of the tradeoptional

Example

json
{
  "wallet": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "side": "buy",
  "amount": "0.25",
  "mode": "instant",
  "slippageBps": 300
}

ExitPlaceRequest

A sell to queue.

ts
type ExitPlaceRequest = {
  wallet: string; // The seller
  mint: string; // The coin
  amount: string; // Coins to queue
  floorPct?: number; // The lowest price accepted against now, −50 to 900 (default −5: up to 5% below)
};
FieldTypeDescription
walletstringThe seller
mintstringThe coin
amountstringCoins to queue
floorPctnumberThe lowest price accepted against now, −50 to 900 (default −5: up to 5% below)optional

Example

json
{
  "wallet": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "amount": "20000000",
  "floorPct": -5
}

ExitCancelRequest

An Exit Queue order to take down.

ts
type ExitCancelRequest = {
  wallet: string; // The seller
  mint: string; // The coin
  slot: number; // The order's slot, from GET /coins/{mint}/queue
};
FieldTypeDescription
walletstringThe seller
mintstringThe coin
slotintegerThe order's slot, from GET /coins/{mint}/queue

Example

json
{
  "wallet": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "slot": 0
}

WalletCoin

A wallet and a coin.

ts
type WalletCoin = {
  wallet: string; // The wallet that signs
  mint: string; // The coin
};
FieldTypeDescription
walletstringThe wallet that signs
mintstringThe coin

Example

json
{
  "wallet": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp"
}

CreatorLockRequest

A longer creator lock. A lock can only grow.

ts
type CreatorLockRequest = {
  wallet: string; // The coin's creator
  mint: string; // The coin
  unlockDays: number; // Days to unlock over, 1–3650
  cliffDays?: number; // Days before unlocking starts, 0–3650 (default 0)
};
FieldTypeDescription
walletstringThe coin's creator
mintstringThe coin
unlockDaysintegerDays to unlock over, 1–3650
cliffDaysintegerDays before unlocking starts, 0–3650 (default 0)optional

Example

json
{
  "wallet": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "unlockDays": 30,
  "cliffDays": 7
}

SendRequest

A signed transaction from any build endpoint.

ts
type SendRequest = {
  transaction: string; // Base64, signed
  lastValidBlockHeight?: number; // From the build response
};
FieldTypeDescription
transactionstringBase64, signed
lastValidBlockHeightintegerFrom the build responseoptional

Example

json
{
  "transaction": "AQAB…signed base64…",
  "lastValidBlockHeight": 312345678
}

UploadJson

The JSON body of an upload (or send multipart file and kind).

ts
type UploadJson = {
  url?: string; // An https image for woop to fetch
  data?: string; // The image as base64 (a data: URL works)
  kind?: 'image' | 'banner'; // Default image
};
FieldTypeDescription
urlstringAn https image for woop to fetchoptional
datastringThe image as base64 (a data: URL works)optional
kindimage|bannerDefault imageoptional

Example

json
{
  "url": "https://example.com/moon-cat.png",
  "kind": "image"
}

Build and send

BuiltTransaction

Every endpoint that builds something returns this: sign transaction with the request's wallet, then send it.

ts
type BuiltTransaction = {
  transaction: string; // A base64 versioned transaction, unsigned by the wallet (a launch is already signed by its new mint)
  lastValidBlockHeight: number; // It expires after this block height (about a minute)
  next: string; // What to do with it
};
FieldTypeDescription
transactionstringA base64 versioned transaction, unsigned by the wallet (a launch is already signed by its new mint)
lastValidBlockHeightintegerIt expires after this block height (about a minute)
nextstringWhat to do with it

Example

json
{
  "transaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…",
  "lastValidBlockHeight": 312345678,
  "next": "Sign `transaction` with `wallet`, then POST it to /api/v1/transactions."
}

LaunchResult

A launch ready to sign.

ts
type LaunchResult = {
  mint: string; // The new coin's address
  transaction: string; // Base64, already signed by the new mint: the creator signs it too
  lastValidBlockHeight: number; // It expires after this
  metadataUri: string; // The coin's metadata on woop's CDN
  pair: PairRef; // The pair it launches on
  image: string; // The stored image
  banner: string | null; // The stored banner
  costSol: number; // Network fees and rent the launch costs the creator; a first buy is on top
  firstBuy: FirstBuy | null; // The first buy, if any
  next: string; // What to do with it
};
FieldTypeDescription
mintstringThe new coin's address
transactionstringBase64, already signed by the new mint: the creator signs it too
lastValidBlockHeightintegerIt expires after this
metadataUristringThe coin's metadata on woop's CDN
pairPairRefThe pair it launches on
imagestringThe stored image
bannerstring or nullThe stored banner
costSolnumberNetwork fees and rent the launch costs the creator; a first buy is on top
firstBuyFirstBuy or nullThe first buy, if any
nextstringWhat to do with it

Example

json
{
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "transaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…",
  "lastValidBlockHeight": 312345678,
  "metadataUri": "https://zync-pad.b-cdn.net/coins/5eCpSHzTKsiafptauyG2vfDZhSdvMR4dz7jgvMX7Paop.json",
  "pair": {
    "symbol": "SOL",
    "mint": "So11111111111111111111111111111111111111112"
  },
  "image": "https://zync-pad.b-cdn.net/coins/img/a9788d7c9762b17650551eb2.webp",
  "banner": "https://zync-pad.b-cdn.net/coins/banner/0c1d2e3f4a5b6c7d8e9f0a1b.webp",
  "costSol": 0.015,
  "firstBuy": {
    "amount": "0.5",
    "coins": "in the fair opening"
  },
  "next": "Sign `transaction` with `wallet`, then POST it to /api/v1/transactions."
}

PairRef

A pair, briefly.

ts
type PairRef = {
  symbol: string; // Ticker
  mint: string; // Token address
};
FieldTypeDescription
symbolstringTicker
mintstringToken address

Example

json
{
  "symbol": "SOL",
  "mint": "So11111111111111111111111111111111111111112"
}

FirstBuy

Inside LaunchResult.

ts
type FirstBuy = {
  amount: string; // Pair token in
  coins: string; // Coins out ("in the fair opening": they settle with everyone's at one price)
};
FieldTypeDescription
amountstringPair token in
coinsstringCoins out ("in the fair opening": they settle with everyone's at one price)

TradeResult

A trade ready to sign, and what it should do.

ts
type TradeResult = {
  transaction: string; // Base64: the trader signs it
  lastValidBlockHeight: number; // It expires after this
  side: 'buy' | 'sell'; // Buy or sell
  mode: 'instant' | 'block'; // How it fills
  amountIn: string; // What goes in
  expectedOut: string; // What should come out
  minOut: string; // The least it accepts (instant)
  priceImpactPct: number; // How far it moves the price
  fee: string; // The fee, in the pair token
  exitQueue: QueueFill | null; // Instant buys: the part filled from the Exit Queue
  block: BlockInfo | null; // Fair Block orders: the block
  swap: SwapInfo | null; // Paying with SOL on another pair: the swap leg
  next: string; // What to do with it
};
FieldTypeDescription
transactionstringBase64: the trader signs it
lastValidBlockHeightintegerIt expires after this
sidebuy|sellBuy or sell
modeinstant|blockHow it fills
amountInstringWhat goes in
expectedOutstringWhat should come out
minOutstringThe least it accepts (instant)
priceImpactPctnumberHow far it moves the price
feestringThe fee, in the pair token
exitQueueQueueFill or nullInstant buys: the part filled from the Exit Queue
blockBlockInfo or nullFair Block orders: the block
swapSwapInfo or nullPaying with SOL on another pair: the swap leg
nextstringWhat to do with it

Example

json
{
  "transaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…",
  "lastValidBlockHeight": 312345678,
  "side": "buy",
  "mode": "instant",
  "amountIn": "0.25",
  "expectedOut": "4580211.33",
  "minOut": "4442804.99",
  "priceImpactPct": 0.84,
  "fee": "0.00375",
  "exitQueue": {
    "coins": "1200000",
    "quote": "0.065",
    "dip": false,
    "discountPct": 0
  },
  "block": null,
  "swap": null,
  "next": "Sign `transaction` with `wallet`, then POST it to /api/v1/transactions."
}

QueueFill

Inside TradeResult.

ts
type QueueFill = {
  coins: string; // Coins from the queue
  quote: string; // Pair token spent on them
  dip: boolean; // A holder deal applied
  discountPct: number; // Its discount
};
FieldTypeDescription
coinsstringCoins from the queue
quotestringPair token spent on them
dipbooleanA holder deal applied
discountPctnumberIts discount

BlockInfo

Inside TradeResult.

ts
type BlockInfo = {
  window: number; // Seconds the block collects orders before it settles
};
FieldTypeDescription
windownumberSeconds the block collects orders before it settles

SwapInfo

Inside TradeResult.

ts
type SwapInfo = {
  pair: string; // The pair-token leg
  leftover: string; // What stays in the wallet in the pair token
  impactPct: number; // The swap's own price impact
  via: string; // The route
};
FieldTypeDescription
pairstringThe pair-token leg
leftoverstringWhat stays in the wallet in the pair token
impactPctnumberThe swap's own price impact
viastringThe route

SendResult

A transaction that landed.

ts
type SendResult = {
  kind: 'launch' | 'trade'; // launch for launches; trade for everything else
  signature: string; // The transaction signature
  mint?: string; // Launches: the new coin
  url?: string; // Launches: its page on woop
};
FieldTypeDescription
kindlaunch|tradelaunch for launches; trade for everything else
signaturestringThe transaction signature
mintstringLaunches: the new coinoptional
urlstringLaunches: its page on woopoptional

Example

json
{
  "kind": "launch",
  "signature": "5hqJ7pHZnPTXqbQZfSTSwTPL46q6hSf2ahJ1A5KHNg3DC2NCtcEgDqWZePRYTkcP5Du6GeWqz3NKNL1MdvHJcBfx",
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "url": "https://usewoop.xyz/coin/6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp"
}

Upload

A stored image.

ts
type Upload = {
  url: string; // Use it as a launch's image or banner
  kind: 'image' | 'banner'; // Square coin image (512 × 512) or 3:1 banner (1500 × 500)
};
FieldTypeDescription
urlstringUse it as a launch's image or banner
kindimage|bannerSquare coin image (512 × 512) or 3:1 banner (1500 × 500)

Example

json
{
  "url": "https://zync-pad.b-cdn.net/coins/img/a9788d7c9762b17650551eb2.webp",
  "kind": "image"
}

Coins

CoinSummary

A coin in a list.

ts
type CoinSummary = {
  mint: string; // Its address
  name: string; // Name
  symbol: string; // Ticker
  image: string | null; // Image URL
  quoteMint: string; // Its pair's mint
  mcUsd: number | null; // Market cap, USD
  priceQuote: number | null; // Price in the pair token
  holders: number; // Wallets holding it
  graduated: boolean; // In its WAMM pool
  lastTradeAt: string | null; // ISO time of its last trade
  createdAt: string; // ISO launch time
};
FieldTypeDescription
mintstringIts address
namestringName
symbolstringTicker
imagestring or nullImage URL
quoteMintstringIts pair's mint
mcUsdnumber or nullMarket cap, USD
priceQuotenumber or nullPrice in the pair token
holdersintegerWallets holding it
graduatedbooleanIn its WAMM pool
lastTradeAtstring or nullISO time of its last trade
createdAtstringISO launch time

Example

json
{
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "name": "Moon Cat",
  "symbol": "MCAT",
  "image": "https://zync-pad.b-cdn.net/coins/img/a9788d7c9762b17650551eb2.webp",
  "quoteMint": "So11111111111111111111111111111111111111112",
  "mcUsd": 9640.5,
  "priceQuote": 6.34e-8,
  "holders": 128,
  "graduated": true,
  "lastTradeAt": "2026-11-01T15:20:11.000Z",
  "createdAt": "2026-11-01T14:58:36.000Z"
}

Coin

One coin: everything in CoinSummary, plus:

ts
type Coin = CoinSummary & {
  curve?: boolean; // On the woopcurve (then its WAMM pool)
  banner?: string | null; // 3:1 banner URL
  creator: string; // Its creator's wallet
  network: string; // mainnet or devnet
  quoteUsd: number | null; // The pair's USD price
  priceUsd: number | null; // Price, USD
  liquidityUsd: number | null; // Liquidity, USD
  paidToHoldersUsd: number | null; // Paid to holders so far, USD
  paidToHoldersQuote: number; // Paid to holders so far, pair token
  curvePct: number | null; // How far along the curve, 0–100
  top10Pct: number | null; // Share the 10 biggest wallets hold
  devPct: number | null; // Share the creator's wallet holds
  volume24hUsd: number | null; // 24h volume, USD
  change24hPct: number | null; // 24h move, %
  trades: number; // Trades so far
  fairSale?: string | null; // The fair launch that opened it, if any
};
FieldTypeDescription
…CoinSummaryEvery CoinSummary field
curvebooleanOn the woopcurve (then its WAMM pool)optional
bannerstring or null3:1 banner URLoptional
creatorstringIts creator's wallet
networkstringmainnet or devnet
quoteUsdnumber or nullThe pair's USD price
priceUsdnumber or nullPrice, USD
liquidityUsdnumber or nullLiquidity, USD
paidToHoldersUsdnumber or nullPaid to holders so far, USD
paidToHoldersQuotenumberPaid to holders so far, pair token
curvePctnumber or nullHow far along the curve, 0–100
top10Pctnumber or nullShare the 10 biggest wallets hold
devPctnumber or nullShare the creator's wallet holds
volume24hUsdnumber or null24h volume, USD
change24hPctnumber or null24h move, %
tradesintegerTrades so far
fairSalestring or nullThe fair launch that opened it, if anyoptional

Example

json
{
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "name": "Moon Cat",
  "symbol": "MCAT",
  "image": "https://zync-pad.b-cdn.net/coins/img/a9788d7c9762b17650551eb2.webp",
  "quoteMint": "So11111111111111111111111111111111111111112",
  "mcUsd": 9640.5,
  "priceQuote": 6.34e-8,
  "holders": 128,
  "graduated": true,
  "lastTradeAt": "2026-11-01T15:20:11.000Z",
  "createdAt": "2026-11-01T14:58:36.000Z",
  "curve": true,
  "banner": null,
  "creator": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "network": "mainnet",
  "quoteUsd": 152.1,
  "priceUsd": 0.0000096,
  "liquidityUsd": 3820.4,
  "paidToHoldersUsd": 41.27,
  "paidToHoldersQuote": 0.2713,
  "curvePct": 7.7,
  "top10Pct": 18.4,
  "devPct": 1.9,
  "volume24hUsd": 15230,
  "change24hPct": 34.2,
  "trades": 412,
  "fairSale": null
}

Trade

A trade on the tape.

ts
type Trade = {
  id: string; // Unique id
  signature: string; // Its transaction
  side: 'buy' | 'sell'; // Buy or sell
  trader: string; // The wallet
  quote: number; // Pair token in or out
  amount: number; // Coins
  usd: number | null; // In USD
  mcUsd: number | null; // Market cap at the trade, USD
  time: string; // ISO time
  via?: 'queue' | 'deal' | 'block' | 'fair'; // Filled from the Exit Queue, a holder deal, a Fair Block order or the fair launch
};
FieldTypeDescription
idstringUnique id
signaturestringIts transaction
sidebuy|sellBuy or sell
traderstringThe wallet
quotenumberPair token in or out
amountnumberCoins
usdnumber or nullIn USD
mcUsdnumber or nullMarket cap at the trade, USD
timestringISO time
viaqueue|deal|block|fairFilled from the Exit Queue, a holder deal, a Fair Block order or the fair launchoptional

Example

json
{
  "id": "5hqJ7pHZnPTXqbQZfSTSwTPL46q6hSf2ahJ1A5KHNg3DC2NCtcEgDqWZePRYTkcP5Du6GeWqz3NKNL1MdvHJcBfx:1000",
  "signature": "5hqJ7pHZnPTXqbQZfSTSwTPL46q6hSf2ahJ1A5KHNg3DC2NCtcEgDqWZePRYTkcP5Du6GeWqz3NKNL1MdvHJcBfx",
  "side": "buy",
  "trader": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "quote": 0.25,
  "amount": 4580211.33,
  "usd": 38.02,
  "mcUsd": 9640.5,
  "time": "2026-11-01T14:58:36.000Z",
  "via": "block"
}

Holder

A holder and how they did.

ts
type Holder = {
  address: string; // Wallet
  pct: number; // Share of supply
  since: string; // ISO time its holding began
  amount: number; // Coins held
  earnedQuote: number; // Paid to it for holding, pair token
  earnedUsd: number | null; // The same in USD
  boughtAmount: number; // Coins bought
  soldAmount: number; // Coins sold
  boughtQuote: number; // Pair token spent
  soldQuote: number; // Pair token received
  valueQuote: number; // Holding at the price now
  pnlQuote: number; // Profit or loss: value + sold − bought
  boughtUsd: number | null; // USD
  soldUsd: number | null; // USD
  valueUsd: number | null; // USD
  pnlUsd: number | null; // USD
  tag?: 'dev'; // The creator
};
FieldTypeDescription
addressstringWallet
pctnumberShare of supply
sincestringISO time its holding began
amountnumberCoins held
earnedQuotenumberPaid to it for holding, pair token
earnedUsdnumber or nullThe same in USD
boughtAmountnumberCoins bought
soldAmountnumberCoins sold
boughtQuotenumberPair token spent
soldQuotenumberPair token received
valueQuotenumberHolding at the price now
pnlQuotenumberProfit or loss: value + sold − bought
boughtUsdnumber or nullUSD
soldUsdnumber or nullUSD
valueUsdnumber or nullUSD
pnlUsdnumber or nullUSD
tagdevThe creatoroptional

Example

json
{
  "address": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "pct": 0.46,
  "since": "2026-11-01T14:58:36.000Z",
  "amount": 4580211.33,
  "earnedQuote": 0.0031,
  "earnedUsd": 0.47,
  "boughtAmount": 6000000,
  "soldAmount": 1420000,
  "boughtQuote": 0.2,
  "soldQuote": 0.1,
  "valueQuote": 0.2903,
  "pnlQuote": 0.1903,
  "boughtUsd": 30.42,
  "soldUsd": 15.21,
  "valueUsd": 44.15,
  "pnlUsd": 28.94
}

Candle

A market-cap candle, USD.

ts
type Candle = {
  time: number; // Unix seconds, the candle's start
  open: number; // Open
  high: number; // High
  low: number; // Low
  close: number; // Close
  volume: number; // Volume, USD
};
FieldTypeDescription
timeintegerUnix seconds, the candle's start
opennumberOpen
highnumberHigh
lownumberLow
closenumberClose
volumenumberVolume, USD

Example

json
{
  "time": 3,
  "open": 9600,
  "high": 9800,
  "low": 9500,
  "close": 9640,
  "volume": 512.3
}

Position

One wallet in one coin.

ts
type Position = {
  wallet: string; // Wallet
  amount: number; // Coins held
  pct: number; // Share of supply
  quoteSymbolMint: string; // The pair's mint
  valueQuote: number; // Holding at the price now
  valueUsd: number | null; // USD
  paidQuote: number; // Spent on buys
  receivedQuote: number; // Got from sells
  pnlQuote: number; // Profit or loss: value + received − paid
  pnlUsd: number | null; // USD
  trades: number; // Its trades
  boughtAmount: number; // Coins bought
  soldAmount: number; // Coins sold
  since: string | null; // When its holding began
  quoteUsd: number | null; // The pair's USD price
};
FieldTypeDescription
walletstringWallet
amountnumberCoins held
pctnumberShare of supply
quoteSymbolMintstringThe pair's mint
valueQuotenumberHolding at the price now
valueUsdnumber or nullUSD
paidQuotenumberSpent on buys
receivedQuotenumberGot from sells
pnlQuotenumberProfit or loss: value + received − paid
pnlUsdnumber or nullUSD
tradesintegerIts trades
boughtAmountnumberCoins bought
soldAmountnumberCoins sold
sincestring or nullWhen its holding began
quoteUsdnumber or nullThe pair's USD price

Example

json
{
  "wallet": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "amount": 4580211.33,
  "pct": 0.46,
  "quoteSymbolMint": "So11111111111111111111111111111111111111112",
  "valueQuote": 0.2903,
  "valueUsd": 44.15,
  "paidQuote": 0.2,
  "receivedQuote": 0.1,
  "pnlQuote": 0.1903,
  "pnlUsd": 28.94,
  "trades": 412,
  "boughtAmount": 6000000,
  "soldAmount": 1420000,
  "since": "2026-11-01T14:58:36.000Z",
  "quoteUsd": 152.1
}

Payout

An hourly payout to holders.

ts
type Payout = {
  epoch: number; // Its number
  rewardMint: string; // What it paid in (the pair token)
  amount: number; // Paid in total
  amountUsd: number | null; // USD
  holders: number; // Holders paid
  postedAt: string; // ISO
};
FieldTypeDescription
epochintegerIts number
rewardMintstringWhat it paid in (the pair token)
amountnumberPaid in total
amountUsdnumber or nullUSD
holdersintegerHolders paid
postedAtstringISO

Example

json
{
  "epoch": 37,
  "rewardMint": "So11111111111111111111111111111111111111112",
  "amount": 0.0271,
  "amountUsd": 4.12,
  "holders": 128,
  "postedAt": "2026-11-01T15:00:00.000Z"
}

Event

Something that happened on the coin besides a plain trade.

ts
type Event = {
  time: number; // Unix seconds
  kind: 'payout' | 'promoter' | 'fairblock' | 'exit' | 'creator'; // Holder payout, promoter fee, Fair Block settled, Exit Queue fill or creator fees
  usd: number | null; // How much, USD
  n?: number; // Fair Blocks: orders in it
};
FieldTypeDescription
timeintegerUnix seconds
kindpayout|promoter|fairblock|exit|creatorHolder payout, promoter fee, Fair Block settled, Exit Queue fill or creator fees
usdnumber or nullHow much, USD
nintegerFair Blocks: orders in itoptional

Example

json
{
  "time": 3,
  "kind": "fairblock",
  "usd": 94.9,
  "n": 14
}

Signals

Rug signals from on-chain history.

ts
type Signals = {
  devFunder: string | null; // The wallet that first funded the creator
  devFundedByExchange: boolean; // Funded from an exchange
  linked: WalletGroup; // Holders funded by the creator, or who funded them
  snipers: WalletGroup; // Wallets that bought in the first 10 seconds
  bundled: WalletGroup; // Wallets that bought in the same block as the first trade
  lock: SignalLock | null; // A creator lock set at launch (older coins)
  checked: number; // Holders checked
  holders: number; // Holders
};
FieldTypeDescription
devFunderstring or nullThe wallet that first funded the creator
devFundedByExchangebooleanFunded from an exchange
linkedWalletGroupHolders funded by the creator, or who funded them
snipersWalletGroupWallets that bought in the first 10 seconds
bundledWalletGroupWallets that bought in the same block as the first trade
lockSignalLock or nullA creator lock set at launch (older coins)
checkedintegerHolders checked
holdersintegerHolders

Example

json
{
  "devFunder": "3Qx9vLm2TnB8rJ5cWzXy7kP4sF1gH6dA9eN0bRtUoVi",
  "devFundedByExchange": true,
  "linked": {
    "wallets": [],
    "pct": 0
  },
  "snipers": {
    "wallets": [],
    "pct": 0
  },
  "bundled": {
    "wallets": [],
    "pct": 0
  },
  "lock": null,
  "checked": 40,
  "holders": 128
}

WalletGroup

Inside Signals.

ts
type WalletGroup = {
  wallets: string[]; // The wallets
  pct: number; // Share of supply they hold
};
FieldTypeDescription
walletsstring[]The wallets
pctnumberShare of supply they hold

SignalLock

Inside Signals.

ts
type SignalLock = {
  pct: number; // Share of supply
  cliffDays: number; // Days before it unlocks
  unlockDays: number; // Days it unlocks over
};
FieldTypeDescription
pctnumberShare of supply
cliffDaysnumberDays before it unlocks
unlockDaysnumberDays it unlocks over

The woopcurve

Curve

A woopcurve coin's state.

ts
type Curve = {
  status: 'opening' | 'trading' | 'block-pending' | 'complete' | 'graduated' | 'refund'; // Where it is
  quoteDecimals: number; // The pair's decimals
  raised: number; // Pair token in the curve
  target: number; // What graduation takes
  soldPct: number; // Share of the curve's 760M coins sold
  mcap: Mcaps; // Market caps, pair token
  graduatedAt: string | null; // When it moved into its WAMM pool
  pool: Pool | null; // Its WAMM pool
  openingEndsAt: string | null; // When the fair opening ends
  blockClosesAt: string | null; // When the open Fair Block settles
  refundAt: string | null; // When refunds start if it hasn't graduated
  advance: Advance; // The creator's 1 SOL launch advance
  creator: CreatorLock; // The creator's locked coins
  creatorFeesOwed: number; // Creator fees waiting for the next payout
  fees: Fees; // Its fees
  mine?: CurveMine; // With ?wallet=: that wallet's side
};
FieldTypeDescription
statusopening|trading|block-pending|complete|graduated|refundWhere it is
quoteDecimalsintegerThe pair's decimals
raisednumberPair token in the curve
targetnumberWhat graduation takes
soldPctnumberShare of the curve's 760M coins sold
mcapMcapsMarket caps, pair token
graduatedAtstring or nullWhen it moved into its WAMM pool
poolPool or nullIts WAMM pool
openingEndsAtstring or nullWhen the fair opening ends
blockClosesAtstring or nullWhen the open Fair Block settles
refundAtstring or nullWhen refunds start if it hasn't graduated
advanceAdvanceThe creator's 1 SOL launch advance
creatorCreatorLockThe creator's locked coins
creatorFeesOwednumberCreator fees waiting for the next payout
feesFeesIts fees
mineCurveMineWith ?wallet=: that wallet's sideoptional

Example

json
{
  "status": "trading",
  "quoteDecimals": 9,
  "raised": 9.68,
  "target": 125.8,
  "soldPct": 7.1,
  "mcap": {
    "start": 33,
    "now": 63.4,
    "graduation": 328.8
  },
  "graduatedAt": null,
  "pool": null,
  "openingEndsAt": null,
  "blockClosesAt": null,
  "refundAt": "2026-11-01T14:58:36.000Z",
  "advance": {
    "amount": 4580211.33,
    "repaid": 0.06,
    "owed": 0.94
  },
  "creator": {
    "locked": 18791167.7,
    "vest": 0,
    "claimed": 0,
    "claimable": 0,
    "unlockDays": 10,
    "cliffDays": 0,
    "graduatedAt": null
  },
  "creatorFeesOwed": 0.0042,
  "fees": {
    "trade": 1.5,
    "instant": 10,
    "exit": 1,
    "pool": 1.5,
    "tierHalf": true,
    "split": {
      "trade": [
        0.6,
        0.5,
        0.4
      ],
      "instant": [
        0.5,
        0.25,
        0.25
      ],
      "exit": [
        0.5,
        0.25,
        0.25
      ],
      "pool": [
        0.6,
        0.5,
        0.4
      ]
    }
  },
  "mine": {
    "order": null,
    "exits": [
      {
        "slot": 0,
        "left": 4000000,
        "owed": 0.94,
        "floorPct": -5
      }
    ],
    "instantMax": 916042.2,
    "instantNextAt": null,
    "refund": null
  }
}

Mcaps

Inside Curve.

ts
type Mcaps = {
  start: number; // At launch
  now: number; // Now
  graduation: number; // Where it graduates
};
FieldTypeDescription
startnumberAt launch
nownumberNow
graduationnumberWhere it graduates

Pool

Inside Curve.

ts
type Pool = {
  quote: number; // Pair token
  coins: number; // Coins
  burned: number; // Coins burned at graduation
};
FieldTypeDescription
quotenumberPair token
coinsnumberCoins
burnednumberCoins burned at graduation

Advance

Inside Curve.

ts
type Advance = {
  amount: number; // The advance
  repaid: number; // Repaid from creator fees
  owed: number; // Still owed
};
FieldTypeDescription
amountnumberThe advance
repaidnumberRepaid from creator fees
owednumberStill owed

CreatorLock

Inside Curve.

ts
type CreatorLock = {
  locked: number; // Coins locked
  vest: number; // Coins unlocking
  claimed: number; // Coins taken
  claimable: number; // Coins the creator can take now
  unlockDays: number; // Days they unlock over
  cliffDays: number; // Days before unlocking starts
  graduatedAt: string | null; // When the unlock clock started
};
FieldTypeDescription
lockednumberCoins locked
vestnumberCoins unlocking
claimednumberCoins taken
claimablenumberCoins the creator can take now
unlockDaysintegerDays they unlock over
cliffDaysintegerDays before unlocking starts
graduatedAtstring or nullWhen the unlock clock started

Fees

Inside Curve. Percent of the trade.

ts
type Fees = {
  trade: number; // Curve trades and Fair Blocks
  instant: number; // Instant sells
  exit: number; // Exit Queue, each side
  pool: number; // WAMM pool trades
  tierHalf: boolean; // Holders of 100k $WOOP pay half
  split: FeeSplit; // Each fee split between holders, the creator and woop
};
FieldTypeDescription
tradenumberCurve trades and Fair Blocks
instantnumberInstant sells
exitnumberExit Queue, each side
poolnumberWAMM pool trades
tierHalfbooleanHolders of 100k $WOOP pay half
splitFeeSplitEach fee split between holders, the creator and woop

FeeSplit

Inside Fees: [holders, creator, woop], percent of the trade.

ts
type FeeSplit = {
  trade: number[];
  instant: number[];
  exit: number[];
  pool: number[];
};
FieldTypeDescription
tradenumber[]
instantnumber[]
exitnumber[]
poolnumber[]

CurveMine

Inside Curve.

ts
type CurveMine = {
  order: MyOrder | null; // Its Fair Block order
  exits: MyExit[]; // Its Exit Queue orders
  instantMax: number; // The most it can instant-sell now
  instantNextAt: string | null; // When its next instant sell is allowed
  refund: MyRefund | null; // Its refund, in refund mode
};
FieldTypeDescription
orderMyOrder or nullIts Fair Block order
exitsMyExit[]Its Exit Queue orders
instantMaxnumberThe most it can instant-sell now
instantNextAtstring or nullWhen its next instant sell is allowed
refundMyRefund or nullIts refund, in refund mode

MyOrder

Inside CurveMine.

ts
type MyOrder = {
  buy: boolean; // A buy
  amount: number; // Its amount
  settled: boolean; // Its block settled
};
FieldTypeDescription
buybooleanA buy
amountnumberIts amount
settledbooleanIts block settled

MyExit

Inside CurveMine.

ts
type MyExit = {
  slot: number; // For cancelling
  left: number; // Coins left
  owed: number; // Proceeds waiting
  floorPct: number; // Its floor against now
};
FieldTypeDescription
slotintegerFor cancelling
leftnumberCoins left
owednumberProceeds waiting
floorPctnumberIts floor against now

MyRefund

Inside CurveMine.

ts
type MyRefund = {
  estimate: number; // About what it gets back
  paid: boolean; // Already paid
};
FieldTypeDescription
estimatenumberAbout what it gets back
paidbooleanAlready paid

Exit Queue

Queue

A coin's Exit Queue.

ts
type Queue = {
  spot: number; // Price now, pair token per coin
  quoteDecimals: number; // The pair's decimals
  orders: QueueOrder[]; // Orders waiting now
  totalQueued: number; // Coins waiting
  graduated: boolean; // Fills at the pool's price
  feePct: number; // Fee per side
  tierFeePct: number; // Fee per side for $WOOP holders
  tier: boolean; // With ?wallet=: it pays the lower fee
  history: QueueHistory[]; // Every order the queue has had, newest first
};
FieldTypeDescription
spotnumberPrice now, pair token per coin
quoteDecimalsintegerThe pair's decimals
ordersQueueOrder[]Orders waiting now
totalQueuednumberCoins waiting
graduatedbooleanFills at the pool's price
feePctnumberFee per side
tierFeePctnumberFee per side for $WOOP holders
tierbooleanWith ?wallet=: it pays the lower fee
historyQueueHistory[]Every order the queue has had, newest first

Example

json
{
  "spot": 6.34e-8,
  "quoteDecimals": 9,
  "orders": [
    {
      "slot": 0,
      "id": "5hqJ7pHZnPTXqbQZfSTSwTPL46q6hSf2ahJ1A5KHNg3DC2NCtcEgDqWZePRYTkcP5Du6GeWqz3NKNL1MdvHJcBfx:1000",
      "seller": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
      "remaining": 12000000,
      "floor": 6.02e-8,
      "floorPct": -5,
      "proceeds": 0.31,
      "mine": true
    }
  ],
  "totalQueued": 12000000,
  "graduated": true,
  "feePct": 1,
  "tierFeePct": 0.5,
  "tier": true,
  "history": [
    {
      "id": "5hqJ7pHZnPTXqbQZfSTSwTPL46q6hSf2ahJ1A5KHNg3DC2NCtcEgDqWZePRYTkcP5Du6GeWqz3NKNL1MdvHJcBfx:1000",
      "seller": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
      "mine": true,
      "amount": 8000000,
      "filled": 8000000,
      "received": 0.49,
      "floor": 6.02e-8,
      "status": "filled",
      "placedAt": "2026-11-01T15:02:10.000Z",
      "closedAt": null,
      "slot": null
    }
  ]
}

QueueOrder

Inside Queue.

ts
type QueueOrder = {
  slot: number; // For cancelling
  id: string; // Id
  seller: string; // Wallet
  remaining: number; // Coins left
  floor: number; // Lowest price, pair token per coin
  floorPct: number; // Floor against now, %
  proceeds: number; // Sold for so far, waiting to be paid
  mine: boolean; // With ?wallet=: its own
};
FieldTypeDescription
slotintegerFor cancelling
idstringId
sellerstringWallet
remainingnumberCoins left
floornumberLowest price, pair token per coin
floorPctnumberFloor against now, %
proceedsnumberSold for so far, waiting to be paid
minebooleanWith ?wallet=: its own

QueueHistory

Inside Queue.

ts
type QueueHistory = {
  id: string; // Id
  seller: string; // Wallet
  mine: boolean; // With ?wallet=: its own
  amount: number; // Coins queued
  filled: number; // Coins sold
  received: number; // Pair token the seller got
  floor: number; // Lowest price, pair token per coin
  status: 'waiting' | 'filled' | 'partly' | 'cancelled'; // Where it ended (or is)
  placedAt: string | null; // ISO
  closedAt: string | null; // ISO, when cancelled
  slot: number | null; // Waiting orders: for cancelling
};
FieldTypeDescription
idstringId
sellerstringWallet
minebooleanWith ?wallet=: its own
amountnumberCoins queued
fillednumberCoins sold
receivednumberPair token the seller got
floornumberLowest price, pair token per coin
statuswaiting|filled|partly|cancelledWhere it ended (or is)
placedAtstring or nullISO
closedAtstring or nullISO, when cancelled
slotinteger or nullWaiting orders: for cancelling

Pairs, tickers, wallets, you

Pair

A token a coin can launch against. Holders are paid in it.

ts
type Pair = {
  symbol: string; // Its ticker, e.g. SOL
  name: string; // Its name
  mint: string; // Its token address
  category: string; // Crypto, Dollars, Commodities, Memes…
  logo: string | null; // Logo URL
  decimals: number; // Its decimals
  graduationRaise: number; // How much of it a coin on this pair raises to graduate
};
FieldTypeDescription
symbolstringIts ticker, e.g. SOL
namestringIts name
mintstringIts token address
categorystringCrypto, Dollars, Commodities, Memes…
logostring or nullLogo URL
decimalsintegerIts decimals
graduationRaisenumberHow much of it a coin on this pair raises to graduate

Example

json
{
  "symbol": "SOL",
  "name": "Solana",
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "category": "Crypto",
  "logo": "https://zync-pad.b-cdn.net/pairs/So11111111111111111111111111111111111111112.webp",
  "decimals": 9,
  "graduationRaise": 125.8
}

Ticker

Whether a ticker is free.

ts
type Ticker = {
  symbol: string; // The ticker, upper case
  available: boolean; // Free to use at no extra cost
  takenBy?: TickerOwner; // The coin that has it
  copyFeeSol?: number; // What using it anyway costs, paid to that coin's holders
};
FieldTypeDescription
symbolstringThe ticker, upper case
availablebooleanFree to use at no extra cost
takenByTickerOwnerThe coin that has itoptional
copyFeeSolnumberWhat using it anyway costs, paid to that coin's holdersoptional

Example

json
{
  "symbol": "MCAT",
  "available": false,
  "takenBy": {
    "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
    "name": "Moon Cat"
  },
  "copyFeeSol": 1
}

TickerOwner

Inside Ticker.

ts
type TickerOwner = {
  mint: string; // The coin with the ticker
  name: string; // Its name
};
FieldTypeDescription
mintstringThe coin with the ticker
namestringIts name

Portfolio

A wallet's woop coins.

ts
type Portfolio = {
  holdings: Holding[]; // Coins it holds or earned from, biggest first
  totals: PortfolioTotals; // Totals
};
FieldTypeDescription
holdingsHolding[]Coins it holds or earned from, biggest first
totalsPortfolioTotalsTotals

Example

json
{
  "holdings": [
    {
      "coin": {
        "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
        "name": "Moon Cat",
        "symbol": "MCAT",
        "image": "https://zync-pad.b-cdn.net/coins/img/a9788d7c9762b17650551eb2.webp",
        "quoteMint": "So11111111111111111111111111111111111111112",
        "mcUsd": 9640.5,
        "priceQuote": 6.34e-8,
        "holders": 128,
        "graduated": true,
        "lastTradeAt": "2026-11-01T15:20:11.000Z",
        "createdAt": "2026-11-01T14:58:36.000Z",
        "curve": true,
        "banner": null,
        "creator": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
        "network": "mainnet",
        "quoteUsd": 152.1,
        "priceUsd": 0.0000096,
        "liquidityUsd": 3820.4,
        "paidToHoldersUsd": 41.27,
        "paidToHoldersQuote": 0.2713,
        "curvePct": 7.7,
        "top10Pct": 18.4,
        "devPct": 1.9,
        "volume24hUsd": 15230,
        "change24hPct": 34.2,
        "trades": 412,
        "fairSale": null
      },
      "amount": 4580211.33,
      "pct": 0.46,
      "valueUsd": 44.15,
      "since": "2026-11-01T14:58:36.000Z",
      "earnedQuote": 0.0031,
      "earnedUsd": 0.47,
      "claimable": [],
      "claimableUsd": 0
    }
  ],
  "totals": {
    "valueUsd": 44.15,
    "earnedUsd": 0.47,
    "claimableUsd": 0,
    "claimableCount": 0,
    "coins": 3
  }
}

Holding

Inside Portfolio.

ts
type Holding = {
  coin: Coin; // The coin
  amount: number; // Coins held
  pct: number; // Share of supply
  valueUsd: number | null; // USD
  since: string | null; // Holding since
  earnedQuote: number; // Paid for holding, pair token
  earnedUsd: number | null; // USD
  claimable: Claimable[]; // Rewards it can still claim (most are paid automatically)
  claimableUsd: number | null; // USD
};
FieldTypeDescription
coinCoinThe coin
amountnumberCoins held
pctnumberShare of supply
valueUsdnumber or nullUSD
sincestring or nullHolding since
earnedQuotenumberPaid for holding, pair token
earnedUsdnumber or nullUSD
claimableClaimable[]Rewards it can still claim (most are paid automatically)
claimableUsdnumber or nullUSD

Claimable

Inside Holding.

ts
type Claimable = {
  rewardMint: string; // Paid in
  amount: number; // Amount
  amountUsd: number | null; // USD
};
FieldTypeDescription
rewardMintstringPaid in
amountnumberAmount
amountUsdnumber or nullUSD

PortfolioTotals

Inside Portfolio.

ts
type PortfolioTotals = {
  valueUsd: number | null; // Holdings, USD
  earnedUsd: number | null; // Earned, USD
  claimableUsd: number | null; // Claimable, USD
  claimableCount: number; // Coins with something to claim
  coins: number; // Coins held
};
FieldTypeDescription
valueUsdnumber or nullHoldings, USD
earnedUsdnumber or nullEarned, USD
claimableUsdnumber or nullClaimable, USD
claimableCountintegerCoins with something to claim
coinsintegerCoins held

Me

Your key and what it launched.

ts
type Me = {
  wallet: string; // The key's wallet
  key: KeyUsage; // The key
  launches: ApiLaunch[]; // Coins launched through the API
};
FieldTypeDescription
walletstringThe key's wallet
keyKeyUsageThe key
launchesApiLaunch[]Coins launched through the API

Example

json
{
  "wallet": "8hyPWptPNa47TCinJbopyjF2H92kkpt2xCvCwF1ivMh6",
  "key": {
    "prefix": "woop_AKPH67r",
    "createdAt": "2026-11-01T14:58:36.000Z",
    "lastUsedAt": "2026-11-01T14:58:36.000Z",
    "requests": 1840
  },
  "launches": [
    {
      "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
      "name": "Moon Cat",
      "symbol": "MCAT",
      "launchedAt": "2026-11-01T14:58:36.000Z",
      "url": "https://usewoop.xyz/coin/6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp"
    }
  ]
}

KeyUsage

Inside Me.

ts
type KeyUsage = {
  prefix: string; // Its first characters
  createdAt: string; // ISO
  lastUsedAt: string | null; // ISO
  requests: number; // Requests made with it
};
FieldTypeDescription
prefixstringIts first characters
createdAtstringISO
lastUsedAtstring or nullISO
requestsintegerRequests made with it

ApiLaunch

A coin launched through the API.

ts
type ApiLaunch = {
  mint: string; // Its address
  name: string | null; // Name
  symbol: string | null; // Ticker
  launchedAt: string; // ISO
  url: string; // Its page on woop
};
FieldTypeDescription
mintstringIts address
namestring or nullName
symbolstring or nullTicker
launchedAtstringISO
urlstringIts page on woop

Example

json
{
  "mint": "6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp",
  "name": "Moon Cat",
  "symbol": "MCAT",
  "launchedAt": "2026-11-01T14:58:36.000Z",
  "url": "https://usewoop.xyz/coin/6D162EwSMepWrTJNxAyfHM3RBBG5pgSQy9mLvrZBS9Pp"
}

Errors

Error

Every failed request.

ts
type Error = {
  error: ErrorBody; // What went wrong
};
FieldTypeDescription
errorErrorBodyWhat went wrong

Example

json
{
  "error": {
    "code": "pair_not_open",
    "message": "`DOGE` isn’t a pair you can launch on. GET /api/v1/pairs lists them."
  }
}

ErrorBody

Inside Error.

ts
type ErrorBody = {
  code: string; // Stable code to branch on: see Errors and limits
  message: string; // A plain sentence you can show to a user
};
FieldTypeDescription
codestringStable code to branch on: see Errors and limits
messagestringA plain sentence you can show to a user