Konto API
Dokumentacja Konto API systemu CallAPI / VPBX.
Informacje rozliczeniowe
Informacje rozliczeniowe API służy do pobrania aktualnego stanu rozliczeniowego konta: salda, typu konta (przedpłacone / postpaid), limitów wydatków oraz pozostałych środków.
Zapytanie zawsze dotyczy konta, do którego należy użyty token JWT.
Przykład z wykorzystaniem cURL:
GET https://api.vpbx.pl/api/v1/account/accounting
curl --header "Content-Type: application/json" \
--header "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAoMS0Iiwi" \
--request GET \
https://api.vpbx.pl/api/v1/account/accounting
Przykład poprawnej odpowiedzi:
{
"result": "OK",
"accounting": {
"account_type": "prepaid",
"currency": "Zloty",
"currency_iso": "PLN",
"balance": "95.06",
"available_credit": "19.03",
"limits": {
"daily": {
"spent": "80.97",
"global": {
"limit": "200.00",
"remaining": "119.03",
"percentage_used": 40.48
},
"self_imposed": {
"limit": "100.00",
"remaining": "19.03",
"percentage_used": 80.97
},
"binding": "self_imposed"
},
"monthly": {
"spent": "80.97",
"global": {
"limit": "200.00",
"remaining": "119.03",
"percentage_used": 40.48
},
"self_imposed": {
"limit": null,
"remaining": null,
"percentage_used": null
},
"binding": "global"
}
},
"as_of": "2026-07-31T12:01:02Z"
}
}
Przykład błędu:
{
"error": "token expired",
"result": "error"
}
Odpowiedź
| Pole | Typ | Opis |
|---|---|---|
| result | String | Status zapytania. [OK | error] |
| accounting | Object | Dane rozliczeniowe konta |
Obiekt accounting
| Pole | Typ | Opis |
|---|---|---|
| account_type | String | Typ konta. [prepaid | postpaid | unknown] |
| currency | String | Nazwa waluty konta |
| currency_iso | String | Kod waluty w formacie ISO 4217 |
| balance | String | Saldo konta. Zawsze wartość dodatnia - znaczenie zależy od account_type |
| available_credit | String | Kwota, którą konto może jeszcze wydać. null oznacza brak ograniczeń |
| limits | Object | Limity wydatków dzienne i miesięczne |
| as_of | String | Data i czas wygenerowania danych w formacie RFC3339, w strefie czasowej UTC |
Saldo a typ konta
Pole balance jest zawsze liczbą dodatnią, a jego znaczenie określa account_type:
| account_type | Znaczenie pola balance |
|---|---|
| prepaid | Środki pozostałe na koncie |
| postpaid | Kwota aktualnie należna (zadłużenie) |
Do decyzji, czy konto może wykonać połączenie lub wysłać wiadomość, należy używać pola available_credit, a nie balance. Dla kont prepaid jest to saldo ograniczone dodatkowo przez obowiązujące limity. Dla kont postpaid o dostępnych środkach decydują wyłącznie limity - saldo nie ogranicza wydatków.
Obiekt limits
| Pole | Typ | Opis |
|---|---|---|
| daily | Object | Limity dzienne. Licznik zerowany jest codziennie |
| monthly | Object | Limity miesięczne. Licznik zerowany jest raz w miesiącu |
Każdy z okresów (daily, monthly) zawiera:
| Pole | Typ | Opis |
|---|---|---|
| spent | String | Kwota wydana w danym okresie. Wspólna dla obu limitów |
| global | Object | Limit globalny, ustawiany przez operatora |
| self_imposed | Object | Limit własny, ustawiany samodzielnie przez użytkownika w panelu |
| binding | String | Który z limitów faktycznie ogranicza konto. [global | self_imposed]. null gdy żaden limit nie jest ustawiony |
Oba limity obowiązują jednocześnie - decyduje ten bardziej restrykcyjny. Pole binding wskazuje, z którego z nich wyliczono available_credit. W przypadku równych wartości zwracany jest global.
Obiekty global i self_imposed
| Pole | Typ | Opis |
|---|---|---|
| limit | String | Wysokość limitu. null oznacza brak limitu |
| remaining | String | Kwota pozostała do wykorzystania w danym okresie. null gdy limit nie jest ustawiony |
| percentage_used | Float | Procent wykorzystania limitu, w zakresie 0-100. null gdy limit nie jest ustawiony |
Wartość null w polu limit oznacza, że limit nie jest ustawiony, czyli nie ogranicza konta. Nie należy jej interpretować jako limitu równego zero. Gdy limit nie jest ustawiony, pola remaining oraz percentage_used również przyjmują wartość null.
Jeśli konto przekroczy limit, pole remaining przyjmuje wartość 0.00, a percentage_used wartość 100 - wartości te nigdy nie są ujemne ani większe niż 100.
Format kwot
Wszystkie kwoty zwracane są jako łańcuchy znaków (String), a nie jako liczby, z dokładnością wynikającą z waluty konta - dla PLN, EUR i GBP są to dwa miejsca po przecinku ("95.06", "200.00").
Zapis tekstowy pozwala zachować pełną dokładność kwoty, w tym końcowe zera, co nie jest możliwe przy użyciu typu liczbowego w formacie JSON. Przed wykonaniem obliczeń lub porównań na tych wartościach należy przekonwertować je na typ dziesiętny - porównywanie ich jako tekstu da błędne wyniki.
Pole percentage_used nie jest kwotą i zwracane jest jako liczba.
Odpowiedź - błąd
| Pole | Typ | Opis |
|---|---|---|
| result | String | Status zapytania. [OK | error] |
| error | String | Opis błędu |
Kody błędów HTTP
| Kod HTTP | Opis |
|---|---|
| 200 | Dane rozliczeniowe zwrócone poprawnie |
| 401 | Brak tokenu JWT, token nieprawidłowy lub wygasły |
| 404 | Konto nie zostało znalezione |
| 503 | Usługa rozliczeniowa chwilowo niedostępna - danych nie udało się pobrać |
Kod 503 oznacza, że stanu konta nie udało się ustalić. W takiej sytuacji odpowiedź nigdy nie zawiera danych rozliczeniowych - w szczególności nie należy interpretować jej jako zerowego salda.