Iniciar sesiónRegistrarse

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.

Solo lecturaGratisPrimera versión

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.

1

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.

2

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.

3

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.

Petición
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.

Respuesta
{
  "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".

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];
}
Resultado
=P2PDASH("totalBalance")   →  12233.5

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

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}")
Resultado
2026-08 94.80
2026-09 96.42
2026-10 98.15

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

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);
}
Resultado
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 + 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}'
Resultado
{
  "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.

summary

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

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

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

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

Intereses, 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 formato YYYY-MM-DD, ambos incluidos. Con month o year se amplían a periodos completos. Los saldos se siguen calculando desde tu primer día con datos, así que un from posterior no los pone a cero.
granularity
Solo para timeseries. day (por defecto), month o year. 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 ejemplo 2025. 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 OpenAPI

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

EstadoCódigo y significado
400invalid_request

Hay un parámetro incorrecto. details nombra cada campo y qué le pasa.

401unauthorized

Falta el token, está mal escrito, revocado o caducado.

403insufficient_scope

El token no tiene permiso para leer esta parte de la API.

404not_found

La ruta no existe, o el ID no corresponde a ninguna de tus plataformas o carteras.

429rate_limited

60 peticiones sin un minuto de pausa. Espera los segundos que indique Retry-After.

500internal_error

Es 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

Petición
curl "https://app.p2pdash.com/api/v1/account/timeseries?from=2025-02-30" \
  -H "Authorization: Bearer $P2PDASH_TOKEN"
Respuesta
{
  "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.