AccediRegistrati

L'API di P2P Dash

I dati del tuo portafoglio P2P in JSON, per un foglio di calcolo, uno script o una dashboard tutta tua. Crei un token nel tuo account, lo mandi con ogni richiesta e ricevi gli stessi numeri che vedi in P2P Dash.

Sola letturaGratisPrima versione

La tua prima richiesta

Tre passaggi in un terminale su macOS o Linux. Se preferisci partire da Google Sheets, più sotto trovi l'esempio giusto.

1

Crea un token

In P2P Dash apri il menu utente e vai su «Token API». Dai un nome al token, imposta «I tuoi dati» su «Lettura» e scegli quando scade. Il token lo vedi una volta sola, quindi copialo subito.

2

Tienilo fuori dal codice

Mettilo in una variabile d'ambiente, qui P2PDASH_TOKEN, non in un file che condividi. Chiunque abbia il token può leggere i tuoi numeri.

3

Manda una richiesta

Ogni richiesta porta il token nell'header Authorization. La risposta è JSON, con i tuoi dati sotto data.

Richiesta
export P2PDASH_TOKEN="p2pdash_..."

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

Su Windows in PowerShell imposta il token con $env:P2PDASH_TOKEN = "p2pdash_...", scrivi curl.exe invece di curl, metti la richiesta su una sola riga e usa $env:P2PDASH_TOKEN nell'header.

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

Sono numeri di esempio. totalBalance è quanto vale il tuo account: depositi meno prelievi più tutto quello che hai guadagnato, al netto di commissioni, tasse e perdite.

Esempi

Quattro cose che puoi fare con l'API. Copia il codice, imposta il tuo token e adattalo da lì.

Il tuo saldo in Google Sheets

Nel tuo foglio apri Estensioni → Apps Script e incolla questa funzione. In Impostazioni progetto → Proprietà script aggiungi P2PDASH_TOKEN con il tuo token. Poi scrivi la formula in una cella. Funziona con qualsiasi campo del riepilogo, per esempio "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];
}
Risultato
=P2PDASH("totalBalance")   →  12233.5

Sheets tiene il risultato e richiede i dati solo quando cambia la formula. Per aggiornare, aggiungi un secondo argomento come =P2PDASH("totalBalance", A1) e cambia A1. Ogni cella è una richiesta. Chi può modificare il foglio può anche leggere il token in Apps Script, quindi non farlo in un foglio che altri possono modificare.

Interessi al mese

La serie temporale con granularity=month ti dà un punto per ogni mese con dati. Installa la libreria una volta con 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}")
Risultato
2026-08 94.80
2026-09 96.42
2026-10 98.15

XIRR per piattaforma

Salva il codice come xirr.mjs ed esegui node xirr.mjs (Node.js 18 o successivo). Lo XIRR arriva come frazione: 0.0984 vuol dire 9,84% all'anno. Una piattaforma senza abbastanza dati riceve 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);
}
Risultato
Platform A   9.84%
Platform B   10.37%
Platform C   11.20%
Platform D   -

I numeri per la dichiarazione dei redditi

Interessi e bonus per piattaforma in un anno, accorciati con jq. Cosa conta come reddito dipende dalle regole del tuo paese; l'API mostra solo quello che c'è in 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}'
Risultato
{
  "name": "Platform A",
  "interest": 412.37,
  "bonus": 25
}
{
  "name": "Platform B",
  "interest": 288.9,
  "bonus": 0
}

Cosa puoi leggere

L'account intero, ogni portafoglio e ogni piattaforma rispondono alle stesse cinque domande. Le impari una volta e puoi farle a ogni livello.

Le cinque viste

Ogni vista esiste in tre versioni. Per una piattaforma prendi prima il suo ID da /api/v1/platforms, poi mettilo al posto di {id}. Con i portafogli funziona allo stesso modo.

summary

I totali dall'inizio: interessi, bonus, commissioni, perdite, depositi, prelievi e i saldi che ne derivano.

Tutto l'account
GET /api/v1/account/summary
Un portafoglio
GET /api/v1/portfolios/{id}/summary
Una piattaforma
GET /api/v1/platforms/{id}/summary
timeseries

Gli stessi numeri nel tempo, per giorno, mese o anno, con il saldo alla fine di ogni periodo. Comodo per i grafici.

Tutto l'account
GET /api/v1/account/timeseries
Un portafoglio
GET /api/v1/portfolios/{id}/timeseries
Una piattaforma
GET /api/v1/platforms/{id}/timeseries
metrics

XIRR (dall'inizio e per anno, con e senza bonus), cash drag, saldo investito medio e indice di libertà del capitale, per piattaforma e in totale.

Tutto l'account
GET /api/v1/account/metrics
Un portafoglio
GET /api/v1/portfolios/{id}/metrics
Una piattaforma
GET /api/v1/platforms/{id}/metrics
income-projection

Quanto renderebbe il tuo saldo attuale al giorno, al mese e all'anno con il tuo XIRR passato senza bonus. Una proiezione, non una promessa.

Tutto l'account
GET /api/v1/account/income-projection
Un portafoglio
GET /api/v1/portfolios/{id}/income-projection
Una piattaforma
GET /api/v1/platforms/{id}/income-projection
tax

Interessi, bonus, tasse trattenute, commissioni e perdite per piattaforma e anno solare, a partire dall'anno più recente.

Tutto l'account
GET /api/v1/account/tax
Un portafoglio
GET /api/v1/portfolios/{id}/tax
Una piattaforma
GET /api/v1/platforms/{id}/tax

Elenchi e dettagli

GET /api/v1/account
Quale token stai usando, i suoi ambiti e quando scade. Utile per controllare che un token funzioni ancora.
GET /api/v1/platforms
Tutte le tue piattaforme con ID, portafogli e totali. Parti da qui per trovare gli ID.
GET /api/v1/platforms/{id}
Una piattaforma, lo stesso oggetto dell'elenco.
GET /api/v1/platforms/{id}/intent-history
Quando hai cambiato i tuoi piani per una piattaforma (aumentare, mantenere, uscire e così via).
GET /api/v1/portfolios
Tutti i tuoi portafogli con le loro piattaforme.
GET /api/v1/portfolios/{id}
Un portafoglio.
GET /api/v1/platform-types
Dati per tipo di piattaforma: paese, classi di attivi, regolamentazione, anno di fondazione. Uguali per tutti gli utenti.

Parametri di query

from, to
Solo per timeseries. Giorni nel formato YYYY-MM-DD, estremi inclusi. Con month o year si allargano ai periodi interi. I saldi contano comunque dal tuo primo giorno di dati, quindi un from più tardo non li azzera.
granularity
Solo per timeseries. day (predefinito), month o year. La data di un punto è l'ultimo giorno del suo periodo. Un giorno o un periodo senza dati non ha nessun punto, quindi non aspettarti degli zeri.
year
Solo per tax. Un anno solare come 2025. Le piattaforme senza dati in quell'anno non compaiono.

Ogni campo di ogni risposta è descritto nel documento OpenAPI. Strumenti come Postman o Swagger UI sanno leggerlo e i generatori di codice possono crearne un client.

Apri il documento OpenAPI

Buono a sapersi

Le regole che valgono per tutti gli endpoint.

Sola lettura

L'API legge i tuoi dati e non cambia niente. Import e impostazioni restano nell'app.

Aggiornata quanto il tuo ultimo import

P2P Dash non scarica niente dalle piattaforme. L'API restituisce quello che hai importato o inserito a mano, e lastDate ti dice l'ultimo giorno con dati.

60 richieste, poi un minuto di pausa

Per token. Il conteggio riparte da zero solo dopo un minuto intero senza nessuna richiesta con quel token, quindi anche uno script che chiede ogni pochi secondi arriva al limite. A quel punto ricevi un 429, e Retry-After ti dice quanti secondi aspettare. Le risposte andate a buon fine mostrano quante ne restano in X-RateLimit-Remaining.

Importi in EUR

I movimenti di denaro come deposit, withdrawal o fee sono sempre positivi; la direzione sta nel nome. I saldi e netIncome possono andare sotto zero. XIRR e cash drag sono frazioni (0.075 è il 7,5%), l'indice di libertà del capitale va da 0 a 100.

Date in UTC

Giorni come YYYY-MM-DD, istanti come ISO 8601. Un giorno è quello dell'export, senza fusi orari che lo spostano.

Token

Fino a 10 token attivi per account, validi «30 giorni», «90 giorni», «1 anno» o senza scadenza («Mai»). Con «Revoca» nella pagina dei token, il token smette subito di funzionare.

Quando qualcosa va storto

Gli errori tornano come JSON con un error.code fisso. Controlla il codice, non il messaggio: il messaggio può cambiare, i codici restano.

StatoCodice e significato
400invalid_request

Un parametro è sbagliato. details indica ogni campo e cosa non va.

401unauthorized

Il token manca, è scritto male, è stato revocato o è scaduto.

403insufficient_scope

Il token non ha il permesso di leggere questa parte dell'API.

404not_found

Il percorso non esiste, oppure l'ID non corrisponde a nessuna delle tue piattaforme o dei tuoi portafogli.

429rate_limited

60 richieste senza un minuto di pausa. Aspetta i secondi indicati da Retry-After.

500internal_error

Errore nostro. Riprova più tardi e, se continua a succedere, scrivici.

Esistono altri due codici 403, forbidden e plan_required. Con un account normale non li vedrai.

Esempio: una data che non esiste

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

Domande sull'API

Prima della tua prima richiesta.

L'API costa qualcosa?

No. Come l'app, per ora è gratis per tutti gli account.

Posso importare transazioni tramite l'API?

Non ancora. L'API legge e basta. Gli export li carichi sempre nell'app.

Devo saper programmare?

Non molto. L'esempio per Google Sheets è un copia e incolla, e la richiesta curl gira nel terminale su macOS e Linux. Per tutto il resto aiuta un po' di Python o JavaScript.

Cosa succede se qualcuno mette le mani sul mio token?

Può leggere i tuoi numeri di P2P Dash, ma non può cambiare niente e non vede mai la tua email né la tua password. Revoca il token nella pagina dei token e smette subito di funzionare.

L'API cambierà?

Sì, può succedere. Questa è la prima versione e campi o endpoint possono ancora cambiare senza un nuovo numero di versione. Se ci costruisci sopra qualcosa, metti in conto di doverlo adattare ogni tanto.

Posso leggere i dati di altri utenti?

No. Un token legge sempre e solo i dati dell'account che l'ha creato. L'unica eccezione è l'elenco dei tipi di piattaforma, che contiene dati pubblici sulle piattaforme.

Crea il tuo primo token

Accedi, apri «Token API» nel menu utente e manda la tua prima richiesta.

Vai ai token API

Non hai ancora un account? Registrati gratis e importa prima un export, altrimenti l'API non ha niente da mostrare.