L'API de P2P Dash
Les données de votre portefeuille P2P en JSON, pour un tableur, un script ou votre propre tableau de bord. Vous créez un jeton dans votre compte, vous l'envoyez avec chaque requête et vous recevez les mêmes chiffres que dans P2P Dash.
Votre première requête
Trois étapes dans un terminal sous macOS ou Linux. Vous préférez commencer dans Google Sheets ? Les exemples plus bas montrent comment faire.
Créez un jeton
Dans P2P Dash, ouvrez le menu utilisateur puis « Jetons d'API ». Donnez un nom au jeton, réglez « Vos données » sur « Lecture » et choisissez sa durée de validité. Le jeton ne s'affiche qu'une seule fois : copiez-le tout de suite.
Gardez-le hors de votre code
Placez-le dans une variable d'environnement, ici P2PDASH_TOKEN, et pas dans un fichier que vous partagez. Toute personne qui possède le jeton peut lire vos chiffres.
Envoyez une requête
Chaque requête transmet le jeton dans l'en-tête Authorization. La réponse est du JSON, avec vos données sous data.
export P2PDASH_TOKEN="p2pdash_..."
curl https://app.p2pdash.com/api/v1/account/summary \
-H "Authorization: Bearer $P2PDASH_TOKEN"Sous Windows, dans PowerShell, définissez le jeton avec $env:P2PDASH_TOKEN = "p2pdash_...", écrivez curl.exe au lieu de curl, mettez la requête sur une seule ligne et utilisez $env:P2PDASH_TOKEN dans l'en-tête.
{
"data": {
"platformCount": 4,
"firstDate": "2021-03-02",
"lastDate": "2026-11-09",
"interest": 1781.4,
"principalRepayment": 37443.05,
"fee": 12.4,
"tax": 0,
"bonus": 85,
"deposit": 12000,
"withdrawal": 1500,
"investment": 48210.33,
"defaultLoss": 120.5,
"internalTransfer": 0,
"transactionCount": 14873,
"totalBalance": 12233.5,
"availableBalance": 1586.72,
"investedBalance": 10646.78,
"netDeposits": 10500,
"netIncome": 1733.5
}
}Ces chiffres sont des exemples. totalBalance correspond à la valeur de votre compte : dépôts moins retraits, plus tout ce que vous avez gagné, après frais, impôts et pertes.
Exemples
Quatre choses à faire avec l'API. Copiez le code, ajoutez votre jeton et adaptez à partir de là.
Votre solde dans Google Sheets
Dans votre feuille, ouvrez Extensions → Apps Script et collez cette fonction. Sous Paramètres du projet → Propriétés du script, ajoutez P2PDASH_TOKEN avec votre jeton. Tapez ensuite la formule dans une cellule. Tous les champs du résumé fonctionnent, par exemple "netIncome".
function P2PDASH(field) {
const token = PropertiesService.getScriptProperties()
.getProperty("P2PDASH_TOKEN");
const res = UrlFetchApp.fetch(
"https://app.p2pdash.com/api/v1/account/summary",
{ headers: { Authorization: "Bearer " + token } },
);
return JSON.parse(res.getContentText()).data[field];
}=P2PDASH("totalBalance") → 12233.5Sheets garde le résultat en mémoire et ne refait la requête que si la formule change. Pour actualiser, ajoutez un second argument comme =P2PDASH("totalBalance", A1) et modifiez A1. Chaque cellule correspond à une requête. Toute personne qui peut modifier la feuille peut aussi lire le jeton dans Apps Script : ne faites donc pas cela dans une feuille que d'autres peuvent modifier.
Intérêts par mois
La série temporelle avec granularity=month donne un point par mois avec données. Installez la bibliothèque une fois avec pip install requests.
import os
import requests
res = requests.get(
"https://app.p2pdash.com/api/v1/account/timeseries",
params={"granularity": "month", "from": "2026-08-01", "to": "2026-10-31"},
headers={"Authorization": f"Bearer {os.environ['P2PDASH_TOKEN']}"},
)
res.raise_for_status()
for point in res.json()["data"]:
print(point["date"][:7], f"{point['interest']:.2f}")2026-08 94.80
2026-09 96.42
2026-10 98.15XIRR par plateforme
Enregistrez ce code sous xirr.mjs et lancez node xirr.mjs (Node.js 18 ou plus récent). Le XIRR arrive sous forme de fraction : 0.0984 signifie 9,84 % par an. Une plateforme sans assez de données reçoit null.
const res = await fetch("https://app.p2pdash.com/api/v1/account/metrics", {
headers: { Authorization: `Bearer ${process.env.P2PDASH_TOKEN}` },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data } = await res.json();
for (const p of data.xirr.platforms) {
const xirr = p.allTimeXirr === null
? "-"
: (p.allTimeXirr * 100).toFixed(2) + "%";
console.log(p.name.padEnd(12), xirr);
}Platform A 9.84%
Platform B 10.37%
Platform C 11.20%
Platform D -Les chiffres pour votre déclaration d'impôts
Intérêts et bonus par plateforme pour une année, raccourcis avec jq. Ce qui compte comme revenu dépend des règles de votre pays ; l'API montre seulement ce qui se trouve dans P2P Dash.
curl -s "https://app.p2pdash.com/api/v1/account/tax?year=2025" \
-H "Authorization: Bearer $P2PDASH_TOKEN" \
| jq '.data[] | {name, interest: .years[0].interest, bonus: .years[0].bonus}'{
"name": "Platform A",
"interest": 412.37,
"bonus": 25
}
{
"name": "Platform B",
"interest": 288.9,
"bonus": 0
}Ce que vous pouvez lire
Votre compte entier, chaque portefeuille et chaque plateforme répondent aux mêmes cinq questions. Une fois que vous les connaissez, vous pouvez les poser à chaque niveau.
Les cinq vues
Chaque vue existe en trois variantes. Pour une plateforme, récupérez d'abord son ID via /api/v1/platforms, puis mettez-le à la place de {id}. Les portefeuilles fonctionnent de la même façon.
summaryLes totaux depuis le début : intérêts, bonus, frais, pertes, dépôts, retraits et les soldes qui en découlent.
- Tout le compte
- GET /api/v1/account/summary
- Un portefeuille
- GET /api/v1/portfolios/{id}/summary
- Une plateforme
- GET /api/v1/platforms/{id}/summary
timeseriesLes mêmes chiffres dans le temps, par jour, par mois ou par an, avec le solde à la fin de chaque période. Pratique pour les graphiques.
- Tout le compte
- GET /api/v1/account/timeseries
- Un portefeuille
- GET /api/v1/portfolios/{id}/timeseries
- Une plateforme
- GET /api/v1/platforms/{id}/timeseries
metricsXIRR (depuis le début et par an, avec et sans bonus), cash drag, solde investi moyen et indice de liberté du capital, par plateforme et au total.
- Tout le compte
- GET /api/v1/account/metrics
- Un portefeuille
- GET /api/v1/portfolios/{id}/metrics
- Une plateforme
- GET /api/v1/platforms/{id}/metrics
income-projectionCe que votre solde actuel rapporterait par jour, par mois et par an avec votre XIRR passé sans bonus. Une projection, pas une promesse.
- Tout le compte
- GET /api/v1/account/income-projection
- Un portefeuille
- GET /api/v1/portfolios/{id}/income-projection
- Une plateforme
- GET /api/v1/platforms/{id}/income-projection
taxIntérêts, bonus, impôts retenus, frais et pertes par plateforme et par année civile, l'année la plus récente en premier.
- Tout le compte
- GET /api/v1/account/tax
- Un portefeuille
- GET /api/v1/portfolios/{id}/tax
- Une plateforme
- GET /api/v1/platforms/{id}/tax
Listes et détails
- GET /api/v1/account
- Le jeton que vous utilisez, ses portées et sa date d'expiration. Pratique pour vérifier qu'un jeton fonctionne encore.
- GET /api/v1/platforms
- Toutes vos plateformes avec leurs ID, leurs portefeuilles et leurs totaux. C'est ici que vous trouvez les ID.
- GET /api/v1/platforms/{id}
- Une plateforme, le même objet que dans la liste.
- GET /api/v1/platforms/{id}/intent-history
- Les moments où vous avez changé vos intentions pour une plateforme (augmenter, conserver, sortir, etc.).
- GET /api/v1/portfolios
- Tous vos portefeuilles avec leurs plateformes.
- GET /api/v1/portfolios/{id}
- Un portefeuille.
- GET /api/v1/platform-types
- Les informations par type de plateforme : pays, classes d'actifs, régulation, année de création. Identiques pour tous les utilisateurs.
Paramètres de requête
from, to- Uniquement pour
timeseries. Des jours au formatYYYY-MM-DD, bornes incluses. Avecmonthouyear, ils s'élargissent aux périodes entières. Les soldes comptent toujours depuis votre premier jour de données : unfromplus tardif ne les remet pas à zéro. granularity- Uniquement pour
timeseries.day(par défaut),monthouyear. La date d'un point est le dernier jour de sa période. Un jour ou une période sans données n'a pas de point du tout : n'attendez pas de zéros. year- Uniquement pour
tax. Une année civile comme2025. Les plateformes sans données cette année-là n'apparaissent pas.
Chaque champ de chaque réponse figure dans le document OpenAPI. Des outils comme Postman ou Swagger UI savent le lire, et des générateurs de code peuvent en tirer un client.
Ouvrir le document OpenAPIBon à savoir
Les règles valables pour tous les endpoints.
Lecture seule
L'API lit vos données et ne modifie rien. Les imports et les réglages se font toujours dans l'application.
À jour jusqu'à votre dernier import
P2P Dash ne récupère rien auprès des plateformes. L'API renvoie ce que vous avez importé ou saisi à la main, et lastDate indique le dernier jour avec des données.
60 requêtes, puis une minute de pause
Par jeton. Le compteur ne repart de zéro qu'après une minute entière sans aucune requête avec ce jeton : un script qui interroge l'API toutes les quelques secondes atteint donc aussi la limite. Vous recevez alors un 429, et Retry-After indique combien de secondes attendre. Les réponses réussies montrent ce qu'il reste dans X-RateLimit-Remaining.
Montants en EUR
Les flux d'argent comme deposit, withdrawal ou fee sont toujours positifs ; le sens se lit dans le nom. Les soldes et netIncome peuvent passer sous zéro. Le XIRR et le cash drag sont des fractions (0.075 correspond à 7,5 %), l'indice de liberté du capital va de 0 à 100.
Dates en UTC
Les jours au format YYYY-MM-DD, les instants en ISO 8601. Un jour est celui de l'export, sans fuseau horaire qui le décale.
Jetons
Jusqu'à 10 jetons actifs par compte, valables « 30 jours », « 90 jours », « 1 an » ou sans expiration (« Jamais »). Cliquez sur « Révoquer » sur la page des jetons et le jeton cesse aussitôt de fonctionner.
Quand quelque chose ne va pas
Les erreurs reviennent en JSON avec un error.code fixe. Vérifiez le code, pas le message : le message peut changer, les codes restent.
| Statut | Code et signification |
|---|---|
| 400 | invalid_requestUn paramètre est incorrect. |
| 401 | unauthorizedLe jeton manque, est mal recopié, révoqué ou expiré. |
| 403 | insufficient_scopeLe jeton n'a pas le droit de lire cette partie de l'API. |
| 404 | not_foundLe chemin n'existe pas, ou l'ID ne correspond à aucune de vos plateformes ni à aucun de vos portefeuilles. |
| 429 | rate_limited60 requêtes sans une minute de pause. Attendez le nombre de secondes indiqué par |
| 500 | internal_errorL'erreur vient de nous. Réessayez plus tard, et si cela continue, écrivez-nous. |
Il existe deux autres codes 403, forbidden et plan_required. Avec un compte normal, vous ne les verrez pas.
Exemple : une date qui n'existe pas
curl "https://app.p2pdash.com/api/v1/account/timeseries?from=2025-02-30" \
-H "Authorization: Bearer $P2PDASH_TOKEN"{
"error": {
"code": "invalid_request",
"message": "Not a valid calendar date",
"details": [
{
"field": "from",
"message": "Not a valid calendar date"
}
]
}
}Questions sur l'API
Avant votre première requête.
L'API est-elle payante ?
Non. Comme l'application, elle est gratuite pour tous les comptes en ce moment.
Puis-je importer des transactions via l'API ?
Pas encore. L'API ne fait que lire. Vos exports s'importent toujours dans l'application.
Faut-il savoir programmer ?
Pas vraiment. L'exemple Google Sheets se fait par copier-coller, et la requête curl tourne dans le terminal sous macOS et Linux. Pour aller plus loin, un peu de Python ou de JavaScript aide.
Que se passe-t-il si quelqu'un récupère mon jeton ?
Cette personne peut lire vos chiffres P2P Dash, mais elle ne peut rien modifier et ne voit jamais votre e-mail ni votre mot de passe. Révoquez le jeton sur la page des jetons : il cesse immédiatement de fonctionner.
L'API va-t-elle changer ?
Oui, c'est possible. C'est la première version, et des champs ou des endpoints peuvent encore changer sans nouveau numéro de version. Si vous construisez quelque chose dessus, prévoyez de l'adapter de temps en temps.
Puis-je obtenir les données d'autres utilisateurs ?
Non. Un jeton ne lit que les données du compte qui l'a créé. Seule exception : la liste des types de plateformes, qui contient des informations publiques sur les plateformes.
Créez votre premier jeton
Connectez-vous, ouvrez « Jetons d'API » dans le menu utilisateur et envoyez votre première requête.
Aller aux jetons d'APIPas encore de compte ? Inscrivez-vous gratuitement et importez d'abord un export, sinon l'API n'a rien à montrer.