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.
Je eerste verzoek
Drie stappen in een terminal op macOS of Linux. Begin je liever in Google Sheets, kijk dan bij de voorbeelden verderop.
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.
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.
Stuur een verzoek
Elk verzoek draagt het token in de header Authorization. Het antwoord is JSON, met je gegevens onder data.
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.
{
"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".
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 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.
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 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.
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 -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 -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
}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.
summaryTotalen 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
timeseriesDezelfde 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
metricsXIRR (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-projectionWat 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
taxRente, 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 alsYYYY-MM-DD, allebei inclusief. Metmonthofyearworden ze opgerekt tot hele periodes. De saldo's tellen nog steeds vanaf je eerste dag met gegevens, dus een laterefromzet ze niet op nul. granularity- Alleen voor
timeseries.day(standaard),monthofyear. 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 zoals2025. 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-documentGoed 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.
| Status | Code en betekenis |
|---|---|
| 400 | invalid_requestEen parameter klopt niet. |
| 401 | unauthorizedHet token ontbreekt, is verkeerd getypt, ingetrokken of verlopen. |
| 403 | insufficient_scopeHet token mag dit deel van de API niet lezen. |
| 404 | not_foundHet pad bestaat niet, of het ID hoort bij geen van je platforms of portefeuilles. |
| 429 | rate_limited60 verzoeken zonder een minuut pauze. Wacht zoveel seconden als |
| 500 | internal_errorOnze 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
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"
}
]
}
}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-tokensNog geen account? Meld je gratis aan en importeer eerst een export, anders heeft de API niets te laten zien.