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.
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{
"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.
| INDEX | tBTCUSD | fUSD |
|---|---|---|
| 0 | BID | FRR |
| 1 | BID_SIZE | BID |
| 2 | ASK | BID_PERIOD |
| 3 | ASK_SIZE | BID_SIZE |
| 4 | CHANGE | ASK |
| 5 | CHANGE_RELATIVE | ASK_PERIOD |
| 6 | LAST_PRICE | ASK_SIZE |
| 7 | VOLUME | DAILY_CHANGE |
| 8 | HIGH | DAILY_CHANGE_PERC |
| 9 | LOW | LAST_PRICE |
| 10 | FIRST_TRADE | VOLUME |
| 11 | — | HIGH |
| 12 | — | LOW |
| 15 | — | FRR_AMOUNT_AVAILABLE |
| 16 | — | FIRST_TRADE |
REST: 90 req/min ·docs.bitfinex.com/reference/rest-public-ticker
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.
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 × 100curl 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.
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.
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.