Überblick
Die Manilo API ist eine JSON-REST-API, mit der du dasselbe Haushaltsbuch programmatisch verwaltest, das du auch in der iOS-App nutzt — Konten, Kategorien, Budgets, geteilte Gruppen und Transaktionen. Nutze sie, um Importer, Exporter, Sync-Brücken oder Dashboards zu bauen oder deine eigenen Automatisierungen zu betreiben.
- Basis-URL:
https://api.manilo.app— die bisherige Basis-URLapi.ledgy.appfunktioniert weiterhin. - Versions-Präfix: Alle Endpunkte in diesem Dokument liegen unter
/api/v1/. - Transport: Nur HTTPS. HTTP-Anfragen werden nicht akzeptiert.
- Encoding: JSON in Request- und Response-Bodys. UTF-8.
camelCaseals Feldnamen. - Authentifizierung:
Authorization: Bearer …bei jeder Anfrage. - Cloud-Abo: Für jeden v1-Endpunkt erforderlich. Siehe Abo-Pflicht.
https://api.manilo.app/mcp — siehe Integrationen. Die hier dokumentierte REST API ist für Code gedacht, den du selbst schreibst.
Schnellstart
Drei Schritte bis zu deiner ersten authentifizierten Anfrage.
1. Personal Access Token erstellen
- Melde dich in deinem Manilo-Dashboard an und öffne Einstellungen → API-Zugriff.
- Klicke auf + Neuer Token.
- Gib dem Token einen aussagekräftigen Namen (z. B. „Zapier — wöchentlicher Export“), wähle die Scopes, die du brauchst (siehe Scopes), und lege optional ein Ablaufdatum fest.
- Kopiere den Token. Er wird nur einmal angezeigt. Tokens beginnen mit dem Präfix
lgpat_, gefolgt von 64 Hex-Zeichen.
Dieselbe Seite listet deine aktiven Tokens mit dem Zeitpunkt der letzten Nutzung und der Anzahl der Berechtigungen auf, blendet eine Warnung „Läuft in 30 Tagen ab“ ein und lässt dich jeden Token über das Papierkorb-Symbol sofort widerrufen. Pro Konto sind bis zu 25 aktive Tokens gleichzeitig möglich.
2. Eine Anfrage senden
# Replace lgpat_… with your token curl "https://api.manilo.app/api/v1/accounts" \ -H "Authorization: Bearer lgpat_a1b2c3d4e5…"
3. Die Antwort prüfen
{
"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
}
Authentifizierung
Jede Anfrage an /api/v1/ muss einen Authorization-Header mitschicken. Zwei Token-Typen werden akzeptiert:
- Personal Access Token (PAT) — langlebiger Bearer-Token, den du im Dashboard unter Einstellungen → API-Zugriff erstellst. Format:
lgpat_+ 64 Hex-Zeichen. Auf Scopes begrenzt, widerrufbar, optional mit Ablaufdatum. Für alle Integrationen von Drittanbietern empfohlen. - Session-JWT — kurzlebiger Token, der an die eigenen Apps (iOS, Dashboard) ausgegeben wird. Ohne Scope-Beschränkungen. Für einmalige Tests kannst du ihn verwenden, wenn du ihn aus einer angemeldeten Sitzung extrahieren kannst — der unterstützte Weg sind aber PATs.
Header-Format
Authorization: Bearer lgpat_a1b2c3d4e5f6…
Token-Limits
- Bis zu 25 aktive PATs pro Manilo-Konto.
- Beim Erstellen kann optional ein Ablaufdatum gesetzt werden. Abgelaufene Tokens liefern
401 Unauthorized. - Widerrufene Tokens funktionieren sofort nicht mehr — Manilo speichert nur einen SHA-256-Hash des Tokens, nie den Wert selbst. Ein geleakter Token lässt sich daher nicht wiederherstellen, sondern nur widerrufen und ersetzen.
Häufige Auth-Fehler
- 401
- Token fehlt, ist fehlerhaft, abgelaufen oder widerrufen.
- 403
- Der Token ist gültig, aber der angefragte Endpunkt erfordert einen Scope, den dein PAT nicht hat — oder dein Cloud-Abo ist nicht aktiv.
Scopes
PATs folgen einem Deny-by-default-Modell. Ein Token darf nur Endpunkte aufrufen, deren erforderlichen Scope er besitzt; alles andere liefert 403 Forbidden. Vergib immer nur die Scopes, die deine Integration wirklich braucht.
Verfügbare Scopes:
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
Jeder unten aufgeführte Endpunkt zeigt seinen erforderlichen Scope als kleinen lila Chip. :write-Scopes schließen :read nicht ein — fordere beide an, wenn du beide brauchst.
Abo-Pflicht
Alle v1-Endpunkte — auch die rein lesenden — setzen voraus, dass die aufrufende Person ein aktives Manilo-Cloud-Abo hat. Ist das Abo gekündigt, abgelaufen oder nie gestartet worden, antwortet die API mit:
HTTP/1.1 403 Forbidden
X-Subscription-Required: true
Content-Type: application/json
{ "error": "Active cloud subscription required" }
Über den Header X-Subscription-Required können Clients eine Abo-Sperre von einer allgemeinen Rechteverweigerung unterscheiden. Du stellst den Zugriff wieder her, indem du Cloud in der iOS-App oder unter dashboard.manilo.app/upgrade reaktivierst.
Fehler
Fehler nutzen die üblichen HTTP-Statuscodes. Der Response-Body ist ein JSON-Objekt mit einem einzigen Feld:
{ "error": "Human-readable message" }
Statuscodes, die du behandeln solltest:
- 200
- OK — Ressource oder Liste zurückgegeben.
- 201
- Created — neue Ressource angelegt. Der Header
Locationverweist auf die kanonische URL. - 204
- No Content — Löschen erfolgreich; kein Body.
- 400
- Validierung fehlgeschlagen — Pflichtfeld fehlt, Wert außerhalb des zulässigen Bereichs, fehlerhaftes JSON.
- 401
- Authentifizierung fehlgeschlagen — siehe Authentifizierung.
- 403
- Zugriff verweigert — unzureichender Scope oder inaktives Abo.
- 404
- Ressource nicht gefunden oder durch Berechtigungen verborgen.
- 409
- Konflikt — z. B. Verletzung einer Eindeutigkeitsbedingung.
- 5xx
- Serverseitiger Fehler. Idempotente Lesezugriffe können mit exponentiellem Backoff sicher wiederholt werden.
Paginierung & Filter
List-Endpunkte geben standardmäßig alle passenden Einträge zurück. Transaktionen — die einzige Ressource, die stark wachsen kann — unterstützen Cursor-basierte Paginierung.
Transaktions-Cursor
curl "https://api.manilo.app/api/v1/transactions?limit=50&type=expense&dateFrom=2026-01-01" \ -H "Authorization: Bearer lgpat_…"
Die Antwort enthält ein Feld nextCursor. Gib es als Query-Parameter cursor zurück, um die nächste Seite zu laden; wenn nextCursor den Wert null hat, ist das Ende erreicht.
limit— Seitengröße, begrenzt auf1..200. Standard50.cursor— opaker Token. Behandle ihn als Blackbox.type,dateFrom,dateTo,categoryId,accountId,groupId— optionale Filter; siehe den Endpunkt Transaktionen auflisten.
Typen & Formate
- IDs — opake Strings. Parse sie nicht; behandle sie als UTF-8-Bezeichner mit Beachtung der Groß- und Kleinschreibung.
- Zeitstempel — ISO-8601 in UTC mit abschließendem
Z, z. B."2026-05-13T10:30:00Z". - Datumsangaben (z. B. das Feld
dateeiner Transaktion) — dasselbe ISO-8601-Format, relevant ist aber nur der Datumsteil. - Beträge — JSON-Zahlen in Haupteinheiten mit bis zu 4 Nachkommastellen (z. B.
12.50). Nie in Untereinheiten. Immer zusammen mitcurrencyCode. - Währungscodes — ISO-4217, genau drei Großbuchstaben (z. B.
"EUR","USD","GBP"). - Löschvorgänge — alle Löschoperationen sind Soft-Deletes. Gelöschte Einträge erscheinen nicht mehr in List- und Get-Antworten; geteilte Zugriffe und bisherige Belege bleiben erhalten.
- Seiteneffekte — das Löschen eines Kontos, einer Kategorie oder einer Gruppe lässt abhängige Transaktionen unberührt; ihre Verweise werden gelöst. Der Endpunkt Konto löschen akzeptiert eine ausdrückliche Strategie.
Konten
Konten sind die Behälter, die Salden halten — ein Bankkonto, eine Kreditkarte, ein Bargeldkonto, ein Depot. Jede Transaktion ist mit einem Konto verknüpft (bei Umbuchungen mit zweien).
/api/v1/accounts
accounts:read
Gibt jedes Konto zurück, das die authentifizierte Person besitzt oder auf das sie Zugriff hat.
/api/v1/accounts/{id}
accounts:read
Ruft ein Konto per ID ab. 404, wenn es nicht gefunden wird.
/api/v1/accounts
accounts:write
Legt ein neues Konto an. Gibt 201 mit dem erstellten Objekt und einem Location-Header zurück.
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | erforderlichAnzeigename. Max. 100 Zeichen. |
| currencyCode | string | erforderlichISO-4217. Genau 3 Buchstaben. |
| initialBalance | number | erforderlichAnfangssaldo in currencyCode. |
| order | integer | erforderlichSortierposition. Kleinere Werte zuerst. |
| icon | string | optionalIcon-Bezeichner aus /api/v1/icons. Max. 50. |
| color | string | optionalHex-Farbe, z. B. "#4A90E2". Max. 20. |
| iconColor | string | optionalÜberschreibt die Färbung des Icons. |
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
Ersetzt ein vorhandenes Konto. Der Body ist identisch mit Anlegen; alle Felder müssen angegeben werden.
/api/v1/accounts/{id}
accounts:write
Löscht ein Konto per Soft-Delete. Über den Query-Parameter action legst du fest, was mit seinen Transaktionen geschieht.
| Feld | Typ | Beschreibung |
|---|---|---|
| action | enum | optionalDetach (Standard): entfernt den Kontoverweis aus jeder Transaktion. Move: weist die Transaktionen dem Konto aus moveTargetAccountId zu. DeleteAll: löscht jede verknüpfte eigene Transaktion per Soft-Delete. |
| moveTargetAccountId | string | optionalErforderlich bei action=Move. ID des Zielkontos. |
Kategorien
Kategorien beschreiben, wofür eine Transaktion da ist (Lebensmittel, Miete, Freelance-Einnahmen). Systemkategorien sind schreibgeschützt und für alle Nutzer identisch; deine eigenen Kategorien verwaltest du selbst. Kategoriegruppen bündeln verwandte Kategorien.
/api/v1/categories/system-categories
categories:read
Gibt Manilos kuratierte Sammlung „bekannter“ Kategorien zurück — den Startsatz, den die iOS-App mitbringt. Sie sind global versioniert und lassen sich sicher anhand von version cachen.
Eigene Kategorien
/api/v1/categories
categories:read
Listet alle selbst angelegten Kategorien auf.
/api/v1/categories/{id}
categories:read
Ruft eine eigene Kategorie per ID ab.
/api/v1/categories
categories:write
Legt eine eigene Kategorie an.
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | erforderlichAnzeigename. Max. 100. |
| type | string | erforderlich"income" oder "expense". |
| order | integer | erforderlichSortierposition innerhalb der Gruppe. |
| isPinned | boolean | erforderlichOben in der Auswahl anheften. |
| categoryGroupId | string | optionalID der übergeordneten Gruppe oder null, wenn sie keiner Gruppe angehört. |
| icon | string | optionalIcon-Bezeichner. |
| color | string | optionalHex-Farbe. |
/api/v1/categories/{id}
categories:write
Ersetzt eine eigene Kategorie. Der Body ist identisch mit Anlegen.
/api/v1/categories/{id}
categories:write
Löscht eine eigene Kategorie per Soft-Delete. Transaktionen werden nicht gelöscht; ihr Feld categoryId wird geleert.
Kategoriegruppen
/api/v1/categories/groups
categories:read
Listet deine Kategoriegruppen auf.
/api/v1/categories/groups/{id}
categories:read
Ruft eine Kategoriegruppe ab.
/api/v1/categories/groups
categories:write
Legt eine Kategoriegruppe an.
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | erforderlichAnzeigename. Max. 100. |
| order | integer | erforderlichSortierposition. |
| icon | string | optionalIcon-Bezeichner. |
| color | string | optionalHex-Farbe. |
/api/v1/categories/groups/{id}
categories:write
Ersetzt eine Kategoriegruppe.
/api/v1/categories/groups/{id}
categories:write
Löscht eine Gruppe per Soft-Delete. Untergeordnete Kategorien bleiben erhalten — ihr Feld categoryGroupId wird geleert.
Budgets
Ein Budget begrenzt die Ausgaben für eine Kategorie (oder, wenn categoryId null ist, für das gesamte Haushaltsbuch) über einen wiederkehrenden Zeitraum. Teile ein Budget mit einer Gruppe, indem du groupId setzt.
/api/v1/budgets
budgets:read
Listet alle Budgets auf.
/api/v1/budgets/{id}
budgets:read
Ruft ein Budget ab.
/api/v1/budgets
budgets:write
Legt ein Budget an.
| Feld | Typ | Beschreibung |
|---|---|---|
| amount | number | erforderlichLimit pro Zeitraum. Muss größer als 0 sein. |
| currencyCode | string | erforderlichISO-4217. |
| period | integer | erforderlich0 wöchentlich · 1 monatlich · 2 vierteljährlich · 3 jährlich. |
| startDate | string (ISO-8601) | erforderlichBeginn des ersten Zeitraums. |
| isActive | boolean | erforderlichOb dieses Budget aktuell greift. |
| endDate | string (ISO-8601) | optionalNach diesem Datum nicht mehr verfolgen. |
| name | string | optionalBezeichnung. Max. 200. |
| categoryId | string | optionalZu verfolgende Kategorie. Weglassen, um alle Ausgaben zu budgetieren. |
| groupId | string | optionalGruppe, mit der geteilt wird. Weglassen für persönlich. |
/api/v1/budgets/{id}
budgets:write
Ersetzt ein Budget.
/api/v1/budgets/{id}
budgets:write
Löscht ein Budget per Soft-Delete.
Gruppen
Gruppen sind geteilte Haushaltsbücher — ein Haushalt, eine Reise, eine WG. Alle Mitglieder sehen dieselben Transaktionen; die Eigentümerschaft bleibt persönlich. Mitgliedschaften und Einladungen werden in der iOS-App verwaltet; hier bildet die API nur die Ressource selbst ab.
/api/v1/groups
groups:read
Listet Gruppen auf, die du besitzt oder in denen du Mitglied bist.
/api/v1/groups/{id}
groups:read
Ruft eine Gruppe ab.
/api/v1/groups
groups:write
Legt eine Gruppe an. Du wirst ihr Eigentümer; Mitglieder lädst du in der iOS-App ein.
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | erforderlichAnzeigename. Max. 100. |
| description | string | optionalFreitext. Max. 500. |
| icon | string | optionalIcon-Bezeichner. |
| color | string | optionalHex-Farbe. |
/api/v1/groups/{id}
groups:write
Ersetzt die Metadaten einer Gruppe.
/api/v1/groups/{id}
groups:write
Löscht eine Gruppe per Soft-Delete. Mitglieder verlieren die Sichtbarkeit; die zugrunde liegenden Transaktionen werden wieder persönlich.
Transaktionen
Transaktionen sind die Verben des Haushaltsbuchs. Es gibt sie in vier Ausprägungen: income, expense, transfer (von Konto zu Konto) und adjustment (einmalige Korrektur). Der Basis-Endpunkt legt Einnahmen und Ausgaben an; Umbuchungen haben einen eigenen Endpunkt; für große Importmengen gibt es Bulk-Varianten.
/api/v1/transactions
transactions:read
Listet Transaktionen mit Cursor-Paginierung und Filtern auf.
| Feld | Typ | Beschreibung |
|---|---|---|
| limit | integer | optionalSeitengröße. 1..200. Standard 50. |
| cursor | string | optionalOpaker Fortsetzungs-Token aus der vorherigen Antwort. |
| type | string | optional"income", "expense", "transfer" oder "adjustment". |
| dateFrom | string (ISO-8601) | optionalUntere Grenze, inklusive. |
| dateTo | string (ISO-8601) | optionalObere Grenze, inklusive. |
| categoryId | string | optionalAuf eine Kategorie filtern. |
| accountId | string | optionalAuf ein Konto filtern. |
| groupId | string | optionalAuf eine geteilte Gruppe filtern. |
{
"items": [ /* TransactionDto[] */ ],
"totalCount": 317,
"nextCursor": "eyJrIjoiMjAyNi0wNS0xM1QxMDoz…"
}
/api/v1/transactions/{id}
transactions:read
Ruft eine Transaktion ab.
/api/v1/transactions
transactions:write
Legt eine einzelne Einnahme oder Ausgabe an. Für Umbuchungen nutze /transfer.
| Feld | Typ | Beschreibung |
|---|---|---|
| type | string | erforderlich"income" oder "expense". |
| amount | number | erforderlichPositiver Betrag in currencyCode. |
| currencyCode | string | erforderlichISO-4217. |
| date | string (ISO-8601) | erforderlichZeitpunkt der Transaktion (UTC). |
| accountId | string | optionalQuell- bzw. Zielkonto. |
| categoryId | string | optionalKategoriezuordnung. |
| payee | string | optionalHändler oder Gegenpartei. Max. 200. |
| note | string | optionalFreie Notiz. Max. 2000. |
| groupId | string | optionalMit einer Gruppe teilen. |
| exchangeRate | number | optionalWechselkurs, wenn currencyCode ≠ deine Hauptwährung. |
| convertedAmount | number | optionalBetrag in deiner Hauptwährung. |
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
Ersetzt eine Transaktion. Der Body ist identisch mit Anlegen.
/api/v1/transactions/{id}
transactions:write
Löscht eine Transaktion per Soft-Delete.
/api/v1/transactions/transfer
transactions:write
Legt eine Umbuchung zwischen zwei Konten an. Ohne Kategorie. Bei Umbuchungen zwischen Währungen gibst du exchangeRate und convertedAmount in der Zielwährung an.
| Feld | Typ | Beschreibung |
|---|---|---|
| fromAccountId | string | erforderlichQuellkonto. |
| toAccountId | string | erforderlichZielkonto. Muss sich vom Quellkonto unterscheiden. |
| amount | number | erforderlichGesendeter Betrag, in currencyCode. |
| currencyCode | string | erforderlichQuellwährung, ISO-4217. |
| date | string (ISO-8601) | erforderlichDatum der Umbuchung. |
| exchangeRate | number | optionalErforderlich, wenn sich Quell- und Zielwährung unterscheiden. |
| convertedAmount | number | optionalDem Zielkonto gutgeschriebener Betrag, in dessen Währung. |
| note | string | optionalMax. 2000. |
Bulk-Operationen
Für Importer gedacht. Jeder Batch ist auf 100 Einträge begrenzt und läuft nach dem Prinzip Best Effort: Eine einzelne fehlerhafte Zeile setzt die übrigen nicht zurück. Erfolgreiche Einträge und Fehler je Zeile werden getrennt gemeldet, damit du die fehlgeschlagenen wiederholen kannst.
/api/v1/transactions/bulk
transactions:write
Legt bis zu 100 Transaktionen in einem Aufruf an.
{
"items": [ /* successful TransactionDto[] */ ],
"errors": [
{ "index": 3, "error": "Invalid currency code" }
]
}
/api/v1/transactions/bulk
transactions:write
Aktualisiert bis zu 100 Transaktionen in einem Aufruf. Jeder Eintrag muss seine id zusammen mit dem vollständigen Transaktions-Body enthalten.
/api/v1/transactions/bulk-delete
transactions:write
Löscht bis zu 100 Transaktionen in einem Aufruf per Soft-Delete. Nutzt POST statt DELETE, damit der Request-Body von allen HTTP-Clients akzeptiert wird.
| Feld | Typ | Beschreibung |
|---|---|---|
| ids | string[] | erforderlich1 bis 100 Transaktions-IDs. |
{
"deleted": 97,
"notFound": [ "tx_old1", "tx_old2", "tx_old3" ]
}
Das Transaktionsobjekt
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | Opaker Bezeichner. |
| type | string | income · expense · transfer · adjustment. |
| amount | number | In currencyCode. |
| currencyCode | string | ISO-4217. |
| exchangeRate | number | null | Gesetzt bei Einträgen mit Währungswechsel. |
| convertedAmount | number | null | Derselbe Wert in deiner Hauptwährung. |
| date | string | ISO-8601 UTC. |
| accountId | string | null | Bei Umbuchungen ist dies das Quellkonto. |
| toAccountId | string | null | Zielkonto, nur bei Umbuchungen. |
| categoryId | string | null | Bei Umbuchungen null. |
| groupId | string | null | Gesetzt, wenn mit einer Gruppe geteilt. |
| payee | string | null | Händler oder Gegenpartei. |
| note | string | null | Freitext. |
| receiptImagePath | string | null | Pfad zum angehängten Beleg. Abruf über den Belege-Endpunkt (getrennt von v1). |
| recurringTransactionId | string | null | Gesetzt, wenn diese Zeile aus einer wiederkehrenden Regel erzeugt wurde. |
| source | string | Herkunfts-Kennzeichen — api, mobile, web, import usw. |
| createdAt | string | ISO-8601 UTC. |
| updatedAt | string | ISO-8601 UTC. |
Icons
Manilo bringt einen kuratierten Icon-Satz und eine Farbpalette mit, die überall verwendet werden — für Konten, Kategorien und Gruppen. Lade den Katalog einmal, cache ihn und verwende die Bezeichner beim Anlegen von Ressourcen wieder.
/api/v1/icons
Gibt die vollständige Icon-Bibliothek nach Kategorien gruppiert zurück, zusammen mit der unterstützten Farbpalette. Versioniert — lässt sich sicher anhand des Felds version cachen.
{
"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" }
]
}
Versionierung
- Keine Breaking Changes innerhalb von v1. Wir ergänzen ausschließlich neue Endpunkte, neue optionale Felder und neue Enum-Werte. Typ, Nullbarkeit oder Pflichtstatus eines Feldes ändern sich nicht.
- Neue Enum-Werte sind kein Breaking Change. Behandle unbekannte Werte von
type,sourceoderactionals „nicht anzeigen“, statt abzustürzen — wir ergänzen sie, wenn das Produkt wächst. - Datumsversionierte Breaking Changes (falls je nötig) erscheinen unter
/api/v2/mit mindestens 6 Monaten Parallelbetrieb und einem Deprecation-Header in den v1-Antworten.
Support
Bug gefunden, einen Endpunkt vermisst oder etwas Undokumentiertes entdeckt? Öffne das Hilfe-Center oder schreib an support@manilo.app — bitte gib beim Melden eines Problems die Request-ID an (sie wird im Response-Header X-Request-Id zurückgegeben).
Für sicherheitsrelevante Meldungen (ein geleakter Token, eine umgangene Berechtigung, ein unbefugter Lesezugriff) schreib an security@manilo.app.