Przegląd
Manilo API to REST API w formacie JSON, służące do programowego zarządzania tą samą historią finansów, której używasz w aplikacji na iOS — kontami, kategoriami, budżetami, wspólnymi grupami i transakcjami. Zbudujesz na nim importery, eksportery, mostki synchronizacji, panele analityczne albo własne automatyzacje.
- Adres bazowy:
https://api.manilo.app— poprzedni adres bazowyapi.ledgy.appnadal działa. - Prefiks wersji: wszystkie endpointy opisane w tym dokumencie są dostępne pod
/api/v1/. - Transport: tylko HTTPS. Żądania HTTP nie są przyjmowane.
- Kodowanie: treść żądania i odpowiedzi w JSON. UTF-8. Nazwy pól w
camelCase. - Uwierzytelnianie:
Authorization: Bearer …przy każdym żądaniu. - Subskrypcja Cloud: wymagana na każdym endpoincie v1. Zobacz Wymóg subskrypcji.
https://api.manilo.app/mcp — zobacz Integracje. Opisane tutaj API REST jest przeznaczone do kodu, który piszesz samodzielnie.
Szybki start
Trzy kroki do pierwszego uwierzytelnionego żądania.
1. Wygeneruj Personal Access Token
- Zaloguj się do panelu Manilo i otwórz Ustawienia → Dostęp do API.
- Kliknij + Nowy token.
- Nadaj tokenowi opisową nazwę (np. „Zapier — cotygodniowy eksport”), wybierz potrzebne zakresy (zobacz Zakresy) i opcjonalnie ustaw datę wygaśnięcia.
- Skopiuj token. Zobaczysz go tylko raz. Tokeny zaczynają się od prefiksu
lgpat_, po którym następują 64 znaki szesnastkowe.
Ta sama strona wyświetla Twoje aktywne tokeny wraz z czasem ostatniego użycia i liczbą uprawnień, pokazuje ostrzeżenie „Wygasa za 30 dni” i pozwala natychmiast unieważnić dowolny token ikoną kosza. Jedno konto może mieć jednocześnie maksymalnie 25 aktywnych tokenów.
2. Wyślij żądanie
# Replace lgpat_… with your token curl "https://api.manilo.app/api/v1/accounts" \ -H "Authorization: Bearer lgpat_a1b2c3d4e5…"
3. Przeanalizuj odpowiedź
{
"items": [
{
"id": "acc_01HK8V…",
"name": "Wise EUR",
"currencyCode": "EUR",
"initialBalance": 1240.50,
"icon": "wallet",
"color": "#4A90E2",
"order": 0,
"createdAt": "2026-04-12T08:13:09Z",
"updatedAt": "2026-05-01T17:02:31Z"
}
],
"totalCount": 1
}
Uwierzytelnianie
Każde żądanie do /api/v1/ musi zawierać nagłówek Authorization. Akceptowane są dwa rodzaje tokenów:
- Personal Access Token (PAT) — długowieczny token bearer, który tworzysz w panelu na stronie Ustawienia → Dostęp do API. Format:
lgpat_+ 64 znaki szesnastkowe. Ograniczony zakresami, odwoływalny, opcjonalnie wygasający. Zalecany do wszystkich integracji zewnętrznych. - Sesyjny token JWT — krótkotrwały token wydawany aplikacjom własnym (iOS, panel www). Nie ma ograniczeń zakresów. Możesz go użyć do jednorazowych testów, jeśli uda Ci się wydobyć go z zalogowanej sesji, ale wspieraną ścieżką są tokeny PAT.
Format nagłówka
Authorization: Bearer lgpat_a1b2c3d4e5f6…
Limity tokenów
- Maksymalnie 25 aktywnych tokenów PAT na jedno konto Manilo.
- Przy tworzeniu tokenu możesz opcjonalnie ustawić datę wygaśnięcia. Wygasłe tokeny zwracają
401 Unauthorized. - Unieważnione tokeny przestają działać natychmiast — Manilo przechowuje wyłącznie skrót SHA-256 tokenu, nigdy jego wartość, więc tokenu, który wyciekł, nie da się odzyskać: można go tylko unieważnić i zastąpić nowym.
Najczęstsze błędy uwierzytelniania
- 401
- Brak tokenu albo token nieprawidłowy, wygasły lub unieważniony.
- 403
- Token jest prawidłowy, ale żądany endpoint wymaga zakresu, którego Twój token PAT nie posiada, albo Twoja subskrypcja Cloud nie jest aktywna.
Zakresy
Tokeny PAT działają w modelu domyślnej odmowy. Token może wywołać wyłącznie te endpointy, których wymagany zakres posiada; wszystko inne zwraca 403 Forbidden. Nadawaj możliwie najwęższy zestaw zakresów, jakiego naprawdę potrzebuje Twoja integracja.
Dostępne zakresy:
accounts:read
accounts:write
categories:read
categories:write
budgets:read
budgets:write
groups:read
groups:write
transactions:read
transactions:write
tags:read
tags:write
recurring:read
recurring:write
settings:read
settings:write
Każdy endpoint wymieniony poniżej pokazuje wymagany zakres jako mały fioletowy znacznik. Zakresy :write nie oznaczają automatycznie :read — jeśli potrzebujesz obu, poproś o oba.
Wymóg subskrypcji
Wszystkie endpointy v1 — również te tylko do odczytu — wymagają, aby wywołujący użytkownik miał aktywną subskrypcję Manilo Cloud. Jeśli subskrypcja została anulowana, wygasła albo nigdy nie została uruchomiona, API odpowiada:
HTTP/1.1 403 Forbidden
X-Subscription-Required: true
Content-Type: application/json
{ "error": "Active cloud subscription required" }
Nagłówek X-Subscription-Required pozwala klientom odróżnić blokadę subskrypcji od zwykłej odmowy uprawnień. Dostęp przywrócisz, aktywując ponownie Cloud w aplikacji na iOS lub na dashboard.manilo.app/upgrade.
Błędy
Błędy korzystają ze standardowych kodów statusu HTTP. Treścią odpowiedzi jest obiekt JSON z jednym polem:
{ "error": "Human-readable message" }
Kody statusu, które warto obsłużyć:
- 200
- OK — zwrócono zasób albo listę.
- 201
- Created — utworzono nowy zasób. Nagłówek
Locationwskazuje kanoniczny adres URL. - 204
- No Content — usunięcie powiodło się; bez treści odpowiedzi.
- 400
- Walidacja nie powiodła się — brak wymaganego pola, wartość poza zakresem, nieprawidłowy JSON.
- 401
- Uwierzytelnianie nie powiodło się — zobacz Uwierzytelnianie.
- 403
- Odmowa dostępu — niewystarczający zakres lub nieaktywna subskrypcja.
- 404
- Nie znaleziono zasobu albo jest on ukryty ze względu na uprawnienia.
- 409
- Conflict — np. naruszenie ograniczenia unikalności.
- 5xx
- Błąd po stronie serwera. Idempotentne odczyty można bezpiecznie ponowić z wykładniczo rosnącym odstępem.
Paginacja i filtry
Endpointy listujące domyślnie zwracają wszystkie pasujące elementy. Transakcje — jedyny zasób, który może mocno urosnąć — obsługują paginację kursorową.
Kursor transakcji
curl "https://api.manilo.app/api/v1/transactions?limit=50&type=expense&dateFrom=2026-01-01" \ -H "Authorization: Bearer lgpat_…"
Odpowiedź zawiera pole nextCursor. Przekaż je z powrotem jako parametr zapytania cursor, aby pobrać kolejną stronę; gdy nextCursor ma wartość null, oznacza to koniec listy.
limit— rozmiar strony, ograniczany do1..200. Domyślnie50.cursor— token nieprzezroczysty. Traktuj go jak czarną skrzynkę.type,dateFrom,dateTo,categoryId,accountId,groupId— filtry opcjonalne; zobacz endpoint Lista transakcji.
Typy i formaty
- Identyfikatory — nieprzezroczyste ciągi znaków. Nie parsuj ich; traktuj je jak identyfikatory UTF-8 z rozróżnianiem wielkości liter.
- Znaczniki czasu — ISO-8601 w UTC z końcowym
Z, np."2026-05-13T10:30:00Z". - Daty (np. pole transakcji
date) — ten sam format ISO-8601, ale znacząca jest wyłącznie część datowa. - Kwoty — liczby JSON w jednostkach głównych, z dokładnością do 4 miejsc po przecinku (np.
12.50). Nigdy w jednostkach podrzędnych. Zawsze w parze zcurrencyCode. - Kody walut — ISO-4217, dokładnie trzy wielkie litery (np.
"EUR","USD","GBP"). - Usuwanie — wszystkie operacje usuwania to usunięcia miękkie. Usunięte elementy przestają pojawiać się w odpowiedziach list i pobrań; powiązania z osobami współdzielącymi oraz historyczne paragony zostają zachowane.
- Efekty uboczne — usunięcie konta, kategorii lub grupy nie narusza powiązanych transakcji; odpinane są jedynie odwołania. Endpoint Usuń konto przyjmuje jawnie wskazaną strategię.
Konta
Konta to kubełki, które przechowują salda — rachunek bankowy, karta kredytowa, portfel gotówkowy, rachunek maklerski. Każda transakcja jest powiązana z jednym kontem (albo z dwoma, gdy jest to przelew).
/api/v1/accounts
accounts:read
Zwraca każde konto, którego uwierzytelniony użytkownik jest właścicielem lub do którego ma dostęp.
/api/v1/accounts/{id}
accounts:read
Pobiera jedno konto po identyfikatorze. 404, jeśli nie znaleziono.
/api/v1/accounts
accounts:write
Tworzy nowe konto. Zwraca 201 z utworzonym obiektem oraz nagłówek Location.
| Pole | Typ | Opis |
|---|---|---|
| name | string | wymaganeNazwa wyświetlana. Maks. 100 znaków. |
| currencyCode | string | wymaganeISO-4217. Dokładnie 3 litery. |
| initialBalance | number | wymaganeSaldo początkowe w walucie currencyCode. |
| order | integer | wymaganePozycja sortowania. Niższa wartość jest wyżej. |
| icon | string | opcjonalneIdentyfikator ikony z /api/v1/icons. Maks. 50. |
| color | string | opcjonalneKolor szesnastkowy, np. "#4A90E2". Maks. 20. |
| iconColor | string | opcjonalneNadpisuje kolor ikony. |
POST /api/v1/accounts
{
"name": "Cash",
"currencyCode": "EUR",
"initialBalance": 50.00,
"order": 2,
"icon": "wallet",
"color": "#22C55E"
}
{
"id": "acc_01HK8V…",
"name": "Cash",
"currencyCode": "EUR",
"initialBalance": 50.00,
"order": 2,
"icon": "wallet",
"color": "#22C55E",
"iconColor": null,
"shareInviteToken": null,
"createdAt": "2026-05-13T10:30:00Z",
"updatedAt": "2026-05-13T10:30:00Z"
}
/api/v1/accounts/{id}
accounts:write
Zastępuje istniejące konto. Treść żądania jest identyczna jak w Utwórz; należy podać wszystkie pola.
/api/v1/accounts/{id}
accounts:write
Usuwa konto miękko. O tym, co stanie się z jego transakcjami, decydujesz parametrem zapytania action.
| Pole | Typ | Opis |
|---|---|---|
| action | enum | opcjonalneDetach (domyślnie): usuwa odwołanie do konta w każdej transakcji. Move: przenosi transakcje na konto wskazane w moveTargetAccountId. DeleteAll: usuwa miękko każdą powiązaną transakcję, której jesteś właścicielem. |
| moveTargetAccountId | string | opcjonalneWymagane, gdy action=Move. Identyfikator konta docelowego. |
Kategorie
Kategorie określają, czego dotyczy transakcja (zakupy spożywcze, czynsz, przychód z freelancingu). Kategorie systemowe są tylko do odczytu i wspólne dla wszystkich użytkowników; kategoriami użytkownika zarządzasz sam. Grupy kategorii łączą powiązane ze sobą kategorie.
/api/v1/categories/system-categories
categories:read
Zwraca wyselekcjonowany przez Manilo zestaw kategorii „dobrze znanych” — startowy zestaw dostarczany z aplikacją na iOS. Jest wersjonowany globalnie i można go bezpiecznie buforować według pola version.
Kategorie użytkownika
/api/v1/categories
categories:read
Zwraca wszystkie kategorie zdefiniowane przez użytkownika.
/api/v1/categories/{id}
categories:read
Pobiera jedną kategorię użytkownika po identyfikatorze.
/api/v1/categories
categories:write
Tworzy kategorię użytkownika.
| Pole | Typ | Opis |
|---|---|---|
| name | string | wymaganeNazwa wyświetlana. Maks. 100. |
| type | string | wymagane"income" lub "expense". |
| order | integer | wymaganePozycja sortowania w obrębie grupy. |
| isPinned | boolean | wymaganePrzypina na górze listy wyboru. |
| categoryGroupId | string | opcjonalneIdentyfikator grupy nadrzędnej albo null dla kategorii bez grupy. |
| icon | string | opcjonalneIdentyfikator ikony. |
| color | string | opcjonalneKolor szesnastkowy. |
/api/v1/categories/{id}
categories:write
Zastępuje kategorię użytkownika. Treść żądania jest identyczna jak w Utwórz.
/api/v1/categories/{id}
categories:write
Usuwa miękko kategorię użytkownika. Transakcje nie są usuwane; czyszczone jest ich pole categoryId.
Grupy kategorii
/api/v1/categories/groups
categories:read
Zwraca Twoje grupy kategorii.
/api/v1/categories/groups/{id}
categories:read
Pobiera jedną grupę kategorii.
/api/v1/categories/groups
categories:write
Tworzy grupę kategorii.
| Pole | Typ | Opis |
|---|---|---|
| name | string | wymaganeNazwa wyświetlana. Maks. 100. |
| order | integer | wymaganePozycja sortowania. |
| icon | string | opcjonalneIdentyfikator ikony. |
| color | string | opcjonalneKolor szesnastkowy. |
/api/v1/categories/groups/{id}
categories:write
Zastępuje grupę kategorii.
/api/v1/categories/groups/{id}
categories:write
Usuwa miękko grupę. Kategorie podrzędne zostają zachowane — czyszczone jest ich pole categoryGroupId.
Budżety
Budżet ogranicza wydatki w ramach kategorii (a gdy categoryId ma wartość null — w ramach całej historii transakcji) w powtarzalnym okresie. Aby udostępnić budżet grupie, ustaw groupId.
/api/v1/budgets
budgets:read
Zwraca wszystkie budżety.
/api/v1/budgets/{id}
budgets:read
Pobiera jeden budżet.
/api/v1/budgets
budgets:write
Tworzy budżet.
| Pole | Typ | Opis |
|---|---|---|
| amount | number | wymaganeLimit na okres. Musi być większy niż 0. |
| currencyCode | string | wymaganeISO-4217. |
| period | integer | wymagane0 tygodniowy · 1 miesięczny · 2 kwartalny · 3 roczny. |
| startDate | string (ISO-8601) | wymaganePoczątek pierwszego okresu. |
| isActive | boolean | wymaganeCzy ten budżet jest obecnie egzekwowany. |
| endDate | string (ISO-8601) | opcjonalnePo tej dacie śledzenie zostaje wstrzymane. |
| name | string | opcjonalneEtykieta. Maks. 200. |
| categoryId | string | opcjonalneKategoria do śledzenia. Pomiń, aby objąć budżetem wszystkie wydatki. |
| groupId | string | opcjonalneGrupa, której chcesz udostępnić budżet. Pomiń dla budżetu osobistego. |
/api/v1/budgets/{id}
budgets:write
Zastępuje budżet.
/api/v1/budgets/{id}
budgets:write
Usuwa budżet miękko.
Grupy
Grupy to wspólne historie transakcji — gospodarstwo domowe, wyjazd, wspólne mieszkanie. Każdy członek widzi te same transakcje; własność pozostaje osobista. Członkostwem i zaproszeniami zarządza się w aplikacji na iOS; API udostępnia tutaj sam zasób.
/api/v1/groups
groups:read
Zwraca grupy, których jesteś właścicielem lub członkiem.
/api/v1/groups/{id}
groups:read
Pobiera jedną grupę.
/api/v1/groups
groups:write
Tworzy grupę. Stajesz się jej właścicielem; członków zaprosisz z aplikacji na iOS.
| Pole | Typ | Opis |
|---|---|---|
| name | string | wymaganeNazwa wyświetlana. Maks. 100. |
| description | string | opcjonalneDowolny tekst. Maks. 500. |
| icon | string | opcjonalneIdentyfikator ikony. |
| color | string | opcjonalneKolor szesnastkowy. |
/api/v1/groups/{id}
groups:write
Zastępuje metadane grupy.
/api/v1/groups/{id}
groups:write
Usuwa grupę miękko. Członkowie tracą widoczność; powiązane transakcje wracają do statusu osobistych.
Transakcje
Transakcje to czasowniki Twojej historii finansów. Występują w czterech postaciach: income, expense, transfer (z konta na konto) oraz adjustment (jednorazowe wyrównanie salda). Endpoint podstawowy tworzy przychody i wydatki; przelewy mają własny endpoint; dla importerów o dużym wolumenie istnieją warianty zbiorcze.
/api/v1/transactions
transactions:read
Zwraca listę transakcji z paginacją kursorową i filtrami.
| Pole | Typ | Opis |
|---|---|---|
| limit | integer | opcjonalneRozmiar strony. 1..200. Domyślnie 50. |
| cursor | string | opcjonalneNieprzezroczysty token kontynuacji z poprzedniej odpowiedzi. |
| type | string | opcjonalne"income", "expense", "transfer" lub "adjustment". |
| dateFrom | string (ISO-8601) | opcjonalneDolna granica włącznie. |
| dateTo | string (ISO-8601) | opcjonalneGórna granica włącznie. |
| categoryId | string | opcjonalneFiltruje do jednej kategorii. |
| accountId | string | opcjonalneFiltruje do jednego konta. |
| groupId | string | opcjonalneFiltruje do wspólnej grupy. |
{
"items": [ /* TransactionDto[] */ ],
"totalCount": 317,
"nextCursor": "eyJrIjoiMjAyNi0wNS0xM1QxMDoz…"
}
/api/v1/transactions/{id}
transactions:read
Pobiera jedną transakcję.
/api/v1/transactions
transactions:write
Tworzy pojedynczą transakcję przychodu lub wydatku. Do przelewów użyj /transfer.
| Pole | Typ | Opis |
|---|---|---|
| type | string | wymagane"income" lub "expense". |
| amount | number | wymaganeKwota dodatnia w walucie currencyCode. |
| currencyCode | string | wymaganeISO-4217. |
| date | string (ISO-8601) | wymaganeKiedy nastąpiła transakcja (UTC). |
| accountId | string | opcjonalneKonto źródłowe lub docelowe. |
| categoryId | string | opcjonalneEtykieta kategorii. |
| payee | string | opcjonalneSprzedawca lub kontrahent. Maks. 200. |
| note | string | opcjonalneDowolna notatka. Maks. 2000. |
| groupId | string | opcjonalneUdostępnienie grupie. |
| exchangeRate | number | opcjonalneKurs wymiany, gdy currencyCode ≠ waluta główna użytkownika. |
| convertedAmount | number | opcjonalneKwota w walucie głównej użytkownika. |
POST /api/v1/transactions
{
"type": "expense",
"amount": 8.50,
"currencyCode": "EUR",
"date": "2026-05-12T09:14:00Z",
"accountId": "acc_01HK8V…",
"categoryId": "cat_food_drinks",
"payee": "Pret",
"note": "Flat white"
}
/api/v1/transactions/{id}
transactions:write
Zastępuje transakcję. Treść żądania jest identyczna jak w Utwórz.
/api/v1/transactions/{id}
transactions:write
Usuwa miękko jedną transakcję.
/api/v1/transactions/transfer
transactions:write
Tworzy przelew między dwoma kontami. Bez kategorii. Przy przelewach międzywalutowych podaj exchangeRate oraz convertedAmount w walucie docelowej.
| Pole | Typ | Opis |
|---|---|---|
| fromAccountId | string | wymaganeKonto źródłowe. |
| toAccountId | string | wymaganeKonto docelowe. Musi być inne niż źródłowe. |
| amount | number | wymaganeKwota wysłana, w walucie currencyCode. |
| currencyCode | string | wymaganeWaluta źródłowa, ISO-4217. |
| date | string (ISO-8601) | wymaganeData przelewu. |
| exchangeRate | number | opcjonalneWymagane, gdy waluta źródłowa i docelowa są różne. |
| convertedAmount | number | opcjonalneKwota zaksięgowana na koncie docelowym, w jego walucie. |
| note | string | opcjonalneMaks. 2000. |
Operacje zbiorcze
Zaprojektowane z myślą o importerach. Każda partia jest ograniczona do 100 elementów i działa w trybie best-effort: jeden błędny wiersz nie wycofuje pozostałych. Elementy przyjęte oraz błędy poszczególnych wierszy raportowane są osobno, dzięki czemu możesz ponowić tylko te nieudane.
/api/v1/transactions/bulk
transactions:write
Tworzy do 100 transakcji w jednym wywołaniu.
{
"items": [ /* successful TransactionDto[] */ ],
"errors": [
{ "index": 3, "error": "Invalid currency code" }
]
}
/api/v1/transactions/bulk
transactions:write
Aktualizuje do 100 transakcji w jednym wywołaniu. Każdy element musi zawierać własne id wraz z pełną treścią transakcji.
/api/v1/transactions/bulk-delete
transactions:write
Usuwa miękko do 100 transakcji w jednym wywołaniu. Używa POST zamiast DELETE, dzięki czemu treść żądania jest akceptowana przez wszystkie klienty HTTP.
| Pole | Typ | Opis |
|---|---|---|
| ids | string[] | wymaganeOd 1 do 100 identyfikatorów transakcji. |
{
"deleted": 97,
"notFound": [ "tx_old1", "tx_old2", "tx_old3" ]
}
Obiekt transakcji
| Pole | Typ | Opis |
|---|---|---|
| id | string | Nieprzezroczysty identyfikator. |
| type | string | income · expense · transfer · adjustment. |
| amount | number | W walucie currencyCode. |
| currencyCode | string | ISO-4217. |
| exchangeRate | number | null | Ustawiane przy wpisach międzywalutowych. |
| convertedAmount | number | null | Ta sama wartość w walucie głównej użytkownika. |
| date | string | ISO-8601 UTC. |
| accountId | string | null | Przy przelewach jest to konto źródłowe. |
| toAccountId | string | null | Konto docelowe — wyłącznie przy przelewach. |
| categoryId | string | null | Null przy przelewach. |
| groupId | string | null | Ustawiane, gdy transakcja jest udostępniona grupie. |
| payee | string | null | Sprzedawca lub kontrahent. |
| note | string | null | Dowolny tekst. |
| receiptImagePath | string | null | Ścieżka do załączonego paragonu. Pobierz przez endpoint paragonów (osobny, poza v1). |
| recurringTransactionId | string | null | Ustawiane, gdy wiersz powstał z reguły cyklicznej. |
| source | string | Znacznik pochodzenia — api, mobile, web, import itd. |
| createdAt | string | ISO-8601 UTC. |
| updatedAt | string | ISO-8601 UTC. |
Ikony
Manilo dostarcza wyselekcjonowany zestaw ikon i paletę kolorów używaną wszędzie — na kontach, kategoriach i grupach. Pobierz katalog raz, zbuforuj go i używaj tych samych identyfikatorów przy tworzeniu zasobów.
/api/v1/icons
Zwraca pełną bibliotekę ikon pogrupowanych w kategorie wraz z obsługiwaną paletą kolorów. Jest wersjonowana — można ją bezpiecznie buforować według pola version.
{
"version": "2026.05.10",
"library": "font-awesome-6",
"categories": [
{
"id": "finance",
"name": "Finance",
"icons": [ "wallet", "credit-card", "piggy-bank" ]
}
],
"colors": [
{ "name": "Blue", "hex": "#4A90E2" },
{ "name": "Green", "hex": "#22C55E" }
]
}
Wersjonowanie
- Brak zmian łamiących zgodność w obrębie v1. Będziemy dodawać wyłącznie nowe endpointy, nowe pola opcjonalne i nowe wartości enumów. Typ pola, dopuszczalność wartości null ani jego wymagalność nie ulegną zmianie.
- Nowe wartości enumów nie łamią zgodności. Nieznane wartości pól
type,sourceorazactiontraktuj jako „nie renderuj”, zamiast przerywać działanie — będziemy je dodawać wraz z rozwojem produktu. - Zmiany łamiące zgodność (jeśli kiedykolwiek okażą się potrzebne) trafią pod
/api/v2/, z co najmniej 6-miesięczną równoległą dostępnością i nagłówkiem o wycofaniu w odpowiedziach v1.
Pomoc
Błąd do zgłoszenia? Brakujący endpoint? Coś nieudokumentowanego? Otwórz centrum pomocy lub napisz na support@manilo.app — zgłaszając problem, dołącz identyfikator żądania (zwracany w nagłówku odpowiedzi X-Request-Id).
W sprawach zgłoszeń dotyczących bezpieczeństwa (wyciek tokenu, obejście uprawnień, nieautoryzowany odczyt) pisz na security@manilo.app.