Passer, grouper et annuler des ordres sur Seeryx : à cours limité, au marché, post-only, clés d’idempotence, expiration, scission et fusion, avec exemples.
Vous négociez avec POST /api/orders (un ordre) ou POST /api/orders/batch (jusqu’à 15), annulez avec DELETE /api/orders/:id ou DELETE /api/orders, et convertissez des liquidités en paires, et inversement, avec /api/split et /api/merge. Sur seeryx.com, chaque ordre, scission et fusion porte un objet signed produit par votre clé de session de trading : Signature des ordres explique comment ; les exemples de cette page s’en chargent pour vous.
Sur chaque POST et DELETE de trading : une valeur de 8 à 128 lettres, chiffres, _ ou -, nouvelle pour chaque intention. La même clé avec le même corps renvoie la réponse de la première requête et ne change rien ; avec un autre corps, elle est refusée. Les clés sont mémorisées pendant 24 heures.
S’exécute aussitôt contre ce qui est proposé à son prix ou mieux, et le reste demeure dans le carnet jusqu’à son exécution, son annulation ou la clôture de la manche.
Limite, Post-only
shares, limit, postOnly: true
Reste entièrement dans le carnet ou est refusé (400 would_take) : il ne prend jamais de liquidité et ne paie donc jamais les frais taker.
Achat au marché
amount, cap
Dépense aussitôt jusqu’à amount USDC (frais compris) à des prix allant jusqu’à cap ; le reste est abandonné, jamais placé dans le carnet.
Vente au marché
shares, cap
Vend aussitôt jusqu’à shares parts à des prix descendant jusqu’à cap ; le reste est abandonné.
Champ
Type
Description
slugobligatoire
string
Une manche négociable (en cours ou à venir) ou un marché événementiel ouvert.
sideobligatoire
up | down
L’issue que vous négociez (dans un marché événementiel, Oui correspond à up et Non à down).
actionobligatoire
buy | sell
Une vente nécessite des parts que vous détenez et qu’aucune autre vente en attente n’a réservées.
typeobligatoire
limit | market
Voir ci-dessus.
sharesfacultatif
number
Ordres à cours limité et toutes les ventes.
amountfacultatif
number
Achats au marché : le montant maximal en USDC à dépenser, frais taker compris.
limitfacultatif
number
Ordres à cours limité : le prix en cents.
capfacultatif
number
Ordres au marché : le pire prix en cents. Un achat ne paie pas plus, une vente n’accepte pas moins.
Un ordre à cours limité en attente ; un achat au marché de 5 $ exécuté ; un achat au marché dont le cap était inférieur au meilleur prix vendeur.
order est l’id de ce qui reste dans le carnet, null si rien n’y reste. filled est le nombre de parts négociées immédiatement ; spent et proceeds sont les USDC payés et reçus, frais compris.
Un ordre au marché ajoute requested, fee, avgPrice (en cents, hors frais), unspent ou unsold, status (filled, partial ou none) et, s’il n’a pas été entièrement exécuté, reason : no_liquidity, beyond_limit (avec bestPrice) ou share_limit.
Un ordre au marché qui n’exécute rien renvoie quand même un 200, pas une erreur.
Les ordres à cours limité sont signés jusqu’à la clôture du marché (la fin de la manche, ou closesAt pour un événement) et restent dans le carnet jusque-là.
Les ordres au marché, les scissions et les fusions sont réglés en quelques secondes : signez-les donc pour 5 minutes, jamais au-delà de la clôture. Le serveur accepte une expiration comprise entre 5 secondes à partir de maintenant et la clôture.
Les 5 dernières secondes d’une manche n’acceptent aucun nouvel ordre (400 "Round is closing"). Les ordres en attente expirent à la clôture et apparaissent avec le type expire dans votre activité.
Manches à venir. Les dix prochaines manches de 5 min et de 15 min (une seule pour 1 h et 1 jour) acceptent déjà des ordres : un bot peut donc coter une manche avant son début.
POST /api/orders/batch passe jusqu’à 15 ordres en une requête, dans l’ordre donné, chacun avec ses propres vérifications : la réponse contient un { status, body } par ordre, exactement ce qu’aurait répondu POST /api/orders. L’ordre i est enregistré sous <your key>-<i> : renvoyer tout le lot avec la même clé ne passe donc rien deux fois. DELETE /api/orders annule tous vos ordres ouverts, ou avec ?slug= ceux d’un marché, en une seule transaction.
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 avec { slug, amount } transforme amount USDC en autant de parts Hausse et Baisse ; POST /api/merge avec { slug, shares } reconvertit les paires en 1,00 $ chacune. Sans frais ; au moins 5 paires ; signé avec un message PMS1 sur seeryx.com.
Liquidités. Les achats en attente ne bloquent pas de liquidités, mais l’ensemble de vos achats ouverts sur un même marché, frais taker compris à leur prix limite, doit tenir dans vos liquidités disponibles. Les liquidités ne bougent qu’à l’exécution d’un ordre ; un achat que vous ne pouvez plus payer est annulé.
Vos propres ordres. Un ordre peut s’exécuter contre vos propres ordres en attente et paie alors les frais taker comme n’importe quel autre ; Post-only refuse un tel ordre à la place.
Ordres en attente. Au plus 200 par compte et 100 sur un même marché (400 open_orders_limit).
Fréquence des requêtes. 250 requêtes d’ordre, d’annulation, de scission et de fusion par tranche de 10 secondes et par compte ; chaque ordre d’un lot compte (429 rate_limited). Voir Limites de requêtes et erreurs.
Lorsque GET /api/funds indique onChainTrading (toujours le cas sur seeryx.com), le corps contient aussi "signed", produit par votre clé de session de trading : voir Signature des ordres.
order est l’id de la partie qui reste dans le carnet, null si rien n’y reste. filled est le nombre de parts négociées immédiatement ; spent et proceeds sont les USDC payés et reçus, frais compris.
Un ordre au marché renvoie son résultat complet : requested, fee, avgPrice (en cents, hors frais), unspent (achat) ou unsold (vente), status "filled", "partial" ou "none" et, en cas d’exécution incomplète, un reason : "no_liquidity" (le carnet est épuisé), "beyond_limit" avec bestPrice (le reste est proposé au-delà de votre cap) ou "share_limit" (un achat au marché signé en parts a obtenu toutes ses parts sous son cap). Un ordre au marché qui n’exécute rien renvoie quand même un 200.
Statut
Cas
400
Entrée invalide ("Invalid limit", "Invalid slug"), "Round is not live", "Round is closing", "Insufficient balance", "Insufficient free shares", un ordre signé qui ne correspond pas
400 below_minimum
Moins de parts que minOrderShares ; la réponse ajoute "minimum"
400 would_take
Un ordre Post-only qui s’exécuterait aussitôt
400 open_orders_limit
Trop d’ordres en attente ; la réponse ajoute "limit": { account, round }
400 trading_paused
La clé de session qui l’a signé a été fermée : ouvrez une nouvelle session et signez de nouveau
429 rate_limited
Plus de requêtes d’ordre que le nombre autorisé par fenêtre ; attendez "retryAfter" secondes
503 trading_halted
Le trading est suspendu pour tous (voir GET /api/notice) ; les annulations fonctionnent toujours
503
"Exchange clock unavailable" : le serveur ne peut pas confirmer l’heure de la manche ; réessayez dans quelques secondes
POST/api/orders/batch
Passer jusqu’à 15 ordres en une requête
Connexion + Idempotency-Key
Champ
Type
Description
orderscorpsobligatoire
array
De 1 à 15 ordres, chacun exactement le corps de POST /api/orders avec son propre objet signed
Passés dans l’ordre donné, chacun avec ses propres vérifications ; un ordre refusé n’arrête pas les autres. Chaque ordre compte comme une requête dans la limite de requêtes.
L’ordre i est enregistré sous la clé d’idempotence <your key>-<i> (i à partir de 0 ; votre clé fait au plus 125 caractères) : renvoyer tout le lot ne passe donc rien deux fois.
Statut
Cas
400
orders n’est pas une liste de 1 à 15 ordres
429 rate_limited
Le lot dépasserait le nombre de requêtes d’ordre autorisé par fenêtre