{"openapi":"3.1.0","info":{"title":"Fleethall API","version":"1"},"servers":[{"url":"https://api.fleethall.com"}],"components":{"securitySchemes":{"key":{"type":"http","scheme":"bearer","description":"The key an admin made for your account."}},"schemas":{"Instrument":{"type":"object","properties":{"id":{"type":"string","example":"hyperliquid:BTC","description":"`venue:symbol`, the id every other endpoint takes."},"venue":{"type":"string","enum":["hyperliquid","kraken","krakenFutures"],"description":"The venue an instrument trades on. kraken is Kraken spot; krakenFutures is Kraken Futures, a separate exchange."},"symbol":{"type":"string","example":"xyz:NVDA"},"venueCode":{"type":"string","description":"The venue's own name for it, e.g. `@107` for HYPE/USDC spot."},"kind":{"type":"string","enum":["perpetual","spot"]},"deployer":{"type":["string","null"],"description":"For builder-deployed perpetuals, the deployer that lists it (e.g. `xyz`); null when the venue lists it."},"base":{"type":"string"},"quote":{"type":"string"},"lot":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The size step."},"tick":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["significantFigures"]},"figures":{"type":"integer"},"maxDecimals":{"type":"integer"}},"required":["kind","figures","maxDecimals"]},{"type":"object","properties":{"kind":{"type":"string","enum":["increment"]},"step":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"}},"required":["kind","step"]}],"description":"How valid prices are formed. significantFigures (Hyperliquid): a price may have at most `figures` significant figures and at most `maxDecimals` decimals; whole numbers are always valid, so the tick depends on the price. increment (Kraken): a price is a whole multiple of `step`."},"minNotional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The smallest order value the venue accepts, in the quote currency."},"minSize":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","default":null,"description":"The smallest order size the venue accepts, in the base asset; null where it sets none beyond the lot."},"maxLeverage":{"type":["number","null"],"description":"The venue's maximum leverage; null for spot."},"marginTiers":{"type":"array","items":{"type":"object","properties":{"lowerBound":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"maxLeverage":{"type":"number"}},"required":["lowerBound","maxLeverage"]},"description":"Max leverage by position notional, from the venue."},"makerFee":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Fraction of notional, base fee tier.","example":"0.00015"},"takerFee":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact.","example":"0.00045"},"feeBasis":{"type":"string","description":"How the fee was derived: the fee page, the date it was read, any per-instrument scale."},"fundingIntervalHours":{"type":["number","null"],"description":"Null for spot."},"tradingHours":{"type":["string","null"],"description":"As published by the venue or deployer; null where not known."},"assetClass":{"type":"string","enum":["crypto","stock","other","commodity","minorIndex","gold","majorIndex","minorFx","majorFx"],"description":"ESMA's classes: crypto; stock (single stocks); other (ETFs, bonds, rates and other reference values); commodity (other than gold); minorIndex; gold; majorIndex (FTSE 100, CAC 40, DAX, Dow Jones, S&P 500, Nasdaq, Nasdaq 100, Nikkei 225, ASX 200, Euro Stoxx 50); minorFx; majorFx (two of USD, EUR, JPY, GBP, CAD, CHF). An instrument the platform has not classified is crypto, the class with the lowest cap."},"settlement":{"type":"string","example":"USDC","description":"The asset its fills, fees, funding and position are booked in. The platform keeps one margin currency, USDC: Kraken's USD-quoted instruments settle in it 1:1. Orders are taken only on instruments that settle in USDC."},"delisted":{"type":"boolean"},"licence":{"type":"string","enum":["showable","private"],"description":"Whether the venue lets us show its data to anyone (showable) or only use it ourselves (private). Each adapter declares one."},"readAt":{"type":"integer","description":"When the venue's metadata was read."}},"required":["id","venue","symbol","venueCode","kind","deployer","base","quote","lot","tick","minNotional","maxLeverage","marginTiers","makerFee","takerFee","feeBasis","fundingIntervalHours","tradingHours","assetClass","settlement","delisted","licence","readAt"]},"Book":{"type":"object","properties":{"time":{"type":"integer","description":"Venue time of the snapshot."},"bids":{"type":"array","items":{"type":"object","properties":{"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"orders":{"type":["integer","null"],"description":"Orders at the level; null where the venue does not say (Kraken)."}},"required":["price","size","orders"]},"description":"Best first."},"asks":{"type":"array","items":{"type":"object","properties":{"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"orders":{"type":["integer","null"],"description":"Orders at the level; null where the venue does not say (Kraken)."}},"required":["price","size","orders"]},"description":"Best first."}},"required":["time","bids","asks"]},"Error":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]},"Trade":{"type":"object","properties":{"id":{"type":"string"},"time":{"type":"integer","description":"Unix time in milliseconds."},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"side":{"type":"string","enum":["buy","sell"],"description":"The side of the taker."}},"required":["id","time","price","size","side"]},"Candle":{"type":"object","properties":{"openTime":{"type":"integer","description":"Unix time in milliseconds."},"closeTime":{"type":"integer","description":"Unix time in milliseconds."},"open":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"high":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"low":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"close":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"volume":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"In the base asset."},"trades":{"type":["integer","null"],"description":"Null where the venue does not say (Kraken Futures)."}},"required":["openTime","closeTime","open","high","low","close","volume","trades"]},"Funding":{"type":"object","properties":{"time":{"type":"integer","description":"Unix time in milliseconds."},"rate":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Paid by longs to shorts when positive."},"premium":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"Null where the venue does not publish it (Kraken Futures)."}},"required":["time","rate","premium"]},"CeremonyOptions":{"type":"object","properties":{"ceremony":{"type":"string","description":"Send it back with the answer."},"options":{"type":"object","properties":{"challenge":{"type":"string"}},"required":["challenge"],"additionalProperties":{},"description":"For navigator.credentials.create() or get(), in their JSON form."}},"required":["ceremony","options"]},"Me":{"type":"object","properties":{"person":{"$ref":"#/components/schemas/Person"},"account":{"$ref":"#/components/schemas/Account"},"passkeys":{"type":"array","items":{"$ref":"#/components/schemas/Passkey"}}},"required":["person","account","passkeys"]},"Person":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"The display name given at sign-up."},"email":{"type":"string","description":"Lowercased. Where the confirmation and recovery links go."},"emailVerifiedAt":{"type":["integer","null"],"description":"When the person confirmed it; until then the account is not usable."},"accountId":{"type":"string","description":"The play-money account made at sign-up, the only one this person trades."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."}},"required":["id","name","email","emailVerifiedAt","accountId","createdAt"]},"Account":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"Given by the admin who made the key."},"profile":{"type":"string","enum":["eu-retail"],"description":"The rules the account trades under. eu-retail, ESMA's retail rules: a position opens at most at the lower of the venue's maximum leverage and ESMA's cap for its asset class: 2× crypto, 5× stock and other, 10× commodity and minorIndex, 20× gold, majorIndex and minorFx, 30× majorFx. When equity falls below half the initial margin the positions opened with, they are closed at the live book, largest loss first, until it is back above; a balance left below zero is set to zero."},"startingBalance":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"In USDC."},"balances":{"type":"object","additionalProperties":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"description":"By asset: the starting balance plus realised profit and loss and funding, less fees, plus any adjustment by the admin."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"retiredAt":{"type":["integer","null"],"description":"When the admin took it off the leaderboard and viewers' lists; null while it is on them. Nothing of it is erased."},"privateData":{"type":"boolean","description":"Whether the admin granted the account private-class data (Kraken): its keys and its person's session see it only then."}},"required":["id","name","profile","startingBalance","balances","createdAt","retiredAt","privateData"]},"Passkey":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"lastUsedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."}},"required":["id","createdAt","lastUsedAt"]},"RegistrationResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"rawId":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"response":{"type":"object","properties":{"clientDataJSON":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"attestationObject":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"transports":{"type":"array","items":{"type":"string"}}},"required":["clientDataJSON","attestationObject"]},"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"clientExtensionResults":{"type":"object","properties":{"credProps":{"type":"object","properties":{"rk":{"type":"boolean"}}}},"default":{}},"type":{"type":"string","enum":["public-key"]}},"required":["id","rawId","response","type"],"description":"What navigator.credentials.create() returned, as the credential's toJSON() gives it."},"AuthenticationResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"rawId":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"response":{"type":"object","properties":{"clientDataJSON":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"authenticatorData":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"signature":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"},"userHandle":{"type":"string","pattern":"^[A-Za-z0-9_-]*$"}},"required":["clientDataJSON","authenticatorData","signature"]},"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"clientExtensionResults":{"type":"object","properties":{"credProps":{"type":"object","properties":{"rk":{"type":"boolean"}}}},"default":{}},"type":{"type":"string","enum":["public-key"]}},"required":["id","rawId","response","type"],"description":"What navigator.credentials.get() returned, as the credential's toJSON() gives it."},"Export":{"type":"object","properties":{"exportedAt":{"type":"integer"},"person":{"$ref":"#/components/schemas/Person"},"passkeys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"personId":{"type":"string"},"publicKey":{"type":"string","description":"The COSE public key, base64url."},"counter":{"type":"integer"},"transports":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"lastUsedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."}},"required":["id","personId","publicKey","counter","transports","createdAt","lastUsedAt"]}},"sessions":{"type":"array","items":{"type":"object","properties":{"personId":{"type":"string"},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"expiresAt":{"type":"integer","description":"Unix time in milliseconds."}},"required":["personId","createdAt","expiresAt"]}},"mailCodes":{"type":"array","items":{"type":"object","properties":{"purpose":{"type":"string","enum":["verify","recover"]},"personId":{"type":"string"},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"expiresAt":{"type":"integer","description":"Unix time in milliseconds."},"usedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."}},"required":["purpose","personId","createdAt","expiresAt","usedAt"]}},"invites":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"expiresAt":{"type":"integer","description":"Unix time in milliseconds."},"usedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"usedBy":{"type":["string","null"],"description":"The person who signed up with it."}},"required":["createdAt","expiresAt","usedAt","usedBy"]}},"account":{"$ref":"#/components/schemas/Account"},"keys":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["trader"]},"id":{"type":"string"},"name":{"type":"string","description":"Given by whoever made the key."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"revokedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"accountId":{"type":"string"}},"required":["kind","id","name","createdAt","revokedAt","accountId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["viewer"]},"id":{"type":"string"},"name":{"type":"string","description":"Given by whoever made the key."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"revokedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"accounts":{"type":"array","items":{"type":"string"},"description":"The accounts it was granted."}},"required":["kind","id","name","createdAt","revokedAt","accounts"]}]}},"orders":{"type":"array","items":{"$ref":"#/components/schemas/Order"}},"positions":{"type":"array","items":{"$ref":"#/components/schemas/Position"}},"events":{"type":"array","items":{"$ref":"#/components/schemas/LedgerEvent"}},"alarms":{"type":"array","items":{"$ref":"#/components/schemas/Alarm"}},"equity":{"type":"array","items":{"$ref":"#/components/schemas/EquityPoint"}}},"required":["exportedAt","person","passkeys","sessions","mailCodes","invites","account","keys","orders","positions","events","alarms","equity"],"description":"Everything the arena keeps about you. Codes, sessions and keys come without their hashes."},"Order":{"type":"object","properties":{"id":{"type":"string"},"instrument":{"type":"string"},"type":{"type":"string","enum":["market","limit","postOnly","ioc"],"description":"market: takes from the book until filled or the visible book runs out. limit: takes up to its price, then rests. postOnly: rests, or is rejected if it would take. ioc: takes up to its price, and the rest is cancelled. Hyperliquid has no fill-or-kill, so the platform doesn't offer it there."},"side":{"type":"string","enum":["buy","sell"]},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"price":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"Null for market orders."},"reason":{"type":["string","null"]},"status":{"type":"string","enum":["pending","resting","filled","cancelled","rejected"],"description":"pending: sent, not yet at the venue. resting: on the book, possibly part filled. The other three are final."},"filled":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"averagePrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"fee":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Total fees paid on its fills."},"feeAsset":{"type":"string"},"queueAhead":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"While resting: the size ahead of it at its price. Null while its price is beyond the visible book."},"message":{"type":["string","null"],"description":"Why it was rejected or cancelled, or that the platform placed it to close out a position."},"sentAt":{"type":"integer","description":"When the platform received it."},"arrivedAt":{"type":["integer","null"],"description":"When it reached the venue: sentAt plus the venue's measured delay."},"bookTime":{"type":["integer","null"],"description":"Venue time of the book it met on arrival."},"updatedAt":{"type":"integer","description":"Unix time in milliseconds."}},"required":["id","instrument","type","side","size","price","reason","status","filled","averagePrice","fee","feeAsset","queueAhead","message","sentAt","arrivedAt","bookTime","updatedAt"]},"Position":{"type":"object","properties":{"instrument":{"type":"string"},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Signed: positive long, negative short."},"entryPrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"Average price of the open size; null when flat."},"realisedPnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"fees":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"funding":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Funding received (positive) or paid (negative) on it, in total."},"asset":{"type":"string","description":"The quote asset profit, loss, fees and funding are in."}},"required":["instrument","size","entryPrice","realisedPnl","fees","funding","asset"]},"LedgerEvent":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["sent"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"orderId":{"type":"string"},"instrument":{"type":"string"},"type":{"type":"string","enum":["market","limit","postOnly","ioc"],"description":"market: takes from the book until filled or the visible book runs out. limit: takes up to its price, then rests. postOnly: rests, or is rejected if it would take. ioc: takes up to its price, and the rest is cancelled. Hyperliquid has no fill-or-kill, so the platform doesn't offer it there."},"side":{"type":"string","enum":["buy","sell"]},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"price":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"reason":{"type":["string","null"],"description":"The reason the client gave."}},"required":["kind","seq","at","orderId","instrument","type","side","size","price","reason"]},{"type":"object","properties":{"kind":{"type":"string","enum":["rejected"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"orderId":{"type":"string"},"instrument":{"type":"string"},"message":{"type":"string"}},"required":["kind","seq","at","orderId","instrument","message"]},{"type":"object","properties":{"kind":{"type":"string","enum":["rested"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"orderId":{"type":"string"},"instrument":{"type":"string"},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"queueAhead":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."}},"required":["kind","seq","at","orderId","instrument","price","size","queueAhead"]},{"type":"object","properties":{"kind":{"type":"string","enum":["fill"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"orderId":{"type":"string"},"instrument":{"type":"string"},"side":{"type":"string","enum":["buy","sell"]},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"liquidity":{"type":"string","enum":["maker","taker"]},"fee":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"feeAsset":{"type":"string"},"mid":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The venue book's mid when it filled; null if a side was empty."},"slippage":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"Price against the mid as a fraction of the mid, positive when worse for you: (price − mid) / mid for a buy, (mid − price) / mid for a sell."},"venueTime":{"type":"integer","description":"Venue time of the book or trade it filled on."},"caughtUp":{"type":["object","null"],"properties":{"rule":{"type":"string","enum":["trades","candles"],"description":"trades: the venue's recent trades, through the queue as a live trade is. candles: where those didn't reach back far enough, the venue's 1-minute candles, which fill a resting order in full at its price only where the price traded through it; a print at its price moves nothing, as the size traded there is not known."},"start":{"type":"integer","description":"Venue time the window starts after: the last trade the platform had applied to the instrument."},"end":{"type":"integer","description":"Venue time it ends at."}},"default":null,"required":["rule","start","end"],"description":"Null for a fill made as it happened. Set for one found when the platform started again, in what the venue printed while it was down."}},"required":["kind","seq","at","orderId","instrument","side","price","size","liquidity","fee","feeAsset","mid","slippage","venueTime"]},{"type":"object","properties":{"kind":{"type":"string","enum":["cancelled"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"orderId":{"type":"string"},"instrument":{"type":"string"},"message":{"type":"string"},"reason":{"type":["string","null"],"description":"The reason the client gave."}},"required":["kind","seq","at","orderId","instrument","message","reason"]},{"type":"object","properties":{"kind":{"type":"string","enum":["cancelFailed"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"orderId":{"type":"string"},"instrument":{"type":"string"},"message":{"type":"string"},"reason":{"type":["string","null"],"description":"The reason the client gave."}},"required":["kind","seq","at","orderId","instrument","message","reason"]},{"type":"object","properties":{"kind":{"type":"string","enum":["amended"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"orderId":{"type":"string"},"instrument":{"type":"string"},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The new size still to fill."},"reason":{"type":["string","null"],"description":"The reason the client gave."}},"required":["kind","seq","at","orderId","instrument","price","size","reason"]},{"type":"object","properties":{"kind":{"type":"string","enum":["amendFailed"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"orderId":{"type":"string"},"instrument":{"type":"string"},"message":{"type":"string"},"reason":{"type":["string","null"],"description":"The reason the client gave."}},"required":["kind","seq","at","orderId","instrument","message","reason"]},{"type":"object","properties":{"kind":{"type":"string","enum":["funding"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"instrument":{"type":"string"},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The position held when the venue settled funding, signed."},"oraclePrice":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The venue's oracle price then, which converts the size to notional, as the venue does. For a turn the platform was down for, settled when it started again, the last price traded before the turn, from the venue's 1-minute candles: no venue publishes a past oracle price."},"rate":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The venue's settled rate for the interval; longs pay shorts when positive."},"payment":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Received when positive, paid when negative: −size × oraclePrice × rate."},"asset":{"type":"string"},"fundingTime":{"type":"integer","description":"When the venue settled it."}},"required":["kind","seq","at","instrument","size","oraclePrice","rate","payment","asset","fundingTime"]},{"type":"object","properties":{"kind":{"type":"string","enum":["alarm"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"alarmId":{"type":"string"},"instrument":{"type":"string"},"direction":{"type":"string","enum":["above","below"],"description":"above: goes off when the mark price is at or above the price. below: at or below."},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"markPrice":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The mark that set it off."},"reason":{"type":["string","null"],"description":"The reason the client gave."}},"required":["kind","seq","at","alarmId","instrument","direction","price","markPrice","reason"]},{"type":"object","properties":{"kind":{"type":"string","enum":["marginCall"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"equity":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"initialMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The positions' initial margin, which equity has fallen below. Orders that add to a position are rejected until it is back above."},"maintenanceMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The venue's maintenance margin."}},"required":["kind","seq","at","equity","initialMargin","maintenanceMargin"]},{"type":"object","properties":{"kind":{"type":"string","enum":["closedOut"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"instrument":{"type":"string"},"equity":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"closeOut":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The line equity fell below: half the initial margin the open positions opened with, under eu-retail."},"unrealisedPnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The position's at the mark: the largest loss of those still open."},"cancelled":{"type":"array","items":{"type":"string"},"description":"Your resting orders on the instrument, cancelled first."},"order":{"type":"string","description":"The market order the platform placed to close the position at the live book."}},"required":["kind","seq","at","instrument","equity","closeOut","unrealisedPnl","cancelled","order"]},{"type":"object","properties":{"kind":{"type":"string","enum":["absorbed"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"asset":{"type":"string"},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"What the platform took on: the balance was −amount once the close-out had closed every position."},"balance":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The balance after it: zero."}},"required":["kind","seq","at","asset","amount","balance"]},{"type":"object","properties":{"kind":{"type":"string","enum":["adjusted"]},"seq":{"type":"integer"},"at":{"type":"integer","description":"When the platform recorded it."},"asset":{"type":"string"},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Added to the balance; negative when taken away."},"balance":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The balance after it."},"note":{"type":"string"}},"required":["kind","seq","at","asset","amount","balance","note"]}],"description":"One thing that happened to your account: to one of your orders, or a funding payment, an alarm, a margin call, a position closed out, a loss the platform absorbed or an adjustment by the admin. Every event is kept."},"Alarm":{"type":"object","properties":{"id":{"type":"string"},"instrument":{"type":"string"},"direction":{"type":"string","enum":["above","below"],"description":"above: goes off when the mark price is at or above the price. below: at or below."},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"reason":{"type":["string","null"]},"status":{"type":"string","enum":["active","fired","cancelled"]},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"firedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"markPrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The mark that set it off."}},"required":["id","instrument","direction","price","reason","status","createdAt","firedAt","markPrice"],"description":"A price alarm. It goes off once, on the first mark price that crosses it, and sends an alarm event."},"EquityPoint":{"type":"object","properties":{"at":{"type":"integer","description":"The minute it was taken."},"equity":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"balance":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"unrealisedPnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"initialMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"maintenanceMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."}},"required":["at","equity","balance","unrealisedPnl","initialMargin","maintenanceMargin"],"description":"The account's equity at a minute's turn when it changed, in USDC; it held until the next point."},"MadeKey":{"type":"object","properties":{"key":{"type":"string","description":"The key. Shown once."},"record":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["trader"]},"id":{"type":"string"},"name":{"type":"string","description":"Given by whoever made the key."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"revokedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"accountId":{"type":"string"}},"required":["kind","id","name","createdAt","revokedAt","accountId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["viewer"]},"id":{"type":"string"},"name":{"type":"string","description":"Given by whoever made the key."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"revokedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"accounts":{"type":"array","items":{"type":"string"},"description":"The accounts it was granted."}},"required":["kind","id","name","createdAt","revokedAt","accounts"]}]}},"required":["key","record"]},"PlaceOrder":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["market"]},"instrument":{"type":"string","example":"hyperliquid:BTC"},"side":{"type":"string","enum":["buy","sell"]},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"In the base asset; a multiple of the instrument's lot."},"reason":{"type":"string","maxLength":500,"description":"Why, in your own words. Stored with the order and shown in its history."}},"required":["type","instrument","side","size"]},{"type":"object","properties":{"type":{"type":"string","enum":["limit"]},"instrument":{"type":"string","example":"hyperliquid:BTC"},"side":{"type":"string","enum":["buy","sell"]},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"In the base asset; a multiple of the instrument's lot."},"reason":{"type":"string","maxLength":500,"description":"Why, in your own words. Stored with the order and shown in its history."},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A limit price, valid under the instrument's tick rule."}},"required":["type","instrument","side","size","price"]},{"type":"object","properties":{"type":{"type":"string","enum":["postOnly"]},"instrument":{"type":"string","example":"hyperliquid:BTC"},"side":{"type":"string","enum":["buy","sell"]},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"In the base asset; a multiple of the instrument's lot."},"reason":{"type":"string","maxLength":500,"description":"Why, in your own words. Stored with the order and shown in its history."},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A limit price, valid under the instrument's tick rule."}},"required":["type","instrument","side","size","price"]},{"type":"object","properties":{"type":{"type":"string","enum":["ioc"]},"instrument":{"type":"string","example":"hyperliquid:BTC"},"side":{"type":"string","enum":["buy","sell"]},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"In the base asset; a multiple of the instrument's lot."},"reason":{"type":"string","maxLength":500,"description":"Why, in your own words. Stored with the order and shown in its history."},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A limit price, valid under the instrument's tick rule."}},"required":["type","instrument","side","size","price"]}]},"OrderPreview":{"type":"object","properties":{"instrument":{"type":"string"},"takes":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The size that would take from the visible book now: all of it for a market order, up to the limit for limit and IOC, none for post-only."},"rests":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The size that would rest at the limit: the rest of a limit or post-only order; none for market and IOC."},"price":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The average price of what would take and rest; null when nothing would."},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"What would take and rest, at those prices, in the quote asset."},"fee":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The taker fee on what would take plus the maker fee on what would rest, should it fill."},"feeAsset":{"type":"string"},"leverageCap":{"type":"number","description":"The lower of the venue's maximum for this notional and your profile's cap for the asset class. Cross margin: nothing to choose per order."},"initialMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The account's initial margin with this order filled in full, beside its positions and resting orders."},"equity":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"available":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"equity − initialMargin: what would be left for the next order."},"refusal":{"type":["string","null"],"description":"Why the order would be rejected if it arrived now, as the order would say it; null when it would be accepted."},"bookTime":{"type":["integer","null"],"description":"Venue time of the book it was worked out on; null before the venue's first book for the instrument, when nothing takes and margin can't be reckoned yet. Ask again in a moment."}},"required":["instrument","takes","rests","price","notional","fee","feeAsset","leverageCap","initialMargin","equity","available","refusal","bookTime"],"description":"What an order would meet if it reached the venue now, worked out by the same checks an order meets on arrival, against the platform's copy of the book. Nothing is placed or recorded."},"CancelOrder":{"type":"object","properties":{"reason":{"type":"string","maxLength":500,"description":"Why, in your own words. Stored with the order and shown in its history."}}},"AmendOrder":{"type":"object","properties":{"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A limit price, valid under the instrument's tick rule."},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The new size still to fill."},"reason":{"type":"string","maxLength":500,"description":"Why, in your own words. Stored with the order and shown in its history."}}},"Margin":{"type":"object","properties":{"asset":{"type":"string","enum":["USDC"]},"balance":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"unrealisedPnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"At the mark."},"equity":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"balance + unrealisedPnl."},"initialMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The positions' initial margin."},"orderMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"What resting orders that add to a position hold on top."},"maintenanceMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The venue's, which would liquidate the account below it; the platform closes positions sooner, at closeOut."},"closeOut":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Below this equity the platform closes positions, largest loss first: under eu-retail, half the initial margin the open positions opened with."},"available":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"equity − initialMargin − orderMargin: what a new order can use."},"positions":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"assetClass":{"type":"string","enum":["crypto","stock","other","commodity","minorIndex","gold","majorIndex","minorFx","majorFx"],"description":"ESMA's classes: crypto; stock (single stocks); other (ETFs, bonds, rates and other reference values); commodity (other than gold); minorIndex; gold; majorIndex (FTSE 100, CAC 40, DAX, Dow Jones, S&P 500, Nasdaq, Nasdaq 100, Nikkei 225, ASX 200, Euro Stoxx 50); minorFx; majorFx (two of USD, EUR, JPY, GBP, CAD, CHF). An instrument the platform has not classified is crypto, the class with the lowest cap."},"size":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"markPrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The mark, or the book mid before the first mark arrives."},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"leverageCap":{"type":"number","description":"The lower of the venue's maximum for this notional and your profile's cap for the asset class."},"initialMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"notional / leverageCap."},"maintenanceMargin":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The venue's: half the initial margin at its maximum leverage, by margin tier."},"unrealisedPnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"liquidationPrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The mark at which the account's equity would fall to its closeOut line, your other positions held where they are; null if no price would do it."}},"required":["instrument","assetClass","size","markPrice","notional","leverageCap","initialMargin","maintenanceMargin","unrealisedPnl","liquidationPrice"]}}},"required":["asset","balance","unrealisedPnl","equity","initialMargin","orderMargin","maintenanceMargin","closeOut","available","positions"],"description":"Cross margin over every position, in USDC."},"PlaceAlarm":{"type":"object","properties":{"instrument":{"type":"string","example":"hyperliquid:BTC"},"direction":{"type":"string","enum":["above","below"],"description":"above: goes off when the mark price is at or above the price. below: at or below."},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"reason":{"type":"string","maxLength":500,"description":"Why, in your own words. Stored with the order and shown in its history."}},"required":["instrument","direction","price"]},"Health":{"type":"object","properties":{"now":{"type":"integer","description":"When this answer was made."},"startedAt":{"type":"integer","description":"When the platform process started."},"venues":{"type":"object","properties":{"hyperliquid":{"type":"object","properties":{"connectedAt":{"type":["integer","null"],"description":"When the current socket to the venue opened; null while there is none."},"lastMessageAt":{"type":["integer","null"],"description":"When the last message from the venue arrived; null before the first."},"opens":{"type":"integer","description":"Sockets opened since the platform started."},"lastClose":{"type":["object","null"],"properties":{"at":{"type":"integer","description":"Unix time in milliseconds."},"code":{"type":"integer"},"reason":{"type":"string"}},"required":["at","code","reason"],"description":"The venue socket's last close, with the websocket close code and reason; null before the first."},"subscriptions":{"type":"integer","description":"Channels listened to now, one per channel and instrument, not counting those waiting."},"waiting":{"type":"integer","description":"Channels the venue took on an earlier socket and refused on this one, as when it still counts a dead socket's channels against its 1,000. Not counted in subscriptions; sent again every 30 s until it takes them."},"refused":{"type":"integer","description":"Subscriptions the venue refused since the platform started that it had never taken; their listeners got its reason."},"feedAgeMs":{"type":["integer","null"],"description":"Milliseconds since lastMessageAt; null before the first message."}},"required":["connectedAt","lastMessageAt","opens","lastClose","subscriptions","waiting","refused","feedAgeMs"]},"kraken":{"type":"object","properties":{"connectedAt":{"type":["integer","null"],"description":"When the current socket to the venue opened; null while there is none."},"lastMessageAt":{"type":["integer","null"],"description":"When the last message from the venue arrived; null before the first."},"opens":{"type":"integer","description":"Sockets opened since the platform started."},"lastClose":{"type":["object","null"],"properties":{"at":{"type":"integer","description":"Unix time in milliseconds."},"code":{"type":"integer"},"reason":{"type":"string"}},"required":["at","code","reason"],"description":"The venue socket's last close, with the websocket close code and reason; null before the first."},"subscriptions":{"type":"integer","description":"Channels listened to now, one per channel and instrument, not counting those waiting."},"waiting":{"type":"integer","description":"Channels the venue took on an earlier socket and refused on this one, as when it still counts a dead socket's channels against its 1,000. Not counted in subscriptions; sent again every 30 s until it takes them."},"refused":{"type":"integer","description":"Subscriptions the venue refused since the platform started that it had never taken; their listeners got its reason."},"feedAgeMs":{"type":["integer","null"],"description":"Milliseconds since lastMessageAt; null before the first message."}},"required":["connectedAt","lastMessageAt","opens","lastClose","subscriptions","waiting","refused","feedAgeMs"]},"krakenFutures":{"type":"object","properties":{"connectedAt":{"type":["integer","null"],"description":"When the current socket to the venue opened; null while there is none."},"lastMessageAt":{"type":["integer","null"],"description":"When the last message from the venue arrived; null before the first."},"opens":{"type":"integer","description":"Sockets opened since the platform started."},"lastClose":{"type":["object","null"],"properties":{"at":{"type":"integer","description":"Unix time in milliseconds."},"code":{"type":"integer"},"reason":{"type":"string"}},"required":["at","code","reason"],"description":"The venue socket's last close, with the websocket close code and reason; null before the first."},"subscriptions":{"type":"integer","description":"Channels listened to now, one per channel and instrument, not counting those waiting."},"waiting":{"type":"integer","description":"Channels the venue took on an earlier socket and refused on this one, as when it still counts a dead socket's channels against its 1,000. Not counted in subscriptions; sent again every 30 s until it takes them."},"refused":{"type":"integer","description":"Subscriptions the venue refused since the platform started that it had never taken; their listeners got its reason."},"feedAgeMs":{"type":["integer","null"],"description":"Milliseconds since lastMessageAt; null before the first message."}},"required":["connectedAt","lastMessageAt","opens","lastClose","subscriptions","waiting","refused","feedAgeMs"]}},"description":"Each venue's live feed, as its adapter recorded it."},"disk":{"type":"object","properties":{"freeBytes":{"type":"integer","description":"Bytes the platform can still write."},"totalBytes":{"type":"integer","description":"Size of the disk."}},"required":["freeBytes","totalBytes"],"description":"The disk that holds the catalogue, the ledger and the recordings."},"errors":{"type":"integer","description":"Error lines the platform has logged since it started."}},"required":["now","startedAt","venues","disk","errors"]},"LeaderRow":{"type":"object","properties":{"account":{"type":"string"},"name":{"type":"string","description":"The display name."},"since":{"type":"integer","description":"When the account was made; the row covers its whole life since."},"return":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Equity now, less any loss the platform absorbed, / starting equity − 1: the scoreboard's return over the account's life. A fraction: 0.01 is 1%."},"againstHolding":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"return less the mean return of buying and holding each instrument the account held, over the same span, before fees: 0.01 means it beat holding by one percentage point. Null when it held nothing, or no instrument had prices. For a caller whose account was not granted private-class data, over the showable instruments it held. A fraction: 0.01 is 1%."},"maxDrawdown":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The deepest fall of equity from its highest point before, by minute: zero or negative. A fraction: 0.01 is 1%."},"fills":{"type":"integer","description":"Fills over its life."}},"required":["account","name","since","return","againstHolding","maxDrawdown","fills"],"description":"One account on the leaderboard."},"ScoreRow":{"type":"object","properties":{"account":{"type":"string"},"name":{"type":"string"},"from":{"type":"integer","description":"Where the span starts: the start asked for, or when the account was made, whichever is later."},"to":{"type":"integer","description":"Where the span ends: the end asked for, or the last minute's turn, whichever is earlier."},"startEquity":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The last equity point at or before from; the starting balance before the first."},"endEquity":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The last equity point at or before to."},"absorbed":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"What the platform took on in the span: a loss past a zero balance, which eu-retail's close-out stops at zero (an absorbed event). It is the account's loss all the same."},"return":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"(endEquity − absorbed) / startEquity − 1: of equity before the platform absorbed anything. A fraction: 0.01 is 1%."},"maxDrawdown":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"The deepest fall of equity, less what was absorbed by then, from its highest point before, by minute, over the span: zero or negative. A fraction: 0.01 is 1%."},"fees":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Fees paid on fills in the span."},"funding":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Funding received (positive) or paid (negative) in the span."},"fills":{"type":"integer","description":"Fills in the span."},"buyAndHold":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"startPrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The open of the 1-minute candle that holds from; null if the venue has none."},"endPrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The open of the 1-minute candle that holds to."},"return":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"Of buying at startPrice and holding to endPrice, before fees: endPrice / startPrice − 1; null without both. A fraction: 0.01 is 1%."}},"required":["instrument","startPrice","endPrice","return"]},"description":"Each instrument the account held in the span: filled in it, or open at its start."}},"required":["account","name","from","to","startEquity","endEquity","absorbed","return","maxDrawdown","fees","funding","fills","buyAndHold"],"description":"How one account did over a span, in USDC."},"Market":{"type":"object","properties":{"markPrice":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"midPrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"oraclePrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"Null for spot."},"fundingRate":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The current hourly rate; null for spot."},"openInterest":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"dayVolume":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Notional traded over the last 24 hours, in the quote currency."},"instrument":{"type":"string","example":"hyperliquid:BTC"},"readAt":{"type":"integer","description":"When the venue's summary was read; at most 30 s before the answer."},"bestBid":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The best bid in the venue's live book or its ticker; null before the first or while the side is empty."},"bestAsk":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"A decimal number as a string, exact."},"spreadBp":{"type":["number","null"],"description":"(bestAsk − bestBid) / mid, in basis points; null without both."},"bookTime":{"type":["integer","null"],"description":"When the bid and ask were the venue's: the book's venue time, or the ticker read's."},"dayAgoPrice":{"type":["string","null"],"pattern":"^-?\\d+(\\.\\d+)?$","description":"The price 24 hours before, as the venue reports it; null where it reports none (Kraken spot gives only the day's open)."}},"required":["markPrice","midPrice","oraclePrice","fundingRate","openInterest","dayVolume","instrument","readAt","bestBid","bestAsk","spreadBp","bookTime","dayAgoPrice"]}},"parameters":{}},"paths":{"/v1/instruments":{"get":{"summary":"List instruments","description":"Everything the platform lists, with each venue's rules: lot and tick, minimum order value, maximum leverage and margin tiers, maker and taker fees, funding interval and trading hours, re-read from each venue daily; and its asset class, which the platform assigns and your rule profile's leverage cap depends on. Private-class instruments (Kraken) are listed only to an account the admin granted them.","security":[{"key":[]},{}],"parameters":[{"schema":{"type":"string","enum":["hyperliquid","kraken","krakenFutures"],"description":"The venue an instrument trades on. kraken is Kraken spot; krakenFutures is Kraken Futures, a separate exchange."},"required":false,"description":"The venue an instrument trades on. kraken is Kraken spot; krakenFutures is Kraken Futures, a separate exchange.","name":"venue","in":"query"},{"schema":{"type":"string","enum":["perpetual","spot"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string","enum":["crypto","stock","other","commodity","minorIndex","gold","majorIndex","minorFx","majorFx"],"description":"ESMA's classes: crypto; stock (single stocks); other (ETFs, bonds, rates and other reference values); commodity (other than gold); minorIndex; gold; majorIndex (FTSE 100, CAC 40, DAX, Dow Jones, S&P 500, Nasdaq, Nasdaq 100, Nikkei 225, ASX 200, Euro Stoxx 50); minorFx; majorFx (two of USD, EUR, JPY, GBP, CAD, CHF). An instrument the platform has not classified is crypto, the class with the lowest cap."},"required":false,"description":"ESMA's classes: crypto; stock (single stocks); other (ETFs, bonds, rates and other reference values); commodity (other than gold); minorIndex; gold; majorIndex (FTSE 100, CAC 40, DAX, Dow Jones, S&P 500, Nasdaq, Nasdaq 100, Nikkei 225, ASX 200, Euro Stoxx 50); minorFx; majorFx (two of USD, EUR, JPY, GBP, CAD, CHF). An instrument the platform has not classified is crypto, the class with the lowest cap.","name":"assetClass","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Return delisted instruments instead of live ones."},"required":false,"description":"Return delisted instruments instead of live ones.","name":"delisted","in":"query"}],"responses":{"200":{"description":"The instruments, ordered by id.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Instrument"}}}}}}}},"/v1/book":{"get":{"summary":"Order book","description":"The venue's order book now, up to 20 levels a side.","security":[{"key":[]},{}],"parameters":[{"schema":{"type":"string","example":"hyperliquid:BTC","description":"An instrument id from /v1/instruments."},"required":true,"description":"An instrument id from /v1/instruments.","name":"instrument","in":"query"}],"responses":{"200":{"description":"The book.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Book"}}}},"401":{"description":"A private-class instrument, and no key or a key the platform does not know.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No instrument with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The venue's request budget this minute is spent: the key's, its person's, all people's keys' or every key's; or, with no key or session, this address's share, or that of every caller without one.","headers":{"Retry-After":{"schema":{"type":"string","description":"With a key: the seconds until the spent budget turns."},"required":false,"description":"With a key: the seconds until the spent budget turns."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/trades":{"get":{"summary":"Recent trades","description":"The most recent trades on the venue, newest first.","security":[{"key":[]},{}],"parameters":[{"schema":{"type":"string","example":"hyperliquid:BTC","description":"An instrument id from /v1/instruments."},"required":true,"description":"An instrument id from /v1/instruments.","name":"instrument","in":"query"}],"responses":{"200":{"description":"The trades.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Trade"}}}}},"401":{"description":"A private-class instrument, and no key or a key the platform does not know.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No instrument with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The venue's request budget this minute is spent: the key's, its person's, all people's keys' or every key's; or, with no key or session, this address's share, or that of every caller without one.","headers":{"Retry-After":{"schema":{"type":"string","description":"With a key: the seconds until the spent budget turns."},"required":false,"description":"With a key: the seconds until the spent budget turns."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/candles":{"get":{"summary":"Candles","description":"Candles that open between start and end, oldest first. The venue returns at most 5,000 per call; page by moving start.","security":[{"key":[]},{}],"parameters":[{"schema":{"type":"string","example":"hyperliquid:BTC","description":"An instrument id from /v1/instruments."},"required":true,"description":"An instrument id from /v1/instruments.","name":"instrument","in":"query"},{"schema":{"type":"string","enum":["1m","3m","5m","15m","30m","1h","2h","4h","8h","12h","1d","3d","1w","1M"]},"required":true,"name":"interval","in":"query"},{"schema":{"type":["integer","null"],"description":"From, Unix milliseconds."},"required":false,"description":"From, Unix milliseconds.","name":"start","in":"query"},{"schema":{"type":["integer","null"],"description":"To, Unix milliseconds."},"required":false,"description":"To, Unix milliseconds.","name":"end","in":"query"}],"responses":{"200":{"description":"The candles.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Candle"}}}}},"401":{"description":"A private-class instrument, and no key or a key the platform does not know.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No instrument with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The venue's request budget this minute is spent: the key's, its person's, all people's keys' or every key's; or, with no key or session, this address's share, or that of every caller without one.","headers":{"Retry-After":{"schema":{"type":"string","description":"With a key: the seconds until the spent budget turns."},"required":false,"description":"With a key: the seconds until the spent budget turns."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/funding":{"get":{"summary":"Funding history","description":"Funding rates settled between start and end, oldest first, for perpetuals. The venue returns at most 500 per call; page by moving start.","security":[{"key":[]},{}],"parameters":[{"schema":{"type":"string","example":"hyperliquid:BTC","description":"An instrument id from /v1/instruments."},"required":true,"description":"An instrument id from /v1/instruments.","name":"instrument","in":"query"},{"schema":{"type":["integer","null"],"description":"From, Unix milliseconds."},"required":false,"description":"From, Unix milliseconds.","name":"start","in":"query"},{"schema":{"type":["integer","null"],"description":"To, Unix milliseconds."},"required":false,"description":"To, Unix milliseconds.","name":"end","in":"query"}],"responses":{"200":{"description":"The funding settlements.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Funding"}}}}},"400":{"description":"A spot instrument, which has no funding.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"A private-class instrument, and no key or a key the platform does not know.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No instrument with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The venue's request budget this minute is spent: the key's, its person's, all people's keys' or every key's; or, with no key or session, this address's share, or that of every caller without one.","headers":{"Retry-After":{"schema":{"type":"string","description":"With a key: the seconds until the spent budget turns."},"required":false,"description":"With a key: the seconds until the spent budget turns."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/signup/options":{"post":{"summary":"Start signing up","description":"Checks the invite when there is one, then returns the options for a new passkey. With sign-up open an invite is optional; one that is given must still be usable, and is used. An invite is made by the admin command, is used once and expires.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":24,"pattern":"^[\\p{L}\\p{N}][\\p{L}\\p{N} '_-]*$/u","description":"A display name, shown to other people on the leaderboard: at most 24 letters, digits, spaces, hyphens, underscores or apostrophes."},"email":{"type":"string","maxLength":254,"description":"An email address."}},"required":["name","email"]}}}},"responses":{"200":{"description":"The ceremony and its options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CeremonyOptions"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/signup":{"post":{"summary":"Sign up","description":"Verifies the new passkey, uses the invite if there is one, makes the person and their eu-retail account with $10000 of play money, signs them in, and mails a code to confirm the email. The account is usable once it is confirmed.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ceremony":{"type":"string"},"response":{"$ref":"#/components/schemas/RegistrationResponse"}},"required":["ceremony","response"]}}}},"responses":{"200":{"description":"The person, signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/email/verify":{"post":{"summary":"Confirm the email","description":"Confirms the address the code was mailed to, which makes the person's account usable. Needs no session, so the link works on any device.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"The code from the mail, which its link carries."}},"required":["code"]}}}},"responses":{"200":{"description":"Done.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/email/resend":{"post":{"summary":"Mail the confirmation again","description":"Mails a new confirmation code to the signed-in person, whose email is not yet confirmed.","responses":{"200":{"description":"Done.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/recover":{"post":{"summary":"Ask for a recovery code","description":"Mails a recovery code to the address if it belongs to a person who confirmed it. The answer is the same either way.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"description":"An email address."}},"required":["email"]}}}},"responses":{"200":{"description":"Done.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/recover/options":{"post":{"summary":"Start adding a passkey with a recovery code","description":"Checks the code, then returns the options for a new passkey for its person.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"The code from the mail, which its link carries."}},"required":["code"]}}}},"responses":{"200":{"description":"The ceremony and its options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CeremonyOptions"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/recover/passkey":{"post":{"summary":"Add a passkey with a recovery code","description":"Verifies the new passkey, uses the code, adds the passkey and signs the person in with it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ceremony":{"type":"string"},"response":{"$ref":"#/components/schemas/RegistrationResponse"}},"required":["ceremony","response"]}}}},"responses":{"200":{"description":"The person, signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/login/options":{"post":{"summary":"Start signing in","description":"Returns the options for navigator.credentials.get(), for any of this arena's passkeys.","responses":{"200":{"description":"The ceremony and its options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CeremonyOptions"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/login":{"post":{"summary":"Sign in","description":"Verifies the passkey and sets the session cookie.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ceremony":{"type":"string"},"response":{"$ref":"#/components/schemas/AuthenticationResponse"}},"required":["ceremony","response"]}}}},"responses":{"200":{"description":"The person, signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/logout":{"post":{"summary":"Sign out","description":"Ends the session and clears its cookie.","responses":{"200":{"description":"Signed out.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/me":{"get":{"summary":"Who is signed in","description":"The signed-in person, their account and their passkeys.","responses":{"200":{"description":"The person.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/passkeys/options":{"post":{"summary":"Start adding a passkey","description":"Returns the options for another passkey for the signed-in person, so losing one device does not lose the account.","responses":{"200":{"description":"The ceremony and its options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CeremonyOptions"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/passkeys":{"post":{"summary":"Add a passkey","description":"Verifies the new passkey and adds it to the signed-in person.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ceremony":{"type":"string"},"response":{"$ref":"#/components/schemas/RegistrationResponse"}},"required":["ceremony","response"]}}}},"responses":{"200":{"description":"The person, with the new passkey.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/export":{"get":{"summary":"Download your data","description":"Everything the arena keeps about the signed-in person and their account, as one JSON file.","responses":{"200":{"description":"The data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/delete/options":{"post":{"summary":"Start deleting your account","description":"Returns the options for navigator.credentials.get(), for one of the signed-in person's passkeys.","responses":{"200":{"description":"The ceremony and its options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CeremonyOptions"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/delete":{"post":{"summary":"Delete your account","description":"Verifies the passkey, then ends the person's sessions and keys, cancels their resting orders, and erases the person, their email, passkeys, codes and keys, and their account's orders, fills, positions, events, alarms and equity. Invites they used stay used, with no link to them. What is left is a record that a deletion happened, with how many rows went and nothing about who. The server's daily snapshots keep the data up to 7 days.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ceremony":{"type":"string"},"response":{"$ref":"#/components/schemas/AuthenticationResponse"}},"required":["ceremony","response"]}}}},"responses":{"200":{"description":"What went.","content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer","description":"Unix time in milliseconds."},"rows":{"type":"object","additionalProperties":{"type":"integer"}}},"required":["at","rows"]}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/keys":{"get":{"summary":"Your keys","description":"The signed-in person's trader keys, revoked ones too, oldest first. The keys themselves were shown once, when made.","responses":{"200":{"description":"The keys.","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["trader"]},"id":{"type":"string"},"name":{"type":"string","description":"Given by whoever made the key."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"revokedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"accountId":{"type":"string"}},"required":["kind","id","name","createdAt","revokedAt","accountId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["viewer"]},"id":{"type":"string"},"name":{"type":"string","description":"Given by whoever made the key."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"revokedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"accounts":{"type":"array","items":{"type":"string"},"description":"The accounts it was granted."}},"required":["kind","id","name","createdAt","revokedAt","accounts"]}]}}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Make a key","description":"A new trader key to the signed-in person's account, for a program to use as Authorization: Bearer <key>. It is shown once; only its hash is kept. At most 10 live keys a person.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":40,"description":"What the key is for."}},"required":["name"]}}}},"responses":{"200":{"description":"The key and its record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MadeKey"}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/keys/{id}/revoke":{"post":{"summary":"Revoke a key","description":"The key is refused from then on. One already revoked stays as it was.","parameters":[{"schema":{"type":"string","description":"A key id from /v1/auth/keys."},"required":true,"description":"A key id from /v1/auth/keys.","name":"id","in":"path"}],"responses":{"200":{"description":"The key, revoked.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["trader"]},"id":{"type":"string"},"name":{"type":"string","description":"Given by whoever made the key."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"revokedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"accountId":{"type":"string"}},"required":["kind","id","name","createdAt","revokedAt","accountId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["viewer"]},"id":{"type":"string"},"name":{"type":"string","description":"Given by whoever made the key."},"createdAt":{"type":"integer","description":"Unix time in milliseconds."},"revokedAt":{"type":["integer","null"],"description":"Unix time in milliseconds."},"accounts":{"type":"array","items":{"type":"string"},"description":"The accounts it was granted."}},"required":["kind","id","name","createdAt","revokedAt","accounts"]}]}}}},"400":{"description":"The invite, the email, the code or the passkey was refused; the error says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not signed in.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The request didn't come from a page of the arena's own origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"This person has no key with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Past a limit: ceremonies or mails from this address, sign-ups with this email, mails to this address, or new accounts this hour; the error says which and when to try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/accounts":{"get":{"summary":"Accounts you can read","description":"A trader key's own account, or the accounts a viewer key was granted.","security":[{"key":[]}],"responses":{"200":{"description":"The accounts, by id.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Account"}}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account":{"get":{"summary":"Your account","description":"The account your key belongs to, or the one a viewer key names: its name, rule profile, starting balance and balances now.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"}],"responses":{"200":{"description":"The account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/positions":{"get":{"summary":"Positions","description":"Every instrument the account has traded: size, average entry, realised profit and loss, fees paid, and funding received or paid.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"}],"responses":{"200":{"description":"The positions, by instrument.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Position"}}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/orders":{"post":{"summary":"Place an order","description":"Answers once the order has reached the venue and met the book, usually under a second after you send it on Hyperliquid: filled, resting, cancelled or rejected. A breach of the instrument's rules is a rejected order, recorded like any other.","security":[{"key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceOrder"}}}},"responses":{"200":{"description":"The order as it stands after arrival.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A viewer key, which reads only; or a private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No instrument with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"summary":"Order history","description":"Your orders, newest first, by the time they were sent; with open=true, every order still pending or resting.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"},{"schema":{"type":["integer","null"],"description":"From, Unix milliseconds."},"required":false,"description":"From, Unix milliseconds.","name":"start","in":"query"},{"schema":{"type":["integer","null"],"description":"To, Unix milliseconds."},"required":false,"description":"To, Unix milliseconds.","name":"end","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"description":"At most this many, newest first; page by moving end."},"required":false,"description":"At most this many, newest first; page by moving end.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false"},"required":false,"name":"open","in":"query"}],"responses":{"200":{"description":"The orders.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Order"}}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/orders/preview":{"post":{"summary":"Preview an order","description":"What the order would meet if it reached the venue now: the size that would take and rest, the average price, notional and fee, the leverage cap, the account's initial margin and what would be left with it filled, and why it would be rejected, if it would. The same checks an order meets on arrival, against the same copy of the book. Nothing is placed or recorded.","security":[{"key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceOrder"}}}},"responses":{"200":{"description":"The preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderPreview"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A viewer key, which reads only; or a private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No instrument with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/orders/{id}":{"get":{"summary":"One order","description":"One order as it stands now, with its queue position while it rests.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"An order id from /v1/orders."},"required":true,"description":"An order id from /v1/orders.","name":"id","in":"path"},{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"}],"responses":{"200":{"description":"The order.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"This key has no order with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/orders/{id}/cancel":{"post":{"summary":"Cancel an order","description":"Takes effect when it reaches the venue, so the order can still fill on the way. Answers then, with the order.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"An order id from /v1/orders."},"required":true,"description":"An order id from /v1/orders.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelOrder"}}}},"responses":{"200":{"description":"The order after the cancel arrived.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A viewer key, which reads only; or a private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"This key has no order with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/orders/{id}/amend":{"post":{"summary":"Amend an order","description":"Changes a resting order's price, size still to fill, or both, when it reaches the venue. The order goes to the back of the queue at its price and is checked as a new order; if the check fails, it stays as it was and the ledger says why.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"An order id from /v1/orders."},"required":true,"description":"An order id from /v1/orders.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmendOrder"}}}},"responses":{"200":{"description":"The order after the amend arrived.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A viewer key, which reads only; or a private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"This key has no order with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fills":{"get":{"summary":"Fills","description":"Every fill, newest first: price, size, maker or taker, fee, and slippage against the mid.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"},{"schema":{"type":["integer","null"],"description":"From, Unix milliseconds."},"required":false,"description":"From, Unix milliseconds.","name":"start","in":"query"},{"schema":{"type":["integer","null"],"description":"To, Unix milliseconds."},"required":false,"description":"To, Unix milliseconds.","name":"end","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"description":"At most this many, newest first; page by moving end."},"required":false,"description":"At most this many, newest first; page by moving end.","name":"limit","in":"query"}],"responses":{"200":{"description":"The fills, as ledger events of kind fill.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LedgerEvent"}}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ledger":{"get":{"summary":"Ledger","description":"Everything that happened to your account, newest first: each order sent, rested, filled, cancelled, amended or rejected, with the platform's message and your reason; funding paid or received; alarms that went off; margin calls; positions closed out; losses the platform absorbed; adjustments by the admin. The account stream sends the same events as they happen, all but the admin's adjustments.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"},{"schema":{"type":["integer","null"],"description":"From, Unix milliseconds."},"required":false,"description":"From, Unix milliseconds.","name":"start","in":"query"},{"schema":{"type":["integer","null"],"description":"To, Unix milliseconds."},"required":false,"description":"To, Unix milliseconds.","name":"end","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"description":"At most this many, newest first; page by moving end."},"required":false,"description":"At most this many, newest first; page by moving end.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["sent","rejected","rested","fill","cancelled","cancelFailed","amended","amendFailed","funding","alarm","marginCall","closedOut","absorbed","adjusted"],"description":"Only events of this kind."},"required":false,"description":"Only events of this kind.","name":"kind","in":"query"}],"responses":{"200":{"description":"The events.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LedgerEvent"}}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/margin":{"get":{"summary":"Margin","description":"Equity, margin used and maintenance margin now, at the mark, and for each open position its leverage cap, margins and liquidation price. An order that would need more initial margin than the equity is rejected; equity below the positions' initial margin sends a margin call; below closeOut the platform closes positions at the live book.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"}],"responses":{"200":{"description":"The margin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Margin"}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/equity":{"get":{"summary":"Equity history","description":"The account's equity, newest first, at each minute's turn when it differed from the point before: every minute while a position moves with the mark, once when the account goes flat, and nothing while it stays the same. Between two points equity held at the earlier one; the equity at a time t is the first point of end=t&limit=1.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"},{"schema":{"type":["integer","null"],"description":"From, Unix milliseconds."},"required":false,"description":"From, Unix milliseconds.","name":"start","in":"query"},{"schema":{"type":["integer","null"],"description":"To, Unix milliseconds."},"required":false,"description":"To, Unix milliseconds.","name":"end","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"description":"At most this many, newest first; page by moving end."},"required":false,"description":"At most this many, newest first; page by moving end.","name":"limit","in":"query"}],"responses":{"200":{"description":"The equity by minute.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EquityPoint"}}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/alarms":{"get":{"summary":"Alarms","description":"Your alarms, newest first: active, fired or cancelled.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted."},"required":false,"description":"The account to read, from /v1/accounts. A trader key may leave it out; a viewer key names one it was granted.","name":"account","in":"query"},{"schema":{"type":["integer","null"],"description":"From, Unix milliseconds."},"required":false,"description":"From, Unix milliseconds.","name":"start","in":"query"},{"schema":{"type":["integer","null"],"description":"To, Unix milliseconds."},"required":false,"description":"To, Unix milliseconds.","name":"end","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"description":"At most this many, newest first; page by moving end."},"required":false,"description":"At most this many, newest first; page by moving end.","name":"limit","in":"query"}],"responses":{"200":{"description":"The alarms.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Alarm"}}}}},"400":{"description":"A viewer key that names no account, or a bad parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A trader key naming another account, or a viewer key naming one it was not granted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Set an alarm","description":"Goes off once, on the first mark price at or above (above) or at or below (below) its price, and sends an alarm event on the account stream. If the mark is already past the price it goes off on the next mark. Use it to be woken when a price you care about is reached.","security":[{"key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceAlarm"}}}},"responses":{"200":{"description":"The alarm.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alarm"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A viewer key, which reads only; or a private-class instrument, and an account the admin did not grant private-class data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No instrument with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/alarms/{id}/cancel":{"post":{"summary":"Cancel an alarm","description":"An active alarm is cancelled; one that went off stays as it was.","security":[{"key":[]}],"parameters":[{"schema":{"type":"string","description":"An alarm id from /v1/alarms."},"required":true,"description":"An alarm id from /v1/alarms.","name":"id","in":"path"}],"responses":{"200":{"description":"The alarm.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alarm"}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A viewer key, which reads only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"This key has no alarm with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/health":{"get":{"summary":"Health","description":"What the platform has seen since it started: each venue feed's connects, closes, last message, channels waiting to be taken again and refused subscriptions, the free space on its data disk, and how many errors it has logged.","responses":{"200":{"description":"The facts now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/v1/leaderboard":{"get":{"summary":"Leaderboard","description":"Every account on the platform, yours or not, over its whole life: display name, return, return against holding what it held, deepest drawdown and fills, worked out as /v1/scoreboard works them out. It shows no account's orders, fills, positions, instruments or reasons; those stay with the account's own keys. Any key or session reads it.","security":[{"key":[]}],"responses":{"200":{"description":"Best return first; accounts with no fill yet come after every account with one. An account the admin retired is left out.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LeaderRow"}}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/scoreboard":{"get":{"summary":"Scoreboard","description":"For each account your key can read (see /v1/accounts): its equity at the start and end of the span, return, deepest drawdown, fees, funding and fills, and what holding each instrument it held would have made over the same span. By default the span is the account's whole life; a run that ended reads best with start and end set to the run's.","security":[{"key":[]}],"parameters":[{"schema":{"type":["integer","null"],"description":"From, Unix milliseconds."},"required":false,"description":"From, Unix milliseconds.","name":"start","in":"query"},{"schema":{"type":["integer","null"],"description":"To, Unix milliseconds."},"required":false,"description":"To, Unix milliseconds.","name":"end","in":"query"}],"responses":{"200":{"description":"One row per account, by id.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScoreRow"}}}}},"401":{"description":"No key, a key the platform does not know, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets":{"get":{"summary":"Market summary","description":"Every live instrument a venue summarises in one read: mark, oracle and mid, funding rate, open interest and 24 h volume as the venue last reported them, read at most every 30 s, and its best bid, best ask and spread. One call for the whole market, instead of a mark subscription per instrument. Hyperliquid: its perpetuals. Kraken and Kraken Futures: every pair and contract in their tickers, only to an account the admin granted private-class data.","security":[{"key":[]},{}],"parameters":[{"schema":{"type":"string","enum":["hyperliquid","kraken","krakenFutures"],"description":"The venue an instrument trades on. kraken is Kraken spot; krakenFutures is Kraken Futures, a separate exchange."},"required":false,"description":"The venue an instrument trades on. kraken is Kraken spot; krakenFutures is Kraken Futures, a separate exchange.","name":"venue","in":"query"}],"responses":{"200":{"description":"The markets, ordered by instrument id.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Market"}}}}}}}}},"webhooks":{}}