A API do P2P Dash
Os dados da tua carteira P2P em JSON, para uma folha de cálculo, um script ou o teu próprio dashboard. Crias um token na tua conta, envia-lo com cada pedido e recebes os mesmos números que vês no P2P Dash.
O teu primeiro pedido
Três passos num terminal em macOS ou Linux. Se preferires começar no Google Sheets, tens um exemplo mais abaixo.
Cria um token
No P2P Dash, abre o menu de utilizador e entra em «Tokens de API». Dá um nome ao token, escolhe «Leitura» em «Os teus dados» e define quando expira. O token só aparece uma vez, por isso copia-o logo.
Mantém-no fora do código
Guarda-o numa variável de ambiente, aqui P2PDASH_TOKEN, e não num ficheiro que partilhas. Quem tiver o token pode ler os teus números.
Envia um pedido
Cada pedido leva o token no cabeçalho Authorization. A resposta vem em JSON, com os teus dados dentro de data.
export P2PDASH_TOKEN="p2pdash_..."
curl https://app.p2pdash.com/api/v1/account/summary \
-H "Authorization: Bearer $P2PDASH_TOKEN"No Windows, em PowerShell, define o token com $env:P2PDASH_TOKEN = "p2pdash_...", escreve curl.exe em vez de curl, põe o pedido numa só linha e usa $env:P2PDASH_TOKEN no cabeçalho.
{
"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
}
}Estes números são exemplos. totalBalance é quanto vale a tua conta: depósitos menos levantamentos mais tudo o que ganhaste, depois de comissões, impostos e perdas.
Exemplos
Quatro coisas que podes fazer com a API. Copia o código, define o teu token e adapta a partir daí.
O teu saldo no Google Sheets
Na tua folha, abre Extensões → Apps Script e cola esta função. Em Definições do projeto → Propriedades do script, adiciona P2PDASH_TOKEN com o teu token. Depois escreve a fórmula numa célula. Funciona com qualquer campo do resumo, por exemplo "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.5O Sheets guarda o resultado e só volta a perguntar quando a fórmula muda. Para atualizar, junta um segundo argumento como =P2PDASH("totalBalance", A1) e altera A1. Cada célula é um pedido. Quem puder editar a folha também consegue ler o token no Apps Script, por isso não faças isto numa folha que outras pessoas editam.
Juros por mês
A série temporal com granularity=month dá-te um ponto por cada mês com dados. Instala a biblioteca uma vez com 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 isto como xirr.mjs e corre node xirr.mjs (Node.js 18 ou mais recente). O XIRR vem como fração: 0.0984 quer dizer 9,84% por ano. Uma plataforma sem dados suficientes recebe 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 -Números para a declaração de impostos
Juros e bónus por plataforma para um ano, resumidos com jq. O que conta como rendimento depende das regras do teu país; a API só mostra o que está no 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
}O que podes ler
A tua conta inteira, cada carteira e cada plataforma respondem às mesmas cinco perguntas. Aprendes uma vez e podes fazê-las a qualquer nível.
As cinco vistas
Cada vista existe três vezes. Para uma plataforma, vai primeiro buscar o ID dela a /api/v1/platforms e põe-no no lugar de {id}. As carteiras funcionam da mesma forma.
summaryOs totais desde o início: juros, bónus, comissões, perdas, depósitos, levantamentos e os saldos que resultam deles.
- Conta inteira
- GET /api/v1/account/summary
- Uma carteira
- GET /api/v1/portfolios/{id}/summary
- Uma plataforma
- GET /api/v1/platforms/{id}/summary
timeseriesOs mesmos números ao longo do tempo, por dia, mês ou ano, com o saldo no fim de cada período. Dá jeito para gráficos.
- Conta inteira
- GET /api/v1/account/timeseries
- Uma carteira
- GET /api/v1/portfolios/{id}/timeseries
- Uma plataforma
- GET /api/v1/platforms/{id}/timeseries
metricsXIRR (desde o início e por ano, com e sem bónus), cash drag, saldo investido médio e o Índice de Liberdade de Capital, por plataforma e no total.
- Conta inteira
- GET /api/v1/account/metrics
- Uma carteira
- GET /api/v1/portfolios/{id}/metrics
- Uma plataforma
- GET /api/v1/platforms/{id}/metrics
income-projectionO que o teu saldo atual renderia por dia, mês e ano com o teu XIRR passado sem bónus. É uma projeção, não uma promessa.
- Conta inteira
- GET /api/v1/account/income-projection
- Uma carteira
- GET /api/v1/portfolios/{id}/income-projection
- Uma plataforma
- GET /api/v1/platforms/{id}/income-projection
taxJuros, bónus, impostos retidos, comissões e perdas por plataforma e ano civil, do ano mais recente para o mais antigo.
- Conta inteira
- GET /api/v1/account/tax
- Uma carteira
- GET /api/v1/portfolios/{id}/tax
- Uma plataforma
- GET /api/v1/platforms/{id}/tax
Listas e detalhes
- GET /api/v1/account
- Que token estás a usar, os seus âmbitos e quando expira. Útil para confirmar que um token ainda funciona.
- GET /api/v1/platforms
- Todas as tuas plataformas com os IDs, as carteiras e os totais. Começa aqui para encontrar os IDs.
- GET /api/v1/platforms/{id}
- Uma plataforma, o mesmo objeto que aparece na lista.
- GET /api/v1/platforms/{id}/intent-history
- Quando mudaste o teu plano para uma plataforma (crescer, manter, sair, etc.).
- GET /api/v1/portfolios
- Todas as tuas carteiras com as respetivas plataformas.
- GET /api/v1/portfolios/{id}
- Uma carteira.
- GET /api/v1/platform-types
- Factos por tipo de plataforma: país, classes de ativos, regulação, ano de fundação. São iguais para todos os utilizadores.
Parâmetros de consulta
from, to- Só para
timeseries. Dias no formatoYYYY-MM-DD, ambos incluídos. Commonthouyearalargam-se a períodos completos. Os saldos continuam a contar desde o teu primeiro dia com dados, por isso umfrommais tarde não os põe a zero. granularity- Só para
timeseries.day(predefinição),monthouyear. A data de cada ponto é o último dia do seu período. Um dia ou período sem dados não tem ponto nenhum, por isso não contes com zeros. year- Só para
tax. Um ano civil, por exemplo2025. As plataformas sem dados nesse ano ficam de fora.
Todos os campos de todas as respostas estão no documento OpenAPI. Ferramentas como o Postman ou o Swagger UI conseguem lê-lo, e os geradores de código conseguem criar um cliente a partir dele.
Abrir o documento OpenAPIBom saber
As regras que valem para todos os endpoints.
Só de leitura
A API lê os teus dados e não altera nada. As importações e as definições continuam a fazer-se na app.
Tão atual como a tua última importação
O P2P Dash não vai buscar nada às plataformas. A API devolve o que importaste ou introduziste à mão, e lastDate diz-te qual é o último dia com dados.
60 pedidos, depois um minuto de pausa
Por token. A contagem só recomeça quando o token passa um minuto inteiro sem nenhum pedido, por isso um script que pergunta de poucos em poucos segundos também chega ao limite. Aí recebes um 429, e Retry-After diz quantos segundos tens de esperar. As respostas com sucesso mostram o que te resta em X-RateLimit-Remaining.
Valores em EUR
Os movimentos de dinheiro como deposit, withdrawal ou fee são sempre positivos; a direção está no nome. Os saldos e o netIncome podem ficar abaixo de zero. O XIRR e o cash drag são frações (0.075 é 7,5%), o Índice de Liberdade de Capital vai de 0 a 100.
Datas em UTC
Dias como YYYY-MM-DD, momentos no tempo em ISO 8601. Um dia é o dia que está na exportação, sem fusos horários a mudá-lo.
Tokens
Até 10 tokens ativos por conta, válidos por «30 dias», «90 dias», «1 ano» ou «Nunca». Se carregares em «Revogar» na página dos tokens, o token deixa de funcionar na hora.
Quando algo corre mal
Os erros chegam em JSON com um error.code fixo. Verifica o código, não a mensagem: a mensagem pode mudar, os códigos ficam.
| Estado | Código e significado |
|---|---|
| 400 | invalid_requestUm parâmetro está errado. |
| 401 | unauthorizedO token falta, está mal escrito, foi revogado ou expirou. |
| 403 | insufficient_scopeO token não tem permissão para ler esta parte da API. |
| 404 | not_foundO caminho não existe, ou o ID não pertence a nenhuma plataforma ou carteira tua. |
| 429 | rate_limited60 pedidos sem um minuto de pausa. Espera os segundos que |
| 500 | internal_errorO erro é nosso. Tenta mais tarde e, se continuar a acontecer, escreve-nos. |
Existem mais dois códigos 403, forbidden e plan_required. Com uma conta normal não os vais ver.
Exemplo: uma data que não 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"
}
]
}
}Perguntas sobre a API
Antes do teu primeiro pedido.
A API custa alguma coisa?
Não. Tal como a app, neste momento é grátis para todas as contas.
Posso importar transações através da API?
Ainda não. A API só lê. Continuas a carregar as tuas exportações na app.
Preciso de saber programar?
Não muito. O exemplo do Google Sheets é copiar e colar, e o pedido com curl corre no terminal em macOS e Linux. Para ir mais longe, ajuda saber um pouco de Python ou JavaScript.
O que acontece se alguém ficar com o meu token?
Pode ler os teus números do P2P Dash, mas não consegue alterar nada e nunca vê o teu email nem a tua palavra-passe. Revoga o token na página dos tokens e ele deixa de funcionar de imediato.
A API vai mudar?
Sim, pode mudar. Esta é a primeira versão, e os campos ou os endpoints ainda podem mudar sem um novo número de versão. Se construíres algo em cima dela, conta com ter de ajustar de vez em quando.
Posso obter dados de outros utilizadores?
Não. Um token só lê os dados da conta que o criou. A única exceção é a lista de tipos de plataforma, que tem factos públicos sobre as plataformas.
Cria o teu primeiro token
Inicia sessão, abre «Tokens de API» no menu de utilizador e envia o teu primeiro pedido.
Ir para Tokens de APIAinda não tens conta? Regista-te grátis e importa primeiro uma exportação, senão a API não tem nada para mostrar.