The Bot Ledger
FR

Accueil / Guides

Guide API Polymarket : connecter un bot de trading en 5 étapes

Les bases de l'API Polymarket pour un bot : Gamma pour les marchés, CLOB pour les ordres, auth, carnet, passage d'ordres, exécutions et retrait des gains, en Python.

A candlestick price chart on a monitor
Auth
Signature de portefeuille, puis une clé API dérivée de celle-ci. Gardez la clé privée hors de l'hôte du bot si vous le pouvez.
Lecture
API Gamma pour les marchés et les métadonnées, sans auth. API CLOB pour le carnet.
Trading
API CLOB, requêtes signées. Achats en ordres au marché, ventes en ordres limite.
Frais taker
0.07 x p x (1-p) par part sur les marchés crypto. Les makers ne paient rien.
Règlement
Les marchés crypto courts se règlent sur une moyenne d'oracle de 60 secondes comparée à l'ouverture de la fenêtre.
Géographie
Bloque les États-Unis, le Royaume-Uni, la France et plusieurs autres pays.
Docs
docs.polymarket.com

Cinq étapes, volontairement simplifiées. Les extraits montrent la forme de chaque appel, pas du code de production : pas de nouvelles tentatives, pas de gestion d'erreurs, pas de temporisation sur les limites de débit. La bibliothèque cliente officielle gère la signature ; les exemples l'utilisent.

  1. Installer le client et dériver les identifiants

    Polymarket est passé au CLOB v2 en 2026, utilisez donc le client v2. Les identifiants sont dérivés une fois d'une signature de portefeuille, puis réutilisés.

    pip install py-clob-client-v2
    
    from py_clob_client.client import ClobClient
    
    HOST = "https://clob.polymarket.com"
    client = ClobClient(HOST, key=PRIVATE_KEY, chain_id=137, signature_type=1)
    creds = client.create_or_derive_api_key()   # signer une fois, garder le résultat
    client.set_api_creds(creds)

    Les comptes créés par e-mail utilisent un type de signature différent des comptes par portefeuille. Plusieurs types s'authentifient sans problème mais seul le bon voit votre solde, vérifiez donc l'appel de solde avant de trader.

  2. Trouver le marché et ses token ids

    Gamma est le catalogue en lecture seule. Les slugs des marchés crypto courts sont déterministes, et un marché fermé disparaît des requêtes par slug mais reste accessible par id numérique.

    import requests
    
    GAMMA = "https://gamma-api.polymarket.com"
    m = requests.get(f"{GAMMA}/markets", params={"slug": "btc-updown-5m-1757500800"}).json()[0]
    up_token, down_token = m["clobTokenIds"]     # un token par issue
    market_id = m["id"]                           # à garder : il survit à la clôture
  3. Lire le carnet

    book = client.get_order_book(up_token)
    best_ask = float(book.asks[0].price)    # ce qu'un achat paie maintenant
    best_bid = float(book.bids[0].price)    # ce qu'une vente obtient maintenant
    spread = best_ask - best_bid            # sauter la fenêtre si c'est large

    Enregistrez chaque lecture avec l'horloge à laquelle vous l'avez faite. Une fenêtre sans lecture fraîche n'est pas un trade que vous auriez pu faire.

  4. Passer un ordre

    Un achat fill-or-kill doit être un ordre au marché pour un montant en dollars avec au plus deux décimales. Les ventes fonctionnent en ordres limite qui prennent ce qui est là.

    from py_clob_client.clob_types import MarketOrderArgs, OrderArgs, OrderType
    
    buy = client.create_market_order(MarketOrderArgs(token_id=up_token, amount=25.00, side="BUY"))
    resp = client.post_order(buy, OrderType.FOK)
    assert resp.get("success"), resp          # lever une erreur sur tout le reste, ne jamais supposer une exécution
    
    sell = client.create_order(OrderArgs(token_id=up_token, price=0.90, size=30, side="SELL"))
    client.post_order(sell, OrderType.FAK)

    Un ordre peut renvoyer une erreur réseau et s'exécuter quand même. Interrogez vos trades après toute exception et rapprochez-les avant la fenêtre suivante.

  5. Lire les exécutions et retirer les gains

    Les gains ne se retirent pas tout seuls. Après le règlement, les parts restent dans le portefeuille jusqu'à ce que vous retiriez la condition, et un solde non retiré finit par bloquer les nouveaux ordres.

    fills = client.get_trades()                # vos exécutions, avec les frais payés par exécution
    # Le retrait est un appel on-chain par condition id. Le client relayer l'encapsule ;
    # sans lui, réclamez chaque jour dans l'interface web.

À vérifier avant l'argent réel

  • Confirmez que les frais de votre première exécution réelle correspondent à 0.07 x p x (1-p). C'était le cas pour chaque exécution enregistrée.
  • Le minimum par ordre est de 5 parts ; les mises en pourcentage minuscules sont arrondies vers le haut ou rejetées.
  • Les limites de débit sont généreuses pour un seul bot, mais groupez les lectures de carnet là où l'API le permet.
  • Des récompenses pour les makers existent sur certains marchés et exigent une taille d'ordre minimale, actuellement 50 parts. Une cotation de 10 parts ne rapporte rien.