Orders auf Seeryx platzieren, bündeln und stornieren: Limit-, Market- und Post-Only-Orders, Idempotenzschlüssel, Ablaufregeln, Aufteilen und Zusammenlegen.
Du handelst mit POST /api/orders (eine Order) oder POST /api/orders/batch (bis zu 15), stornierst mit DELETE /api/orders/:id oder DELETE /api/orders und machst mit /api/split und /api/merge aus Guthaben Paare und zurück. Auf seeryx.com trägt jede Order, Aufteilung und Zusammenlegung ein signed-Objekt, erstellt von deinem Sitzungsschlüssel: Orders signieren zeigt, wie; die Beispiele auf dieser Seite erledigen das für dich.
Bei jedem POST und DELETE, das handelt: 8–128 Buchstaben, Ziffern, _ oder -, neu für jeden Vorgang. Derselbe Schlüssel mit demselben Body liefert die Antwort der ersten Anfrage und ändert nichts; mit einem anderen Body wird er abgelehnt. Schlüssel werden 24 Stunden lang gespeichert.
Wird sofort gegen das ausgeführt, was zu ihrem Preis oder besser angeboten wird; der Rest liegt im Orderbuch, bis er ausgeführt wird, du ihn stornierst oder die Runde endet.
Limit, Post-Only
shares, limit, postOnly: true
Liegt vollständig im Orderbuch oder wird abgelehnt (400 would_take): Sie nimmt nie Liquidität und zahlt daher nie die Taker-Gebühr.
Market-Kauf
amount, cap
Gibt sofort bis zu amount USDC (inklusive Gebühr) zu Preisen bis cap aus; der Rest verfällt und wird nie ins Orderbuch gelegt.
Market-Verkauf
shares, cap
Verkauft sofort bis zu shares zu Preisen bis hinunter zu cap; der Rest verfällt.
Feld
Typ
Beschreibung
slugerforderlich
string
Eine Runde, die gehandelt wird (live oder demnächst), oder ein offener Ereignismarkt.
sideerforderlich
up | down
Der Ausgang, den du handelst (in einem Ereignismarkt ist JA up und NEIN down).
actionerforderlich
buy | sell
Ein Verkauf braucht Anteile, die du hältst und die keine andere Verkaufsorder im Orderbuch reserviert hat.
typeerforderlich
limit | market
Siehe oben.
sharesoptional
number
Limit-Orders und jeder Verkauf.
amountoptional
number
Market-Käufe: der Höchstbetrag in USDC, Taker-Gebühr inklusive.
limitoptional
number
Limit-Orders: der Preis in Cent.
capoptional
number
Market-Orders: der schlechteste Preis in Cent. Ein Kauf zahlt nicht mehr, ein Verkauf nimmt nicht weniger.
postOnlyoptional
boolean
Nur Limit-Orders.
signedoptional
object
Die von deinem Sitzungsschlüssel signierte Order (Orders signieren).
Du willst
Body (plus slug und signed)
10 Steigt zu 45¢ oder besser kaufen, im Orderbuch liegend
Eine Limit-Order im Orderbuch; ein ausgeführter Market-Kauf über 5 $; ein Market-Kauf, dessen cap unter dem besten Verkaufsangebot lag.
order ist die ID dessen, was im Orderbuch liegt, null, wenn nichts liegt. filled sind die jetzt gehandelten Anteile; spent und proceeds sind gezahlte und erhaltene USDC, inklusive Gebühren.
Eine Market-Order ergänzt requested, fee, avgPrice (Cent, ohne Gebühr), unspent oder unsold, status (filled, partial oder none) und, wenn sie nicht vollständig ausgeführt wurde, reason: no_liquidity, beyond_limit (mit bestPrice) oder share_limit.
Eine Market-Order, die nichts ausführt, ist trotzdem ein 200, kein Fehler.
Limit-Orders werden bis zum Ende des Marktes signiert (dem Rundenende oder dem closesAt eines Ereignisses) und liegen bis dahin im Orderbuch.
Market-Orders, Aufteilungen und Zusammenlegungen werden innerhalb von Sekunden abgewickelt; signiere sie daher für 5 Minuten, nie über das Ende hinaus. Der Server akzeptiert einen Ablauf von 5 Sekunden in der Zukunft bis zum Ende.
In den letzten 5 Sekunden einer Runde werden keine neuen Orders angenommen (400 „Round is closing“). Orders im Orderbuch laufen am Rundenende ab und erscheinen in deiner Aktivität als Typ expire.
Kommende Runden. Die nächsten zehn 5m- und 15m-Runden (bei 1h und 1d die nächste) nehmen bereits Orders an, sodass ein Bot eine Runde vor ihrem Beginn quotieren kann.
POST /api/orders/batch platziert bis zu 15 Orders in einer Anfrage, in der angegebenen Reihenfolge, jede mit ihren eigenen Prüfungen: Die Antwort enthält ein { status, body } pro Order, genau das, was POST /api/orders geantwortet hätte. Order i wird unter <your key>-<i> gespeichert, sodass eine Wiederholung der ganzen Sammelorder mit demselben Schlüssel nichts doppelt platziert. DELETE /api/orders storniert alle deine offenen Orders oder, mit ?slug=, die eines Marktes, in einer Transaktion.
curl
# two orders in one request (on seeryx.com each also carries its own "signed")curl-s-X POST https://seeryx.com/api/orders/batch \
-H"X-Auth-Token: $TOKEN"-H"Idempotency-Key: $(uuidgen)"-H"Content-Type: application/json" \
-d'{"orders":[{"slug":"btc-updown-5m-1791916200","side":"up","action":"buy","type":"limit","shares":5,"limit":40},
{"slug":"btc-updown-5m-1791916200","side":"down","action":"buy","type":"limit","shares":5,"limit":40}]}'# {"results":[{"status":200,"body":{"order":21306,...}},{"status":200,"body":{"order":21307,...}}]}# cancel everything still resting in the roundcurl-s-X DELETE "https://seeryx.com/api/orders?slug=btc-updown-5m-1791916200"-H"X-Auth-Token: $TOKEN"-H"Idempotency-Key: $(uuidgen)"# {"success":true,"cancelled":[21306,21307]}
POST /api/split mit { slug, amount } macht aus amount USDC ebenso viele Steigt- und Fällt-Anteile; POST /api/merge mit { slug, shares } macht aus Paaren wieder je 1,00 $. Keine Gebühr; mindestens 5 Paare; auf seeryx.com mit einer PMS1-Nachricht signiert.
Guthaben. Kauforders im Orderbuch blockieren kein Guthaben, aber alle deine offenen Kauforders in einem Markt müssen, mit der Taker-Gebühr zu ihrem Limit, in dein verfügbares Guthaben passen. Guthaben bewegt sich nur, wenn eine Order ausgeführt wird; eine Kauforder, die du nicht mehr bezahlen kannst, wird storniert.
Deine eigenen Orders. Eine Order kann gegen deine eigenen Orders im Orderbuch ausgeführt werden und zahlt dann wie jede andere die Taker-Gebühr; Post-Only lehnt eine solche Order stattdessen ab.
Orders im Orderbuch. Höchstens 200 pro Konto und 100 in einem Markt (400 open_orders_limit).
Anfragerate. 250 Order-, Storno-, Aufteilungs- und Zusammenlegungsanfragen pro 10 Sekunden und Konto; jede Order einer Sammelorder zählt (429 rate_limited). Siehe Ratenlimits und Fehler.
Limit-, Market- und Sammelorders, Stornierungen, eine Aufteilung und eine Zusammenlegung, mit seeryx.ts und chain.ts (oder ihren Python-Gegenstücken) daneben.
trading.ts
// trading.ts: limit, market and batch orders, cancels, split and merge. npx tsx trading.tsimport { api, loadWallet, signIn, type Book, type Round } from'./seeryx';
import { signOrder, signPair, tradingSession, type Funds, type Order } from'./chain';
const wallet = awaitloadWallet();
awaitsignIn(wallet);
const funds = await api<Funds>('/funds');
// where GET /api/funds says onChainTrading (always on seeryx.com) every order carries `signed`const session = funds.mode === 'chain' && funds.onChainTrading ? awaittradingSession(funds, wallet) : null;
const sign = async (order: Order) => (session ? signOrder(funds, session, wallet.address, order) : order);
const place = async (order: Order) =>
api<{ order: number | null }>('/orders', { method: 'POST', body: awaitsign(order) });
const { slug } = await api<Round>('/markets/BTC/5m/current');
const up = await api<Book>(`/orderbook/${slug}?side=up`), down = await api<Book>(`/orderbook/${slug}?side=down`);
const below = (book: Book, cents: number) => Math.max(1, Math.floor(book.asks[0]?.[0] ?? 50) - cents); // under the best ask// limit: buy 10 Up shares 5c under the best ask, resting in the book; postOnly refuses it if it would trade at onceconst limit = awaitplace({
slug, side: 'up', action: 'buy', type: 'limit', shares: 10, limit: below(up, 5), postOnly: true,
});
// market: spend up to $5 on Down, paying at most 2c over the best ask; what the book cannot fill is droppedconst cap = Math.min(99, Math.ceil(down.asks[0]?.[0] ?? 50) + 2);
const market = awaitplace({ slug, side: 'down', action: 'buy', type: 'market', amount: 5, cap });
console.log({ limit, market });
// up to 15 orders in one request, placed in this order; each answer is what POST /orders would have saidconst orders = await Promise.all([
sign({ slug, side: 'up', action: 'buy', type: 'limit', shares: 5, limit: below(up, 10) }),
sign({ slug, side: 'down', action: 'buy', type: 'limit', shares: 5, limit: below(down, 10) }),
]);
console.log({ batch: awaitapi('/orders/batch', { method: 'POST', body: { orders } }) });
// cancel one order, then everything still resting in this roundif (limit.order) awaitapi(`/orders/${limit.order}`, { method: 'DELETE' });
console.log({ cancelled: awaitapi(`/orders?slug=${slug}`, { method: 'DELETE' }) });
// split $5 into 5 Up + 5 Down shares, then merge them back into $5const pair = (merge: boolean) =>
(session ? signPair(funds, session, wallet.address, slug, merge, 5) : undefined);
awaitapi('/split', { method: 'POST', body: { slug, amount: 5, signed: awaitpair(false) } });
awaitapi('/merge', { method: 'POST', body: { slug, shares: 5, signed: awaitpair(true) } });
Wo GET /api/funds onChainTrading meldet (auf seeryx.com immer), trägt der Body außerdem "signed", erstellt von deinem Sitzungsschlüssel: siehe „Orders signieren“.
order ist die ID des Teils, der im Orderbuch liegt, null, wenn nichts liegt. filled sind die jetzt gehandelten Anteile; spent und proceeds sind gezahlte und erhaltene USDC, inklusive Gebühren.
Eine Market-Order liefert ihr Ergebnis vollständig: requested, fee, avgPrice (Cent, ohne Gebühr), unspent (bei einem Kauf) oder unsold (bei einem Verkauf), status "filled", "partial" oder "none" und bei weniger als vollständiger Ausführung einen reason: "no_liquidity" (das Orderbuch war erschöpft), "beyond_limit" mit bestPrice (der Rest liegt preislich jenseits deines cap) oder "share_limit" (ein in Anteilen signierter Market-Kauf hat sie alle unterhalb seines cap erhalten). Eine Market-Order, die nichts ausführt, ist trotzdem ein 200.
Status
Wann
400
Ungültige Eingabe („Invalid limit“, „Invalid slug“), „Round is not live“, „Round is closing“, „Insufficient balance“, „Insufficient free shares“, eine signierte Order, die nicht übereinstimmt
400 below_minimum
Weniger Anteile als minOrderShares; die Antwort ergänzt "minimum"
400 would_take
Eine Post-Only-Order, die sofort ausgeführt würde
400 open_orders_limit
Zu viele Orders im Orderbuch; die Antwort ergänzt "limit": { account, round }
400 trading_paused
Der Sitzungsschlüssel, der sie signiert hat, wurde geschlossen: Öffne eine neue Sitzung und signiere erneut
429 rate_limited
Mehr Order-Anfragen als pro Zeitfenster erlaubt; warte "retryAfter" Sekunden
503 trading_halted
Der Handel ist für alle angehalten (siehe GET /api/notice); Stornierungen funktionieren weiterhin
503
„Exchange clock unavailable“: Der Server kann die Rundenzeit nicht bestätigen; versuche es in ein paar Sekunden erneut
POST/api/orders/batch
Bis zu 15 Orders in einer Anfrage platzieren
Angemeldet + Idempotency-Key
Feld
Typ
Beschreibung
ordersBodyerforderlich
array
1 bis 15 Orders, jede genau der Body von POST /api/orders mit ihrem eigenen signed-Objekt
In der angegebenen Reihenfolge platziert, jede mit ihren eigenen Prüfungen; eine abgelehnte Order hält die anderen nicht auf. Jede Order zählt als eine Anfrage für das Ratenlimit.
Order i wird unter dem Idempotenzschlüssel <your key>-<i> gespeichert (i ab 0; dein Schlüssel höchstens 125 Zeichen), sodass eine Wiederholung der ganzen Sammelorder nichts doppelt platziert.
Status
Wann
400
orders ist keine Liste von 1 bis 15 Orders
429 rate_limited
Die Sammelorder würde die pro Zeitfenster erlaubten Order-Anfragen überschreiten