ConnexionInscription

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.

Lecture seuleGratuitePremière version

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.

1

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.

2

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.

3

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.

Requête
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.

Réponse
{
  "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".

Google Apps Script
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];
}
Résultat
=P2PDASH("totalBalance")   →  12233.5

Sheets 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.

Python
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}")
Résultat
2026-08 94.80
2026-09 96.42
2026-10 98.15

XIRR 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.

JavaScript (Node.js)
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);
}
Résultat
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 + jq
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}'
Résultat
{
  "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.

summary

Les 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
timeseries

Les 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
metrics

XIRR (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-projection

Ce 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
tax

Inté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 format YYYY-MM-DD, bornes incluses. Avec month ou year, ils s'élargissent aux périodes entières. Les soldes comptent toujours depuis votre premier jour de données : un from plus tardif ne les remet pas à zéro.
granularity
Uniquement pour timeseries. day (par défaut), month ou year. 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 comme 2025. 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 OpenAPI

Bon à 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.

StatutCode et signification
400invalid_request

Un paramètre est incorrect. details nomme chaque champ et ce qui ne va pas.

401unauthorized

Le jeton manque, est mal recopié, révoqué ou expiré.

403insufficient_scope

Le jeton n'a pas le droit de lire cette partie de l'API.

404not_found

Le chemin n'existe pas, ou l'ID ne correspond à aucune de vos plateformes ni à aucun de vos portefeuilles.

429rate_limited

60 requêtes sans une minute de pause. Attendez le nombre de secondes indiqué par Retry-After.

500internal_error

L'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

Requête
curl "https://app.p2pdash.com/api/v1/account/timeseries?from=2025-02-30" \
  -H "Authorization: Bearer $P2PDASH_TOKEN"
Réponse
{
  "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'API

Pas encore de compte ? Inscrivez-vous gratuitement et importez d'abord un export, sinon l'API n'a rien à montrer.