Pour les analystes
L’API de données
Tout ce que le site affiche est servi par une petite API, et les téléchargements de la page Données en sont des appels. Cette page est la référence : chaque point d’accès, ce qu’il prend et renvoie, et comment amener les données dans Python ou Excel. Sans clé ni inscription.
L’essentiel
- URL de base
https://api.africaneurobonds.com. Chaque point d’accès est un simple GET HTTPS et répond en JSON sauf s’il s’agit d’un téléchargement. Toute origine peut l’appeler depuis un navigateur. L’ancienne adresse,bond-api-u1jv.onrender.com, répond toujours ; utilisez celle-ci pour tout nouveau travail. - Les cours répondent avec
Cache-Control: max-age=30et un ETag ; envoyezIf-None-Matchet vous recevez un 304 si rien n’a changé. Le site lui-même interroge toutes les 30 secondes et rien ne bouge plus vite : merci de ne pas interroger plus souvent. - Envoyez un
User-Agentqui nomme votre application, pour qu’un problème puisse être retracé et qu’un changement puisse vous être signalé. - Les dates sont ISO (
AAAA-MM-JJ) ; les heures en UTC. En JSON, coupons et rendements sont des décimaux (0.0648) ; dans les exports CSV et Excel, ils sont en pourcentage (6.48), comme les noms de colonnes l’indiquent. - Une obligation suivie mais non cotée est dans
/excludedet nulle part ailleurs. Un rendement non publié estnull, jamais zéro.
Points d’accès
GET /bonds
Chaque obligation publiée avec son cours en direct : {count, bonds: [...]}. Les champs sont listés plus bas.
country- facultatif : un pays tel que
/countriesle liste
Exemple /bonds?country=Nigeria
GET /bonds/{isin}
Une obligation : instrument (ses caractéristiques), live (la ligne que sert /bonds, ou null si l’obligation est suivie mais non cotée) et pricing_history (chaque clôture quotidienne : price_date, bid_price, ask_price, bid_yield, ask_yield). 404 pour un ISIN que le site ne suit pas ou ne cote pas.
Exemple /bonds/XS1777972511
GET /bonds/{isin}/consideration
Le montant à régler : principal, accrued (avec accrued_days, accrued_from, accrued_per_100), total, le yield à ce cours (yield_pct, basis à l’échéance ou au remboursement anticipé, workout_date), factor et current_face pour une obligation partiellement remboursée, et settlement_choices. Jamais mis en cache. Un refus (date invalide, nominal nul, obligation échue) est un 422 avec une phrase.
nominal- nominal, 1 000 000 par défaut
price- cours pied de coupon pour 100 ; par défaut le cours vendeur (achat) ou acheteur (vente) en direct
settlement- AAAA-MM-JJ, un jour ouvré jusqu’à un an ; par défaut T+2 pour une ligne XS, T+1 pour une ligne US
sidebuy(défaut) ousell
Exemple /bonds/XS1777972511/consideration?nominal=250000&side=buy
GET /bonds/{isin}/export
Les clôtures quotidiennes de l’obligation en fichier, les plus récentes d’abord : le téléchargement par obligation de la page Données.
period1W, 1M, 3M, 6M, 1Y, YTDouAll(défaut)formatcsvouxlsx(défaut)
GET /export/closes
Un seul tableau long, une ligne par obligation et par jour, selon les filtres ; sans filtre, tout l’historique de chaque obligation publiée. Colonnes : date, isin, bond, issuer, issuer_type, country, currency, coupon_pct, maturity_date, bid_price, ask_price, bid_yield_pct, ask_yield_pct, yield_to, yield_note. Reconstruit au plus toutes les dix minutes.
country- un pays tel que
/countriesle liste issuer_typesovereign,corporateousupranationalstart, end- AAAA-MM-JJ, inclus
on- une séance : la dernière à cette date ou avant, pour toutes les obligations
formatcsv(défaut) ouxlsx
Exemple /export/closes?country=Kenya&start=2026-01-01&format=csv
GET /export/terms
Données de référence : une ligne par obligation avec ses caractéristiques et le document d’où vient chaque chiffre ; les échéanciers des obligations amortissables (chacun marqué documenté ou déduit) ; les calendriers de remboursement anticipé.
tablebonds(défaut),amortisationoucallsformatcsv(défaut) ouxlsx
GET /countries
{countries: [...]}, les chaînes de pays que les filtres ci-dessus acceptent.
Exemple /countries
GET /excluded
Les obligations que le site suit mais ne cote délibérément pas, chacune avec un summary et le detail de la décision : le miroir de /bonds.
Exemple /excluded
GET /health
status, le commit en service et une date api qui change quand la forme d’une réponse change.
Exemple /health
Ce que contient une ligne d’obligation
| Champ | Signification |
|---|---|
isin, isin_144a | L’ISIN Reg S, et l’ISIN Rule 144A s’il existe. Les routes par ISIN acceptent les deux. |
ticker, issuer, issuer_name | Le nom court de l’obligation et son émetteur. |
issuer_type | sovereign, supranational, ou pour le groupe Entreprises corporate, bank ou quasi_sovereign. |
country, country_of_risk | Le pays, en majuscules. Pour une entreprise, le pays de risque et la règle qui l’a attribué (country_of_risk_rule). |
currency, coupon_rate, coupon_frequency, day_count | Coupon en décimal (0.07 pour 7 %), coupons par an, base de calcul. |
issue_date, maturity_date | Dates ISO ; maturity_date est null pour une perpétuelle. |
amount_outstanding, outstanding_factor, current_outstanding | Le nominal d’origine retenu par le site, la part encore due après les remboursements prévus, et leur produit. |
wal_years | Années jusqu’à l’échéance pour une obligation in fine ; durée de vie moyenne pondérée des tranches restantes pour une obligation amortissable. |
bid_price, ask_price, prev_close, daily_change | Cours pied de coupon pour 100 de nominal restant ; la clôture précédant le price_date de l’obligation ; la variation. |
bid_yield, ask_yield | Décimaux (0.0648 pour 6,48 %), résolus sur les caractéristiques. Null quand le rendement n’est pas publié ou que l’obligation se traite sur le recouvrement. |
bid_workout_date, bid_workout_price (and ask_) | Renseignés quand le rendement est calculé au remboursement anticipé plutôt qu’à l’échéance : la date et le prix retenus. |
price_date, price_time, price_source | La séance du cours, l’heure de fixation (UTC) et sa provenance. |
stale, rejected, reject_reason | stale : le cours repose sur un ancrage plus ancien que la dernière séance. rejected : la dernière clôture a été refusée, la raison l’explique. |
distressed | Cours moyen sous 70 : valorisée sur le recouvrement attendu, le rendement n’est donné qu’à titre indicatif. |
yield_status, yield_withheld_reason | published, ou withheld avec la raison (caractéristiques pas encore lues dans le document d’émission, révision à venir, …). |
Fichiers à côté de l’API
Ce sont des fichiers statiques du site, reconstruits chaque nuit à partir des caractéristiques et de la dernière clôture ; ils ne demandent aucun appel à l’API.
| URL | Signification |
|---|---|
/data/calendar.csv | Chaque coupon, remboursement et échéance à venir de chaque obligation, d’après les caractéristiques (le calendrier des paiements). |
/data/cashflows/{ISIN}.json | Les flux futurs d’une obligation pour 100 de nominal d’origine : {isin, currency, maturity, frequency, flows: [{d, k, p100, rate}]}. Multipliez p100 par votre nominal / 100. |
/data/curves.json | L’ajustement nocturne de la courbe par émetteur et devise (paramètres de Nelson–Siegel, plage de maturités, RMSE) et, pour chaque obligation, sa maturité, son rendement moyen, le rendement de la courbe et l’écart à la dernière clôture (le graphique de valeur relative). |
/learn/bondpages.json | ISIN vers la fiche de l’obligation sur ce site. |
Recettes
Python
import requests, pandas as pd
API = "https://api.africaneurobonds.com"
bonds = pd.DataFrame(requests.get(API + "/bonds", headers={"User-Agent": "my-app"}).json()["bonds"])
print(bonds[["ticker", "currency", "bid_price", "ask_price", "ask_yield", "wal_years"]].head())
# a bond's whole close history as a frame
hist = pd.read_csv(API + "/bonds/XS1777972511/export?period=All&format=csv", parse_dates=["date"])
# the whole market on one day
day = pd.read_csv(API + "/export/closes?on=2026-10-09")
Excel
Dans Excel, Données → À partir du web (ou Power Query) avec une URL CSV donne un tableau actualisable ; par exemple tout le marché un jour donné :
https://api.africaneurobonds.com/export/closes?on=2026-10-09
Ligne de commande
curl -H "User-Agent: my-app" "https://api.africaneurobonds.com/bonds?country=Nigeria"
curl -o nigeria.csv "https://api.africaneurobonds.com/export/closes?country=Nigeria&format=csv"
À savoir
- Chaque chiffre est indicatif : un calcul sur les caractéristiques enregistrées et les clôtures indicatives du site, ni un cours traité, ni une cotation, ni une offre. Rien n’est un conseil.
- Aucune disponibilité n’est garantie. L’URL de base et la forme d’une réponse peuvent changer ; le cas échéant, cette page change d’abord et la date
apide/healthbouge. - Utilisation libre. Si vous publiez un travail fondé sur ces données, merci de citer African Eurobonds (africaneurobonds.com). Les conditions d’utilisation (en anglais) s’appliquent.