La API de P2P Dash
Los datos de tu cartera P2P en JSON, para una hoja de cálculo, un script o tu propio dashboard. Creas un token en tu cuenta, lo envías con cada petición y recibes las mismas cifras que ves en P2P Dash.
Tu primera petición
Tres pasos en una terminal de macOS o Linux. Si prefieres empezar en Google Sheets, más abajo tienes un ejemplo.
Crea un token
En P2P Dash, abre el menú de usuario y entra en «Tokens de API». Ponle un nombre al token, elige «Lectura» para «Tus datos» y decide cuándo caduca. El token solo se muestra una vez, así que cópialo en ese momento.
No lo pongas en tu código
Guárdalo en una variable de entorno, aquí P2PDASH_TOKEN, y no en un archivo que compartas. Quien tenga el token puede leer tus cifras.
Envía una petición
Cada petición lleva el token en la cabecera Authorization. La respuesta es JSON y tus datos van dentro de data.
export P2PDASH_TOKEN="p2pdash_..."
curl https://app.p2pdash.com/api/v1/account/summary \
-H "Authorization: Bearer $P2PDASH_TOKEN"En Windows con PowerShell, define el token con $env:P2PDASH_TOKEN = "p2pdash_...", escribe curl.exe en lugar de curl, pon la petición en una sola línea y usa $env:P2PDASH_TOKEN en la cabecera.
{
"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
}
}Las cifras son de ejemplo. totalBalance es lo que vale tu cuenta: depósitos menos retiradas más todo lo que has ganado, después de comisiones, impuestos y pérdidas.
Ejemplos
Cuatro cosas que puedes hacer con la API. Copia el código, configura tu token y ajústalo a partir de ahí.
Tu saldo en Google Sheets
En tu hoja, abre Extensiones → Apps Script y pega esta función. En Configuración del proyecto → Propiedades de la secuencia de comandos, añade P2PDASH_TOKEN con tu token. Después escribe la fórmula en una celda. Sirve cualquier campo del resumen, por ejemplo "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 guarda el resultado y solo vuelve a preguntar cuando cambia la fórmula. Para actualizarlo, añade un segundo argumento como =P2PDASH("totalBalance", A1) y cambia A1. Cada celda es una petición. Cualquiera que pueda editar la hoja también puede leer el token en Apps Script, así que no lo hagas en una hoja que editan otras personas.
Intereses por mes
La serie temporal con granularity=month te da un punto por cada mes con datos. Instala la librería una vez con 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 por plataforma
Guarda esto como xirr.mjs y ejecuta node xirr.mjs (Node.js 18 o posterior). El XIRR llega como fracción: 0.0984 significa 9,84 % al año. Una plataforma sin datos suficientes devuelve 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 -Cifras para tu declaración de la renta
Intereses y bonos por plataforma de un año, filtrados con jq. Cuáles cuentan como ingresos depende de las normas de tu país; la API solo muestra lo que hay en 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
}Qué puedes leer
Tu cuenta entera, cada cartera y cada plataforma responden a las mismas cinco preguntas. Las aprendes una vez y puedes hacerlas a cualquier nivel.
Las cinco vistas
Cada vista existe tres veces. Para una plataforma, consulta primero su ID en /api/v1/platforms y ponlo en lugar de {id}. Con las carteras funciona igual.
summaryLos totales desde el principio: intereses, bonos, comisiones, pérdidas, depósitos, retiradas y los saldos que salen de ellos.
- Cuenta entera
- GET /api/v1/account/summary
- Una cartera
- GET /api/v1/portfolios/{id}/summary
- Una plataforma
- GET /api/v1/platforms/{id}/summary
timeseriesLas mismas cifras a lo largo del tiempo, por día, mes o año, con el saldo al final de cada periodo. Pensado para gráficos.
- Cuenta entera
- GET /api/v1/account/timeseries
- Una cartera
- GET /api/v1/portfolios/{id}/timeseries
- Una plataforma
- GET /api/v1/platforms/{id}/timeseries
metricsXIRR (desde el principio y por año, con y sin bonos), cash drag, saldo invertido medio y el Ratio de Ganancias, por plataforma y en total.
- Cuenta entera
- GET /api/v1/account/metrics
- Una cartera
- GET /api/v1/portfolios/{id}/metrics
- Una plataforma
- GET /api/v1/platforms/{id}/metrics
income-projectionLo que ganaría tu saldo actual por día, mes y año con tu XIRR pasado sin bonos. Es una proyección, no una promesa.
- Cuenta entera
- GET /api/v1/account/income-projection
- Una cartera
- GET /api/v1/portfolios/{id}/income-projection
- Una plataforma
- GET /api/v1/platforms/{id}/income-projection
taxIntereses, bonos, impuestos retenidos, comisiones y pérdidas por plataforma y año natural, empezando por el año más reciente.
- Cuenta entera
- GET /api/v1/account/tax
- Una cartera
- GET /api/v1/portfolios/{id}/tax
- Una plataforma
- GET /api/v1/platforms/{id}/tax
Listas y detalles
- GET /api/v1/account
- Qué token estás usando, sus permisos y cuándo caduca. Sirve para comprobar si un token sigue funcionando.
- GET /api/v1/platforms
- Todas tus plataformas con sus ID, carteras y totales. Empieza aquí para encontrar los ID.
- GET /api/v1/platforms/{id}
- Una plataforma, el mismo objeto que en la lista.
- GET /api/v1/platforms/{id}/intent-history
- Cuándo cambiaste tu plan para una plataforma (crecer, mantener, salir, etc.).
- GET /api/v1/portfolios
- Todas tus carteras con sus plataformas.
- GET /api/v1/portfolios/{id}
- Una cartera.
- GET /api/v1/platform-types
- Datos por tipo de plataforma: país, clases de activos, regulación, año de fundación. Son iguales para todos los usuarios.
Parámetros de consulta
from, to- Solo para
timeseries. Días en formatoYYYY-MM-DD, ambos incluidos. Conmonthoyearse amplían a periodos completos. Los saldos se siguen calculando desde tu primer día con datos, así que unfromposterior no los pone a cero. granularity- Solo para
timeseries.day(por defecto),monthoyear. La fecha de cada punto es el último día de su periodo. Un día o periodo sin datos no tiene ningún punto, así que no esperes ceros. year- Solo para
tax. Un año natural, por ejemplo2025. Las plataformas sin datos en ese año no aparecen.
Todos los campos de todas las respuestas están en el documento OpenAPI. Herramientas como Postman o Swagger UI pueden leerlo, y los generadores de código pueden crear un cliente a partir de él.
Abrir el documento OpenAPIConviene saber
Las reglas que valen para todos los endpoints.
Solo lectura
La API lee tus datos y no cambia nada. Las importaciones y los ajustes se siguen haciendo en la app.
Tan al día como tu última importación
P2P Dash no descarga nada de las plataformas. La API devuelve lo que importaste o introdujiste a mano, y lastDate te dice el último día con datos.
60 peticiones, luego un minuto de pausa
Por token. El contador solo vuelve a empezar cuando el token pasa un minuto entero sin ninguna petición, así que un script que pregunta cada pocos segundos también llega al límite. Entonces recibes un 429, y Retry-After indica cuántos segundos esperar. Las respuestas correctas muestran lo que te queda en X-RateLimit-Remaining.
Importes en EUR
Los movimientos de dinero como deposit, withdrawal o fee son siempre positivos; la dirección está en el nombre. Los saldos y netIncome pueden ser negativos. El XIRR y el cash drag son fracciones (0.075 es 7,5 %), el Ratio de Ganancias va de 0 a 100.
Fechas en UTC
Los días como YYYY-MM-DD, los momentos concretos en ISO 8601. Un día es el día que pone la exportación, sin que las zonas horarias lo muevan.
Tokens
Hasta 10 tokens activos por cuenta, con caducidad de «30 días», «90 días», «1 año» o «Nunca». Si pulsas «Revocar» en la página de tokens, el token deja de funcionar al instante.
Cuando algo sale mal
Los errores llegan como JSON con un error.code fijo. Comprueba el código, no el mensaje: el mensaje puede cambiar, los códigos se mantienen.
| Estado | Código y significado |
|---|---|
| 400 | invalid_requestHay un parámetro incorrecto. |
| 401 | unauthorizedFalta el token, está mal escrito, revocado o caducado. |
| 403 | insufficient_scopeEl token no tiene permiso para leer esta parte de la API. |
| 404 | not_foundLa ruta no existe, o el ID no corresponde a ninguna de tus plataformas o carteras. |
| 429 | rate_limited60 peticiones sin un minuto de pausa. Espera los segundos que indique |
| 500 | internal_errorEs culpa nuestra. Vuelve a intentarlo más tarde y, si sigue pasando, escríbenos. |
Existen dos códigos 403 más, forbidden y plan_required. Con una cuenta normal no los verás.
Ejemplo: una fecha que no existe
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"
}
]
}
}Preguntas sobre la API
Antes de tu primera petición.
¿La API cuesta algo?
No. Igual que la app, ahora mismo es gratis para todas las cuentas.
¿Puedo importar transacciones a través de la API?
Todavía no. La API solo lee. Tus exportaciones se siguen subiendo en la app.
¿Necesito saber programar?
No mucho. El ejemplo de Google Sheets es copiar y pegar, y la petición con curl funciona en la terminal de macOS y Linux. Para todo lo demás, ayuda saber un poco de Python o JavaScript.
¿Qué pasa si alguien consigue mi token?
Puede leer tus cifras de P2P Dash, pero no puede cambiar nada y nunca ve tu email ni tu contraseña. Revoca el token en la página de tokens y deja de funcionar al momento.
¿Va a cambiar la API?
Sí, puede cambiar. Es la primera versión, y los campos o los endpoints todavía pueden cambiar sin un número de versión nuevo. Si construyes algo encima, cuenta con tener que ajustarlo de vez en cuando.
¿Puedo obtener datos de otros usuarios?
No. Un token solo lee los datos de la cuenta que lo creó. La única excepción es la lista de tipos de plataforma, que contiene datos públicos sobre las plataformas.
Crea tu primer token
Inicia sesión, abre «Tokens de API» en el menú de usuario y envía tu primera petición.
Ir a Tokens de API¿Aún no tienes cuenta? Regístrate gratis e importa primero una exportación; si no, la API no tiene nada que mostrar.