InloggenRegistreren

De P2P Dash API

Je P2P-portefeuille als JSON, voor een spreadsheet, een script of je eigen dashboard. Je maakt een token aan in je account, stuurt het mee met elk verzoek en krijgt dezelfde cijfers terug die je in P2P Dash ziet.

Alleen lezenGratisEerste versie

Je eerste verzoek

Drie stappen in een terminal op macOS of Linux. Begin je liever in Google Sheets, kijk dan bij de voorbeelden verderop.

1

Maak een token aan

Open in P2P Dash het gebruikersmenu en ga naar "API-tokens". Geef het token een naam, zet "Je eigen gegevens" op "Lezen" en kies wanneer het verloopt. We tonen het token maar één keer, dus kopieer het meteen.

2

Houd het uit je code

Zet het in een omgevingsvariabele, hier P2PDASH_TOKEN, en niet in een bestand dat je deelt. Wie het token heeft, kan je cijfers lezen.

3

Stuur een verzoek

Elk verzoek draagt het token in de header Authorization. Het antwoord is JSON, met je gegevens onder data.

Verzoek
export P2PDASH_TOKEN="p2pdash_..."

curl https://app.p2pdash.com/api/v1/account/summary \
  -H "Authorization: Bearer $P2PDASH_TOKEN"

Op Windows in PowerShell zet je het token met $env:P2PDASH_TOKEN = "p2pdash_...", schrijf je curl.exe in plaats van curl, zet je het verzoek op één regel en gebruik je $env:P2PDASH_TOKEN in de header.

Antwoord
{
  "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
  }
}

Dit zijn voorbeeldcijfers. totalBalance is wat je account waard is: stortingen min opnames plus alles wat je verdiend hebt, na kosten, belastingen en verliezen.

Voorbeelden

Vier dingen die je met de API kunt doen. Kopieer de code, zet je token erin en pas het verder aan.

Je saldo in Google Sheets

Open in je spreadsheet Extensies → Apps Script en plak deze functie. Voeg onder Projectinstellingen → Scripteigenschappen P2PDASH_TOKEN toe met je token. Typ daarna de formule in een cel. Elk veld van de samenvatting werkt, bijvoorbeeld "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];
}
Uitvoer
=P2PDASH("totalBalance")   →  12233.5

Sheets onthoudt het resultaat en vraagt pas opnieuw als de formule verandert. Wil je verversen, geef dan een tweede argument mee, zoals =P2PDASH("totalBalance", A1), en verander A1. Elke cel is één verzoek. Wie de spreadsheet mag bewerken, kan in Apps Script ook het token lezen, dus doe dit niet in een spreadsheet die anderen kunnen bewerken.

Rente per maand

De tijdreeks met granularity=month geeft je één punt per maand met gegevens. Installeer de bibliotheek één keer met 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}")
Uitvoer
2026-08 94.80
2026-09 96.42
2026-10 98.15

XIRR per platform

Sla dit op als xirr.mjs en start het met node xirr.mjs (Node.js 18 of nieuwer). De XIRR komt als breuk: 0.0984 betekent 9,84% per jaar. Een platform met te weinig gegevens krijgt 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);
}
Uitvoer
Platform A   9.84%
Platform B   10.37%
Platform C   11.20%
Platform D   -

Cijfers voor je belastingaangifte

Rente en bonussen per platform voor één jaar, ingekort met jq. Wat daarvan als inkomen telt, hangt af van de regels in je land. De API laat alleen zien wat er in P2P Dash staat.

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}'
Uitvoer
{
  "name": "Platform A",
  "interest": 412.37,
  "bonus": 25
}
{
  "name": "Platform B",
  "interest": 288.9,
  "bonus": 0
}

Wat je kunt opvragen

Je hele account, elke portefeuille en elk platform beantwoorden dezelfde vijf vragen. Ken je ze één keer, dan kun je ze op elk niveau stellen.

De vijf weergaven

Elke weergave bestaat drie keer. Voor één platform haal je eerst het ID op via /api/v1/platforms en zet je dat op de plek van {id}. Portefeuilles werken net zo.

summary

Totalen over de hele looptijd: rente, bonussen, kosten, verliezen, stortingen, opnames en de saldo's die daaruit volgen.

Hele account
GET /api/v1/account/summary
Eén portefeuille
GET /api/v1/portfolios/{id}/summary
Eén platform
GET /api/v1/platforms/{id}/summary
timeseries

Dezelfde cijfers door de tijd, per dag, maand of jaar, met het saldo aan het eind van elke periode. Handig voor grafieken.

Hele account
GET /api/v1/account/timeseries
Eén portefeuille
GET /api/v1/portfolios/{id}/timeseries
Eén platform
GET /api/v1/platforms/{id}/timeseries
metrics

XIRR (over de hele looptijd en per jaar, met en zonder bonussen), cash drag, gemiddeld belegd saldo en de kapitaalvrijheidsindex, per platform en in totaal.

Hele account
GET /api/v1/account/metrics
Eén portefeuille
GET /api/v1/portfolios/{id}/metrics
Eén platform
GET /api/v1/platforms/{id}/metrics
income-projection

Wat je huidige saldo per dag, maand en jaar zou opleveren tegen je eerdere XIRR zonder bonussen. Een schatting, geen belofte.

Hele account
GET /api/v1/account/income-projection
Eén portefeuille
GET /api/v1/portfolios/{id}/income-projection
Eén platform
GET /api/v1/platforms/{id}/income-projection
tax

Rente, bonussen, ingehouden belasting, kosten en verliezen per platform en kalenderjaar, het nieuwste jaar eerst.

Hele account
GET /api/v1/account/tax
Eén portefeuille
GET /api/v1/portfolios/{id}/tax
Eén platform
GET /api/v1/platforms/{id}/tax

Lijsten en details

GET /api/v1/account
Welk token je gebruikt, wat het mag en wanneer het verloopt. Handig om te checken of een token nog werkt.
GET /api/v1/platforms
Al je platforms met hun ID's, portefeuilles en totalen. Begin hier om de ID's te vinden.
GET /api/v1/platforms/{id}
Eén platform, hetzelfde object als in de lijst.
GET /api/v1/platforms/{id}/intent-history
Wanneer je je plan voor een platform hebt veranderd (groeien, vasthouden, uitstappen enzovoort).
GET /api/v1/portfolios
Al je portefeuilles met hun platforms.
GET /api/v1/portfolios/{id}
Eén portefeuille.
GET /api/v1/platform-types
Feiten per platformtype: land, activaklassen, regulering, oprichtingsjaar. Voor elke gebruiker hetzelfde.

Queryparameters

from, to
Alleen voor timeseries. Dagen als YYYY-MM-DD, allebei inclusief. Met month of year worden ze opgerekt tot hele periodes. De saldo's tellen nog steeds vanaf je eerste dag met gegevens, dus een latere from zet ze niet op nul.
granularity
Alleen voor timeseries. day (standaard), month of year. De datum van een punt is de laatste dag van zijn periode. Een dag of periode zonder gegevens heeft helemaal geen punt, dus verwacht geen nullen.
year
Alleen voor tax. Een kalenderjaar zoals 2025. Platforms zonder gegevens in dat jaar vallen weg.

Elk veld van elk antwoord staat in het OpenAPI-document. Tools als Postman of Swagger UI kunnen het lezen, en codegenerators maken er een client van.

Open het OpenAPI-document

Goed om te weten

De regels die voor elk endpoint gelden.

Alleen lezen

De API leest je gegevens en verandert niets. Imports en instellingen doe je nog steeds in de app.

Zo actueel als je laatste import

P2P Dash haalt niets op bij de platforms. De API geeft terug wat je hebt geïmporteerd of met de hand hebt ingevoerd, en lastDate vertelt je de laatste dag met gegevens.

60 verzoeken, dan een minuut pauze

Per token. De teller begint pas opnieuw als het token een volle minuut lang geen enkel verzoek heeft gekregen. Ook een script dat om de paar seconden vraagt, loopt dus tegen de grens aan. Dan krijg je een 429, en Retry-After zegt hoeveel seconden je moet wachten. Geslaagde antwoorden laten in X-RateLimit-Remaining zien hoeveel er nog over zijn.

Bedragen in EUR

Geldstromen zoals deposit, withdrawal of fee zijn altijd positief, de richting zit in de naam. Saldo's en netIncome kunnen onder nul gaan. XIRR en cash drag zijn breuken (0.075 is 7,5%), de kapitaalvrijheidsindex loopt van 0 tot 100.

Datums in UTC

Dagen als YYYY-MM-DD, tijdstippen als ISO 8601. Een dag is de dag uit de export, zonder dat tijdzones hem verschuiven.

Tokens

Tot 10 actieve tokens per account. Als looptijd kies je "30 dagen", "90 dagen", "1 jaar" of "Nooit". Klik je op de tokenpagina op "Intrekken", dan werkt het token meteen niet meer.

Als er iets misgaat

Fouten komen terug als JSON met een vaste error.code. Kijk naar de code, niet naar de melding: de melding kan veranderen, de codes blijven.

StatusCode en betekenis
400invalid_request

Een parameter klopt niet. details noemt elk veld en wat eraan mis is.

401unauthorized

Het token ontbreekt, is verkeerd getypt, ingetrokken of verlopen.

403insufficient_scope

Het token mag dit deel van de API niet lezen.

404not_found

Het pad bestaat niet, of het ID hoort bij geen van je platforms of portefeuilles.

429rate_limited

60 verzoeken zonder een minuut pauze. Wacht zoveel seconden als Retry-After aangeeft.

500internal_error

Onze fout. Probeer het later opnieuw, en mail ons als het blijft gebeuren.

Er zijn nog twee 403-codes, forbidden en plan_required. Met een gewoon account kom je ze niet tegen.

Voorbeeld: een datum die niet bestaat

Verzoek
curl "https://app.p2pdash.com/api/v1/account/timeseries?from=2025-02-30" \
  -H "Authorization: Bearer $P2PDASH_TOKEN"
Antwoord
{
  "error": {
    "code": "invalid_request",
    "message": "Not a valid calendar date",
    "details": [
      {
        "field": "from",
        "message": "Not a valid calendar date"
      }
    ]
  }
}

Vragen over de API

Voor je eerste verzoek.

Kost de API iets?

Nee. Net als de app is hij op dit moment gratis voor elk account.

Kan ik transacties importeren via de API?

Nog niet. De API leest alleen. Je exports upload je nog steeds in de app.

Moet ik kunnen programmeren?

Niet veel. Het Google Sheets-voorbeeld is kopiëren en plakken, en het curl-verzoek draait in de terminal op macOS en Linux. Voor alles daarbuiten helpt een beetje Python of JavaScript.

Wat gebeurt er als iemand mijn token in handen krijgt?

Die kan je cijfers in P2P Dash lezen, maar niets veranderen, en je e-mailadres of wachtwoord ziet hij nooit. Trek het token in op de tokenpagina, dan werkt het meteen niet meer.

Gaat de API nog veranderen?

Ja, dat kan. Dit is de eerste versie, en velden of endpoints kunnen nog veranderen zonder nieuw versienummer. Bouw je er iets op, reken er dan op dat je het af en toe moet bijwerken.

Kan ik gegevens van andere gebruikers ophalen?

Nee. Een token leest alleen de gegevens van het account dat het heeft aangemaakt. De enige uitzondering is de lijst met platformtypes, en die bevat openbare feiten over de platforms.

Maak je eerste token aan

Log in, open "API-tokens" in het gebruikersmenu en stuur je eerste verzoek.

Naar API-tokens

Nog geen account? Meld je gratis aan en importeer eerst een export, anders heeft de API niets te laten zien.