Zaloguj sięZarejestruj się

API P2P Dash

Dane twojego portfela P2P w formacie JSON, do arkusza, skryptu albo własnego dashboardu. Tworzysz token na swoim koncie, dołączasz go do każdego zapytania i dostajesz te same liczby, które widzisz w P2P Dash.

Tylko odczytZa darmoPierwsza wersja

Twoje pierwsze zapytanie

Trzy kroki w terminalu na macOS albo Linuksie. Wolisz zacząć w Google Sheets? Przykłady niżej pokazują, jak to zrobić.

1

Utwórz token

W P2P Dash otwórz menu użytkownika i wejdź w „Tokeny API”. Nadaj tokenowi nazwę, dla „Twoje dane” wybierz „Odczyt” i ustaw, kiedy ma wygasnąć. Token pokazujemy tylko raz, więc skopiuj go od razu.

2

Nie wpisuj go w kod

Zapisz go w zmiennej środowiskowej, tutaj P2PDASH_TOKEN, a nie w pliku, który komuś udostępniasz. Kto ma token, ten może odczytać twoje liczby.

3

Wyślij zapytanie

Każde zapytanie niesie token w nagłówku Authorization. Odpowiedź przychodzi jako JSON, a twoje dane są pod data.

Zapytanie
export P2PDASH_TOKEN="p2pdash_..."

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

Na Windowsie w PowerShellu ustaw token poleceniem $env:P2PDASH_TOKEN = "p2pdash_...", zamiast curl pisz curl.exe, całe zapytanie zmieść w jednej linii, a w nagłówku użyj $env:P2PDASH_TOKEN.

Odpowiedź
{
  "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
  }
}

To przykładowe liczby. totalBalance to wartość twojego konta: wpłaty minus wypłaty plus wszystko, co zarobiłeś, po opłatach, podatkach i stratach.

Przykłady

Cztery rzeczy, które zrobisz z API. Skopiuj kod, ustaw swój token i dopasuj resztę do siebie.

Twoje saldo w Google Sheets

W arkuszu otwórz Rozszerzenia → Apps Script i wklej tę funkcję. W Ustawienia projektu → Właściwości skryptu dodaj P2PDASH_TOKEN ze swoim tokenem. Potem wpisz formułę do komórki. Zadziała każde pole z podsumowania, np. "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];
}
Wynik
=P2PDASH("totalBalance")   →  12233.5

Sheets zapamiętuje wynik i pyta ponownie dopiero, gdy zmieni się formuła. Żeby odświeżyć, dodaj drugi argument, np. =P2PDASH("totalBalance", A1), i zmień A1. Każda komórka to jedno zapytanie. Każdy, kto może edytować arkusz, zobaczy też token w Apps Script, więc nie rób tego w arkuszu, który edytują inni.

Odsetki miesięcznie

Szereg czasowy z granularity=month daje jeden punkt na każdy miesiąc z danymi. Bibliotekę zainstaluj raz poleceniem 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}")
Wynik
2026-08 94.80
2026-09 96.42
2026-10 98.15

XIRR dla każdej platformy

Zapisz to jako xirr.mjs i uruchom node xirr.mjs (Node.js 18 lub nowszy). XIRR przychodzi jako ułamek: 0.0984 oznacza 9,84% rocznie. Platforma, która nie ma dość danych, dostaje 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);
}
Wynik
Platform A   9.84%
Platform B   10.37%
Platform C   11.20%
Platform D   -

Liczby do zeznania podatkowego

Odsetki i bonusy dla każdej platformy za jeden rok, skrócone przez jq. Co z tego liczy się jako dochód, zależy od przepisów twojego kraju; API pokazuje tylko to, co jest w 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}'
Wynik
{
  "name": "Platform A",
  "interest": 412.37,
  "bonus": 25
}
{
  "name": "Platform B",
  "interest": 288.9,
  "bonus": 0
}

Co możesz odczytać

Całe konto, każdy portfel i każda platforma odpowiadają na te same pięć pytań. Wystarczy je poznać raz, a zadasz je na każdym poziomie.

Pięć widoków

Każdy widok istnieje w trzech wersjach. Dla jednej platformy najpierw pobierz jej ID z /api/v1/platforms, a potem wstaw je w miejsce {id}. Z portfelami jest tak samo.

summary

Sumy za cały okres: odsetki, bonusy, opłaty, straty, wpłaty, wypłaty i wynikające z nich salda.

Całe konto
GET /api/v1/account/summary
Jeden portfel
GET /api/v1/portfolios/{id}/summary
Jedna platforma
GET /api/v1/platforms/{id}/summary
timeseries

Te same liczby w czasie, dziennie, miesięcznie albo rocznie, z saldem na koniec każdego okresu. Przydaje się do wykresów.

Całe konto
GET /api/v1/account/timeseries
Jeden portfel
GET /api/v1/portfolios/{id}/timeseries
Jedna platforma
GET /api/v1/platforms/{id}/timeseries
metrics

XIRR (za cały okres i za każdy rok, z bonusami i bez), cash drag, średnie zainwestowane saldo i indeks wolności kapitału, dla każdej platformy i łącznie.

Całe konto
GET /api/v1/account/metrics
Jeden portfel
GET /api/v1/portfolios/{id}/metrics
Jedna platforma
GET /api/v1/platforms/{id}/metrics
income-projection

Ile twoje obecne saldo zarobiłoby dziennie, miesięcznie i rocznie przy twoim dotychczasowym XIRR bez bonusów. To prognoza, nie obietnica.

Całe konto
GET /api/v1/account/income-projection
Jeden portfel
GET /api/v1/portfolios/{id}/income-projection
Jedna platforma
GET /api/v1/platforms/{id}/income-projection
tax

Odsetki, bonusy, pobrane podatki, opłaty i straty dla każdej platformy i roku kalendarzowego, od najnowszego roku.

Całe konto
GET /api/v1/account/tax
Jeden portfel
GET /api/v1/portfolios/{id}/tax
Jedna platforma
GET /api/v1/platforms/{id}/tax

Listy i szczegóły

GET /api/v1/account
Którego tokena używasz, jakie ma zakresy i kiedy wygasa. Dobry sposób, żeby sprawdzić, czy token nadal działa.
GET /api/v1/platforms
Wszystkie twoje platformy z ich ID, portfelami i sumami. Od tego zacznij, żeby poznać ID.
GET /api/v1/platforms/{id}
Jedna platforma, ten sam obiekt co na liście.
GET /api/v1/platforms/{id}/intent-history
Kiedy zmieniałeś swój plan wobec platformy (rozwijać, trzymać, wyjść i tak dalej).
GET /api/v1/portfolios
Wszystkie twoje portfele z ich platformami.
GET /api/v1/portfolios/{id}
Jeden portfel.
GET /api/v1/platform-types
Fakty o każdym typie platformy: kraj, klasy aktywów, regulacje, rok założenia. Takie same dla każdego użytkownika.

Parametry zapytania

from, to
Tylko dla timeseries. Dni w formacie YYYY-MM-DD, oba włącznie. Przy month albo year rozszerzają się do pełnych okresów. Salda i tak liczą się od pierwszego dnia twoich danych, więc późniejsze from ich nie zeruje.
granularity
Tylko dla timeseries. day (domyślnie), month albo year. Datą punktu jest ostatni dzień jego okresu. Dzień albo okres bez danych nie ma żadnego punktu, więc nie licz na zera.
year
Tylko dla tax. Rok kalendarzowy, np. 2025. Platformy bez danych w tym roku są pomijane.

Każde pole każdej odpowiedzi jest opisane w dokumencie OpenAPI. Czytają go narzędzia takie jak Postman czy Swagger UI, a generatory kodu potrafią zbudować z niego klienta.

Otwórz dokument OpenAPI

Dobrze wiedzieć

Zasady, które obowiązują dla każdego punktu końcowego.

Tylko odczyt

API czyta twoje dane i niczego nie zmienia. Importy i ustawienia nadal robisz w aplikacji.

Tak aktualne jak twój ostatni import

P2P Dash niczego nie pobiera z platform. API zwraca to, co zaimportowałeś albo wpisałeś ręcznie, a lastDate mówi, który dzień jest ostatnim z danymi.

60 zapytań, potem minuta przerwy

Na token. Licznik zaczyna od nowa dopiero wtedy, gdy token przez pełną minutę nie dostanie żadnego zapytania, więc skrypt, który pyta co kilka sekund, też trafi na limit. Wtedy dostajesz 429, a Retry-After mówi, ile sekund odczekać. Udane odpowiedzi pokazują w X-RateLimit-Remaining, ile ci zostało.

Kwoty w EUR

Przepływy pieniędzy takie jak deposit, withdrawal czy fee są zawsze dodatnie; kierunek wynika z nazwy. Salda i netIncome mogą spaść poniżej zera. XIRR i cash drag to ułamki (0.075 to 7,5%), a indeks wolności kapitału ma skalę od 0 do 100.

Daty w UTC

Dni jako YYYY-MM-DD, momenty w czasie jako ISO 8601. Dzień to dzień z eksportu, strefy czasowe go nie przesuwają.

Tokeny

Do 10 aktywnych tokenów na konto, ważnych „30 dni”, „90 dni”, „1 rok” albo bez wygaśnięcia („Nigdy”). Kliknij „Unieważnij” na stronie tokenów, a token od razu przestanie działać.

Gdy coś pójdzie nie tak

Błędy wracają jako JSON ze stałym error.code. Sprawdzaj kod, a nie komunikat: komunikat może się zmienić, kody zostają.

StatusKod i znaczenie
400invalid_request

Któryś parametr jest błędny. details podaje każde pole i co z nim nie tak.

401unauthorized

Brakuje tokena, jest źle wpisany, unieważniony albo wygasł.

403insufficient_scope

Token nie ma prawa odczytu tej części API.

404not_found

Taka ścieżka nie istnieje albo ID nie należy do żadnej twojej platformy ani portfela.

429rate_limited

60 zapytań bez minuty przerwy. Odczekaj tyle sekund, ile podaje Retry-After.

500internal_error

Błąd po naszej stronie. Spróbuj później, a jeśli to się powtarza, napisz do nas.

Są jeszcze dwa kody 403, forbidden i plan_required. Na zwykłym koncie ich nie zobaczysz.

Przykład: data, która nie istnieje

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

Pytania o API

Zanim wyślesz pierwsze zapytanie.

Czy API coś kosztuje?

Nie. Tak jak aplikacja, jest teraz darmowe dla każdego konta.

Czy mogę importować transakcje przez API?

Jeszcze nie. API tylko odczytuje dane. Eksporty nadal wgrywasz w aplikacji.

Czy muszę umieć programować?

Niewiele. Przykład z Google Sheets to kopiuj i wklej, a zapytanie curl działa w terminalu na macOS i Linuksie. Do czegoś więcej przyda się trochę Pythona albo JavaScriptu.

Co się stanie, jeśli ktoś zdobędzie mój token?

Odczyta twoje liczby z P2P Dash, ale niczego nie zmieni i nigdy nie zobaczy twojego e-maila ani hasła. Unieważnij token na stronie tokenów, a od razu przestanie działać.

Czy API się zmieni?

Tak, może. To pierwsza wersja i pola albo punkty końcowe mogą się jeszcze zmienić bez nowego numeru wersji. Jeśli coś na nim budujesz, licz się z tym, że od czasu do czasu trzeba będzie to poprawić.

Czy mogę pobrać dane innych użytkowników?

Nie. Token zawsze czyta tylko dane konta, które go utworzyło. Jedyny wyjątek to lista typów platform, która zawiera publiczne fakty o platformach.

Utwórz swój pierwszy token

Zaloguj się, otwórz „Tokeny API” w menu użytkownika i wyślij pierwsze zapytanie.

Przejdź do tokenów API

Nie masz jeszcze konta? Zarejestruj się za darmo i najpierw zaimportuj eksport, inaczej API nie będzie miało czego pokazać.