Inserisci, raggruppa e annulla ordini su Seeryx: ordini limite, a mercato e post-only, chiavi di idempotenza, scadenze, Dividi e Unisci, con esempi di codice.
Fai trading con POST /api/orders (un ordine) o POST /api/orders/batch (fino a 15), annulli con DELETE /api/orders/:id o DELETE /api/orders, e trasformi i fondi in coppie e viceversa con /api/split e /api/merge. Su seeryx.com ogni ordine, divisione e unione include un oggetto signed creato dalla tua chiave di sessione di trading: Firma degli ordini mostra come; gli esempi di questa pagina lo fanno per te.
Il token di accesso (oppure Authorization: Bearer).
Idempotency-Keyintestazioneobbligatorio
string
In ogni POST e DELETE che fa trading: da 8 a 128 caratteri tra lettere, cifre, _ o -, nuova per ogni operazione distinta. La stessa chiave con lo stesso corpo restituisce la risposta della prima richiesta e non cambia nulla; con un corpo diverso viene rifiutata. Le chiavi vengono ricordate per 24 ore.
Viene eseguito subito contro ciò che è offerto al suo prezzo o a un prezzo migliore, e il resto rimane nel libro ordini finché non viene eseguito, non lo annulli o il round non chiude.
Limite, post only
shares, limit, postOnly: true
Entra per intero nel libro ordini o viene rifiutato (400 would_take): non prende mai liquidità, quindi non paga mai la commissione taker.
Acquisto a mercato
amount, cap
Spende subito fino ad amount USDC (commissione inclusa) a prezzi fino a cap; il resto viene scartato, mai lasciato nel libro ordini.
Vendita a mercato
shares, cap
Vende subito fino a shares azioni a prezzi non inferiori a cap; il resto viene scartato.
Campo
Tipo
Descrizione
slugobbligatorio
string
Un round negoziabile (in corso o futuro) o un mercato su un evento aperto.
sideobbligatorio
up | down
L’esito che negozi (in un mercato su un evento, YES è up e NO è down).
actionobbligatorio
buy | sell
Una vendita richiede azioni che possiedi e che nessun’altra vendita in attesa ha già riservato.
typeobbligatorio
limit | market
Vedi sopra.
sharesfacoltativo
number
Ordini limite e tutte le vendite.
amountfacoltativo
number
Acquisti a mercato: il massimo in USDC da spendere, commissione taker inclusa.
limitfacoltativo
number
Ordini limite: il prezzo in centesimi.
capfacoltativo
number
Ordini a mercato: il prezzo peggiore in centesimi. Un acquisto non paga di più, una vendita non incassa di meno.
Un ordine limite in attesa; un acquisto a mercato da 5 $ eseguito; un acquisto a mercato il cui cap era sotto il miglior prezzo in vendita.
order è l’id di ciò che resta nel libro ordini, null quando non resta nulla. filled sono le azioni negoziate subito; spent e proceeds sono gli USDC pagati e ricevuti, commissioni incluse.
Un ordine a mercato aggiunge requested, fee, avgPrice (centesimi, senza commissione), unspent o unsold, status (filled, partial o none) e, quando non è stato eseguito per intero, reason: no_liquidity, beyond_limit (con bestPrice) o share_limit.
Un ordine a mercato che non viene eseguito affatto restituisce comunque 200, non un errore.
Gli ordini limite sono firmati fino alla chiusura del mercato (la fine del round, o il closesAt di un evento) e restano nel libro ordini fino ad allora.
Ordini a mercato, divisioni e unioni vengono regolati in pochi secondi, quindi firmali per 5 minuti, mai oltre la chiusura. Il server accetta una scadenza compresa tra 5 secondi da adesso e la chiusura.
Negli ultimi 5 secondi di un round non si accettano nuovi ordini (400 "Round is closing"). Gli ordini in attesa scadono alla chiusura e compaiono con il tipo expire nella tua attività.
Round futuri. I prossimi dieci round da 5m e da 15m (uno per 1h e 1d) accettano già ordini, quindi un bot può quotare un round prima che inizi.
POST /api/orders/batch inserisce fino a 15 ordini in una sola richiesta, nell’ordine dato, ciascuno con i propri controlli: la risposta contiene un { status, body } per ordine, esattamente quello che avrebbe risposto POST /api/orders. L’ordine i viene registrato sotto <your key>-<i>, quindi ripetere l’intero blocco con la stessa chiave non inserisce nulla due volte. DELETE /api/orders annulla tutti i tuoi ordini aperti, o con ?slug= quelli di un solo mercato, in un’unica transazione.
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 con { slug, amount } trasforma amount USDC in altrettante azioni Su e Giù; POST /api/merge con { slug, shares } ritrasforma ogni coppia in 1,00 $. Nessuna commissione; almeno 5 coppie; su seeryx.com si firma con un messaggio PMS1.
Fondi disponibili. Gli acquisti in attesa non bloccano fondi, ma tutti i tuoi acquisti aperti in un mercato, con la commissione taker al loro prezzo limite, devono rientrare nei tuoi fondi disponibili. I fondi si muovono solo quando un ordine viene eseguito; un acquisto che non puoi più pagare viene annullato.
I tuoi ordini. Un ordine può essere eseguito contro i tuoi stessi ordini in attesa e in tal caso paga la commissione taker come qualsiasi altro; post only invece rifiuta un ordine del genere.
Ordini in attesa. Al massimo 200 per conto e 100 in un singolo mercato (400 open_orders_limit).
Frequenza delle richieste. 250 richieste di ordine, annullamento, divisione e unione ogni 10 secondi per conto; conta ogni ordine di un blocco (429 rate_limited). Vedi Limiti di richieste ed errori.
Ordini limite, a mercato e in blocco, annullamenti, una divisione e un’unione, con seeryx.ts e chain.ts (o i loro equivalenti Python) nella stessa cartella.
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) } });
Dove GET /api/funds indica onChainTrading (sempre su seeryx.com), il corpo include anche "signed", creato dalla tua chiave di sessione di trading: vedi Firma degli ordini.
order è l’id della parte che resta nel libro ordini, null quando non resta nulla. filled sono le azioni negoziate subito; spent e proceeds sono gli USDC pagati e ricevuti, commissioni incluse.
Un ordine a mercato restituisce il suo risultato completo: requested, fee, avgPrice (centesimi, senza commissione), unspent (un acquisto) o unsold (una vendita), status "filled", "partial" o "none" e, se non è stato eseguito per intero, un reason: "no_liquidity" (il libro ordini si è esaurito), "beyond_limit" con bestPrice (il resto ha un prezzo oltre il tuo cap) o "share_limit" (un acquisto a mercato firmato in azioni le ha ottenute tutte sotto il suo cap). Un ordine a mercato che non viene eseguito affatto restituisce comunque 200.
Stato
Quando
400
Input non valido ("Invalid limit", "Invalid slug"), "Round is not live", "Round is closing", "Insufficient balance", "Insufficient free shares", un ordine firmato che non corrisponde
400 below_minimum
Meno azioni di minOrderShares; la risposta aggiunge "minimum"
400 would_take
Un ordine post-only che verrebbe eseguito subito
400 open_orders_limit
Troppi ordini in attesa; la risposta aggiunge "limit": { account, round }
400 trading_paused
La chiave di sessione che l’ha firmato è stata chiusa: apri una nuova sessione e firma di nuovo
429 rate_limited
Più richieste di ordine di quelle consentite per finestra temporale; attendi "retryAfter" secondi
503 trading_halted
Il trading è sospeso per tutti (vedi GET /api/notice); gli annullamenti funzionano comunque
503
Orologio della piattaforma non disponibile ("Exchange clock unavailable"): il server non può confermare l’orario del round; riprova tra qualche secondo
POST/api/orders/batch
Inserisci fino a 15 ordini in una sola richiesta
Con accesso + Idempotency-Key
Campo
Tipo
Descrizione
orderscorpoobbligatorio
array
Da 1 a 15 ordini, ciascuno esattamente il corpo di POST /api/orders con il proprio oggetto signed
Inseriti nell’ordine dato, ciascuno con i propri controlli; un ordine rifiutato non blocca gli altri. Ogni ordine conta come una richiesta ai fini del limite di richieste.
L’ordine i viene registrato sotto la chiave di idempotenza <your key>-<i> (i parte da 0; la tua chiave al massimo di 125 caratteri), quindi ripetere l’intero blocco non inserisce nulla due volte.
Stato
Quando
400
orders non è un elenco da 1 a 15 ordini
429 rate_limited
Il blocco supererebbe le richieste di ordine consentite per finestra temporale