Guide développeur · API REST Bitfinex v2

L’API Bitfinex, expliquée pour les prêteurs

La documentation de l’API Bitfinex couvre des centaines d’endpoints ; un bot de lending en a besoin d’une douzaine. Ce guide couvre exactement ceux-là : créer une clé API sans droit de retrait, lire les taux de funding et les carnets via l’API publique, placer et annuler des offres de funding via l’API authentifiée, et les rate limits et bizarreries de données que tu rencontreras en pratique — avec des exemples Python fonctionnels.

Chemins d’endpoints et comportements vérifiés contre l’API Bitfinex v2 officielle telle que Stratum l’utilise en production, août 2026. La documentation officielle Bitfinex reste la référence qui fait foi.

Tester les endpoints publics

Explorateur en direct de l’API de funding Bitfinex

Choisissez un endpoint et une devise, puis exécutez une vraie requête sans authentification. L’endpoint Stratum normalise FRR, moyennes, funding disponible et niveaux fixes.

https://app.stratum.money/api/v1/public/funding-rates.json
Aperçu de la réponse
{
  "generatedAt": "2026-08-23T06:48:15.408007891Z",
  "updatedAt": "2026-08-23T06:05:00Z",
  "source": "Bitfinex Public REST API",
  "currency": {
    "code": "USD",
    "bitfinexSymbol": "fUSD",
    "current": {
      "timestamp": "2026-08-23T06:05:00Z",
      "dailyRatePercent": "0.031025",
      "annualizedAprPercent": "11.324125",
      "averagePeriodDays": "91.470000",
      "fundingAmount": "5991052941.288744",
      "fundingAmountUsed": "5935309488.394312",
      "fundingAvailable": "55743452.894432",
      "fundingBelowThreshold": "763483370.5925878"
    },
    "averages": {
      "hours24": {
        "dailyRatePercent": "0.031200",
        "annualizedAprPercent": "11.388073",
        "observations": 25
      },
      "days7": {
        "dailyRatePercent": "0.031710",
        "annualizedAprPercent": "11.574020",
        "observations": 169
      },
      "days30": {
        "dailyRatePercent": "0.033403",
        "annualizedAprPercent": "12.192212",
        "observations": 721
      }
    },
    "market": {
      "bestFixedBid": {
        "dailyRatePercent": "0.027397",
        "annualizedAprPercent": "10.000000",
        "periodDays": 120,
        "amount": "11593282.43646913"
      },
      "bestFixedAsk": {
        "dailyRatePercent": "0.014188",
        "annualizedAprPercent": "5.178600",
        "periodDays": 2,
        "amount": "264.93559176"
      },
      "fixedBids": [
        {
          "dailyRatePercent": "0.027397",
          "annualizedAprPercent": "10.000000",
          "periodDays": 120,
          "amount": "11593282.43646913"
        },
        {
          "dailyRatePercent": "0.018011",
          "annualizedAprPercent": "6.574000",
          "periodDays": 120,
          "amount": "133240.73391109"
        },
        {
          "dailyRatePercent": "0.017770",
          "annualizedAprPercent": "6.486100",
          "periodDays": 120,
          "amount": "23123.30278361"
        },
        {
          "dailyRatePercent": "0.017400",
          "annualizedAprPercent": "6.351000",
          "periodDays": 120,
          "amount": "12350.0"
        },
        {
          "dailyRatePercent": "0.017130",
          "annualizedAprPercent": "6.252500",
          "periodDays": 120,
          "amount": "14000.0"
        },
        {
          "dailyRatePercent": "0.017125",
          "annualizedAprPercent": "6.250600",
          "periodDays": 117,
          "amount": "560000.0"
        },
        {
          "dailyRatePercent": "0.017120",
          "annualizedAprPercent": "6.248800",
          "periodDays": 120,
          "amount": "20000.0"
        },
        {
          "dailyRatePercent": "0.017111",
          "annualizedAprPercent": "6.245500",
          "periodDays": 120,
          "amount": "2000000.0"
        },
        {
          "dailyRatePercent": "0.016125",
          "annualizedAprPercent": "5.885600",
          "periodDays": 117,
          "amount": "560000.0"
        },
        {
          "dailyRatePercent": "0.016000",
          "annualizedAprPercent": "5.840000",
          "periodDays": 120,
          "amount": "10009162.66122322"
        },
        {
          "dailyRatePercent": "0.016000",
          "annualizedAprPercent": "5.840000",
          "periodDays": 14,
          "amount": "9306.90081316"
        },
        {
          "dailyRatePercent": "0.015111",
          "annualizedAprPercent": "5.515500",
          "periodDays": 117,
          "amount": "560000.0"
        }
      ],
      "fixedAsks": [
        {
          "dailyRatePercent": "0.014188",
          "annualizedAprPercent": "5.178600",
          "periodDays": 2,
          "amount": "264.93559176"
        },
        {
          "dailyRatePercent": "0.014190",
          "annualizedAprPercent": "5.179300",
          "periodDays": 2,
          "amount": "250.0"
        },
        {
          "dailyRatePercent": "0.014192",
          "annualizedAprPercent": "5.180100",
          "periodDays": 2,
          "amount": "200.0"
        },
        {
          "dailyRatePercent": "0.014978",
          "annualizedAprPercent": "5.467000",
          "periodDays": 2,
          "amount": "3837.92472142"
        },
        {
          "dailyRatePercent": "0.014982",
          "annualizedAprPercent": "5.468400",
          "periodDays": 2,
          "amount": "323.64921816"
        },
        {
          "dailyRatePercent": "0.014988",
          "annualizedAprPercent": "5.470600",
          "periodDays": 2,
          "amount": "605.58777224"
        },
        {
          "dailyRatePercent": "0.014998",
          "annualizedAprPercent": "5.474300",
          "periodDays": 2,
          "amount": "2079.77565528"
        },
        {
          "dailyRatePercent": "0.014999",
          "annualizedAprPercent": "5.474600",
          "periodDays": 2,
          "amount": "1968.80422628"
        },
        {
          "dailyRatePercent": "0.015047",
          "annualizedAprPercent": "5.492200",
          "periodDays": 2,
          "amount": "484.95397132"
        },
        {
          "dailyRatePercent": "0.015196",
          "annualizedAprPercent": "5.546500",
          "periodDays": 2,
          "amount": "150.0"
        },
        {
          "dailyRatePercent": "0.015418",
          "annualizedAprPercent": "5.627600",
          "periodDays": 2,
          "amount": "200.0"
        },
        {
          "dailyRatePercent": "0.015607",
          "annualizedAprPercent": "5.696500",
          "periodDays": 2,
          "amount": "1150.0"
        }
      ],
      "fixedBidDepth": "37154170.83381627",
      "fixedAskDepth": "536825.22487061",
      "frrBidDepth": "0",
      "frrOfferDepth": "0",
      "sampledLevels": 356
    },
    "historyPreview": [
      {
        "timestamp": "2026-08-23T06:05:00Z",
        "dailyRatePercent": "0.031025",
        "annualizedAprPercent": "11.324125",
        "averagePeriodDays": "91.470000",
        "fundingAmount": "5991052941.288744",
        "fundingAmountUsed": "5935309488.394312",
        "fundingAvailable": "55743452.894432",
        "fundingBelowThreshold": "763483370.5925878"
      },
      {
        "timestamp": "2026-08-23T05:05:00Z",
        "dailyRatePercent": "0.031025",
        "annualizedAprPercent": "11.324125",
        "averagePeriodDays": "92.570000",
        "fundingAmount": "5989152818.724412",
        "fundingAmountUsed": "5934084828.197341",
        "fundingAvailable": "55067990.527071",
        "fundingBelowThreshold": "769699003.4136398"
      },
      {
        "timestamp": "2026-08-23T04:05:00Z",
        "dailyRatePercent": "0.031025",
        "annualizedAprPercent": "11.324125",
        "averagePeriodDays": "92.030000",
        "fundingAmount": "5988567317.18653",
        "fundingAmountUsed": "5933880711.029357",
        "fundingAvailable": "54686606.157173",
        "fundingBelowThreshold": "769905136.1789076"
      }
    ]
  }
}

GET /v2/ticker/{symbol} · tBTCUSD / fUSD

Le ticker de funding — le FRR (index 0, un taux journalier), meilleurs bid/ask avec leurs durées, volume quotidien. L’endpoint de lending le plus utile, et de loin.

INDEXtBTCUSDfUSD
0BIDFRR
1BID_SIZEBID
2ASKBID_PERIOD
3ASK_SIZEBID_SIZE
4CHANGEASK
5CHANGE_RELATIVEASK_PERIOD
6LAST_PRICEASK_SIZE
7VOLUMEDAILY_CHANGE
8HIGHDAILY_CHANGE_PERC
9LOWLAST_PRICE
10FIRST_TRADEVOLUME
11HIGH
12LOW
15FRR_AMOUNT_AVAILABLE
16FIRST_TRADE

REST: 90 req/min ·docs.bitfinex.com/reference/rest-public-ticker

Étape zéro

Créer une clé API restreinte (retraits désactivés)

Tout ce qui suit ne nécessite une clé API que pour les endpoints authentifiés — taux, bougies et carnets sont publics. Quand tu crées une clé (Bitfinex → API Keys → Create New Key), limite-la à ce dont un prêteur a réellement besoin : Margin Funding read + write (pour voir et placer les offres), Wallets read (pour voir les soldes) et Account History read (pour le registre). Laisse retraits, trading et transferts désactivés.

Un bot de funding n’a jamais besoin de pouvoir sortir ton argent de la plateforme. Une clé sans permissions de retrait ni de trading peut, au pire, prêter ton wallet de funding à un mauvais taux — elle ne peut pas le vider. C’est exactement la restriction que Stratum impose : toute clé capable de retrait ou de trading est refusée dès l’ajout.

Conversion des unités

Ticker, book et funding/stats n’utilisent pas la même unité FRR

Les taux du ticker et du carnet sont des fractions journalières. Le champ FRR de funding/stats vaut 1/365 du FRR journalier affiché. Appliquez la bonne formule avant toute comparaison.

ticker/book daily % = API rate × 100
ticker/book gross APR % = API rate × 365 × 100
funding/stats daily % = FRR field × 365 × 100
funding/stats gross APR % = FRR field × 365 × 365 × 100
curl https://app.stratum.money/api/v1/public/funding-rates.json
curl https://app.stratum.money/api/v1/public/funding-rates.csv
curl "https://api-pub.bitfinex.com/v2/ticker/fUSD"
curl "https://api-pub.bitfinex.com/v2/book/fUSD/P0?len=25"

Les endpoints qui comptent pour le funding

Publics (sans clé, api-pub.bitfinex.com)

GET /v2/ticker/fUSD

Le ticker de funding — le FRR (index 0, un taux journalier), meilleurs bid/ask avec leurs durées, volume quotidien. L’endpoint de lending le plus utile, et de loin.

GET /v2/candles/{key}/hist

Bougies historiques de taux de funding par durée, p. ex. la clé trade:1h:fUSD:p2 pour le funding USD à 2 jours. C’est la série contre laquelle tu backtestes.

GET /v2/book/fUSD/P2 et /R0

Le carnet de funding en direct — niveaux de prix agrégés (P0–P3) ou ordres bruts (R0). Taux, durée et taille de chaque bid et offre au repos.

GET /v2/funding/stats/fUSD/hist

Statistiques de funding horaires : FRR, durée moyenne, funding total utilisé. Piège : la colonne FRR est stockée en FRR/365 — multiplie par 365 pour retomber sur le ticker.

Authentifiés (api.bitfinex.com, signés en HMAC)

POST /v2/auth/r/wallets

Les soldes des wallets, dont le wallet de funding depuis lequel un bot prête.

POST /v2/auth/r/funding/offers/fUSD

Tes offres de funding ouvertes ; la variante /hist renvoie celles exécutées et annulées.

POST /v2/auth/r/funding/credits/fUSD

Le funding actuellement prêté (crédits actifs) : taux, durée, heure d’ouverture. La variante /hist est ton historique de prêts clôturés.

POST /v2/auth/w/funding/offer/submit

Placer une offre de funding : symbole, montant, taux journalier, durée (2–120 jours). Annulation via offer/cancel ou offer/cancel/all.

POST /v2/auth/r/ledgers/USD/hist

Le registre — chaque paiement d’intérêts et sa retenue de 15%, par prêt et par jour. La seule base correcte pour les chiffres de gains et de fiscalité.

POST /v2/auth/w/funding/keep

Piloter l’auto-renew par crédit — l’équivalent API de l’interrupteur auto-renew de l’interface.

Du code qui tourne

Exemples Python

Lire le FRR et le carnet de funding (sans clé)

import requests

PUB = "https://api-pub.bitfinex.com"

# Ticker de funding : l'index 0 est le FRR, coté en taux JOURNALIER
ticker = requests.get(f"{PUB}/v2/ticker/fUSD", timeout=10).json()
frr_daily = ticker[0]
print(f"FRR: {frr_daily * 365 * 100:.2f}% APR")

# Haut du carnet de funding en direct (agrégé)
book = requests.get(f"{PUB}/v2/book/fUSD/P2", params={"len": 25}, timeout=10).json()
for rate, period, count, amount in book[:5]:
    side = "offer" if amount < 0 else "bid"
    print(f"{side}: {rate * 365 * 100:.2f}% APR for {period}d, size {abs(amount):,.0f}")

Placer une offre de funding (authentifié)

import hashlib, hmac, json, time, requests

KEY, SECRET = "your-key", "your-secret"
BASE = "https://api.bitfinex.com"

def auth_post(path: str, body: dict):
    nonce = str(int(time.time() * 1_000_000))  # doit croître strictement par clé
    raw = f"/api/{path}{nonce}{json.dumps(body)}"
    sig = hmac.new(SECRET.encode(), raw.encode(), hashlib.sha384).hexdigest()
    return requests.post(f"{BASE}/{path}", data=json.dumps(body), timeout=15, headers={
        "bfx-nonce": nonce, "bfx-apikey": KEY, "bfx-signature": sig,
        "content-type": "application/json",
    }).json()

# Offrir $150 (minimum Bitfinex) à 0.03% par jour (~10.95% APR) sur 2 jours
result = auth_post("v2/auth/w/funding/offer/submit", {
    "type": "LIMIT", "symbol": "fUSD",
    "amount": "150", "rate": "0.0003", "period": 2,
})
print(result)

Les taux de l’API sont toujours journaliers — multiplie par 365 pour l’APR — et toujours bruts, avant les 15% que Bitfinex prélève sur les intérêts gagnés. L’offre minimale est l’équivalent de $150 ; les durées vont de 2 à 120 jours. Si tu préfères un client maintenu à une signature écrite à la main, Bitfinex publie une bibliothèque Python officielle (bfxapi).

Rate limits et les pièges qui coûtent de vraies heures

Les nonces doivent croître strictement

Chaque requête signée exige une bfx-nonce supérieure à la précédente pour cette clé. Deux processus partageant une clé entreront en collision avec des erreurs "nonce: small" — utilise une clé par processus.

Rate limits par endpoint

Les endpoints publics autorisent grosso modo 10–90 requêtes par minute selon la route ; les authentifiés sont du même ordre. Les dépasser renvoie un HTTP 429 avec un corps ERR_RATE_LIMIT — recule exponentiellement et mets en cache les lectures.

funding/stats stocke le FRR/365

La colonne FRR de /v2/funding/stats est le FRR journalier divisé par 365, alors que /v2/ticker cote le taux journalier directement. Multiplie la valeur des stats par 365 avant de comparer — sinon ça fausse les backtests en silence.

Tout est brut de frais

Taux du carnet, bougies et FRR sont tous avant frais. Ton wallet reçoit 85% des intérêts gagnés (82% pour les offres cachées). Réconcilie avec le registre, pas avec le taux coté.

Les prêts se clôturent en avance

Un crédit à 120 jours ne signifie pas 120 jours d’intérêts — les emprunteurs remboursent quand ils ferment leurs positions, et les crédits peuvent revenir en quelques jours. Modélise la durée de détention attendue, pas la durée nominale.

Construire ou faire tourner

Si tu préfères ne pas faire tourner ça toi-même

Tout ce qui précède est exactement ce que Stratum opère en production : les mêmes endpoints, la même signature, le backoff et la réconciliation du registre, plus 11 stratégies backtestées sur trois ans de bougies de funding, le mode papier et les exports fiscaux — derrière une clé sans droit de retrait, restreinte exactement comme décrit à l’étape zéro. Construis ton propre bot si posséder la stack te plaît (ce guide plus les projets open-source sont un vrai chemin) ; prends-en un hébergé si tu préfères t’épargner les bugs de nonce et les 429 à 3 h du matin.

FAQ API Bitfinex

Quelles permissions API faut-il à un bot de lending Bitfinex ?

Margin Funding read et write, Wallets read et Account History read. Retraits, trading et transferts doivent rester désactivés — un bot de lending n’a jamais besoin de sortir des fonds de la plateforme, et une clé restreinte limite les dégâts si elle fuit un jour.

L’API Bitfinex est-elle gratuite ?

Oui. L’API publique (taux, bougies, carnets) comme l’API authentifiée (offres, wallets, registres) sont gratuites ; il te faut seulement un compte et une clé API pour la partie authentifiée. Les endpoints publics sur api-pub.bitfinex.com ne demandent aucune clé.

Existe-t-il une bibliothèque Python officielle pour Bitfinex ?

Oui — bfxapi, publiée par Bitfinex, couvre REST et WebSocket. Les exemples de cette page utilisent requests tout nu plus une signature HMAC écrite à la main pour que tu voies exactement ce qui passe sur le fil ; pour du code de production, la bibliothèque officielle épargne du boilerplate.

Les taux de l’API Bitfinex sont-ils journaliers ou annuels ?

Journaliers. Un taux de 0.0003 signifie 0.03% par jour, soit environ 10.95% APR en intérêt simple. Multiplie par 365 pour l’APR, et souviens-toi que tout taux coté est brut — Bitfinex garde 15% des intérêts gagnés, donc multiplie par 0.85 pour ce qui atteint ton wallet.

Ai-je besoin de l’API WebSocket pour un bot de lending ?

Pas pour démarrer. Le polling REST suffit pour un bot simple. Le WebSocket (wss://api-pub.bitfinex.com/ws/2 public, wss://api.bitfinex.com/ws/2 authentifié) compte quand tu veux les mises à jour du carnet en direct ou des notifications d’exécution instantanées sans brûler ton rate limit REST — c’est ainsi que Stratum suit les événements de wallet, d’offre et de crédit en temps réel.

Quelles sont les rate limits de l’API Bitfinex ?

Elles varient par endpoint, grosso modo 10–90 requêtes par minute sur les routes publiques et des budgets comparables sur les authentifiées. Dépasser une limite renvoie un HTTP 429 (ERR_RATE_LIMIT) ; les clients bien élevés mettent en cache les lectures publiques et reculent exponentiellement sur les 429. Les chiffres exacts sont listés par endpoint dans la doc officielle.

L’API est la partie facile

Placer une offre, c’est vingt lignes de Python ; savoir quel taux et quelle durée offrir, c’est le vrai problème. Stratum fait tourner des stratégies backtestées sur la même API que celle décrite ci-dessus — ou prends le code de cette page et construis le tien.

Ajouter une clé API à StratumTaux de funding en directLire le carnet de funding Bitfinex en directComparatif des bots open-sourceDatasets de funding BitfinexWidget des taux de funding Bitfinex en direct