MENU navbar-image

Introduction

Lesender Zugriff auf deine Flowly-Daten, z. B. deine Umsätze.

Mit der Flowly API fragst du deine eigenen Daten aus Flowly ab. Jeder Request liest ausschließlich aus deiner Datenbank.

Limit

Pro Konto sind 100 Requests pro Tag möglich (gleitend über 24 Stunden ab dem ersten Request). Jede Antwort enthält die Header X-RateLimit-Limit und X-RateLimit-Remaining. Ist das Limit erreicht, antwortet die API mit 429 Too Many Requests und dem Header Retry-After (Sekunden).

Fehler

Status Bedeutung
401 Token fehlt oder ist ungültig
403 Kein aktives Abo
422 Ungültige Parameter, Details unter errors
429 Tageslimit erreicht

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {DEIN_API_TOKEN}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Deinen Token erzeugst du im Kundenbereich unter API mit Token erzeugen. Er wird nur einmal angezeigt; erzeugst du einen neuen, ist der alte sofort ungültig.

Transaktionen

Umsätze deiner Bankkonten.

Umsätze auflisten

requires authentication

Liefert deine Umsätze, neueste zuerst (nach Buchungstag). Die Liste ist in Seiten aufgeteilt; über links.next kommst du zur nächsten Seite. Alle Filter lassen sich kombinieren.

Example request:
curl --request GET \
    --get "https://develop.flowly.roemmich.eu/api/v1/transactions?limit=50&page=1&search=rewe&bank_account_id=01JB8Y7D2C5H8P1RZ3N6K9V4QS&from=2026-10-01&until=2026-10-31&direction=expense&category_id=12&without_logo=" \
    --header "Authorization: Bearer {DEIN_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://develop.flowly.roemmich.eu/api/v1/transactions"
);

const params = {
    "limit": "50",
    "page": "1",
    "search": "rewe",
    "bank_account_id": "01JB8Y7D2C5H8P1RZ3N6K9V4QS",
    "from": "2026-10-01",
    "until": "2026-10-31",
    "direction": "expense",
    "category_id": "12",
    "without_logo": "0",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {DEIN_API_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://develop.flowly.roemmich.eu/api/v1/transactions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {DEIN_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'limit' => '50',
            'page' => '1',
            'search' => 'rewe',
            'bank_account_id' => '01JB8Y7D2C5H8P1RZ3N6K9V4QS',
            'from' => '2026-10-01',
            'until' => '2026-10-31',
            'direction' => 'expense',
            'category_id' => '12',
            'without_logo' => '0',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://develop.flowly.roemmich.eu/api/v1/transactions'
params = {
  'limit': '50',
  'page': '1',
  'search': 'rewe',
  'bank_account_id': '01JB8Y7D2C5H8P1RZ3N6K9V4QS',
  'from': '2026-10-01',
  'until': '2026-10-31',
  'direction': 'expense',
  'category_id': '12',
  'without_logo': '0',
}
headers = {
  'Authorization': 'Bearer {DEIN_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Eine Seite mit Umsätzen):


{
    "data": [
        {
            "id": "01JB8Z3K6Q2W9V0XG7M4TQ5R1N",
            "bank_account_id": "01JB8Y7D2C5H8P1RZ3N6K9V4QS",
            "status": "booked",
            "booking_date": "2026-10-20",
            "value_date": "2026-10-20",
            "amount": "-23.49",
            "currency": "EUR",
            "name": "REWE Markt GmbH",
            "merchant": "REWE",
            "creditor": {
                "name": "REWE Markt GmbH",
                "iban": "DE89370400440532013000"
            },
            "debtor": {
                "name": "Max Mustermann",
                "iban": "DE02120300000000202051"
            },
            "remittance_information": "REWE SAGT DANKE 12345",
            "booking_text": "Lastschrift",
            "mandate_id": null,
            "creditor_id": null,
            "category": {
                "id": 12,
                "name": "Lebensmittel",
                "assigned_by": "rule"
            }
        },
        {
            "id": "01JB8Z2F1M7T4X0VJ6C9B3R8KD",
            "bank_account_id": "01JB8Y7D2C5H8P1RZ3N6K9V4QS",
            "status": "booked",
            "booking_date": "2026-10-15",
            "value_date": "2026-10-15",
            "amount": "3250.00",
            "currency": "EUR",
            "name": "Beispiel GmbH",
            "merchant": null,
            "creditor": {
                "name": "Max Mustermann",
                "iban": "DE02120300000000202051"
            },
            "debtor": {
                "name": "Beispiel GmbH",
                "iban": "DE12500105170648489890"
            },
            "remittance_information": "Gehalt Oktober 2026",
            "booking_text": "Gutschrift",
            "mandate_id": null,
            "creditor_id": null,
            "category": null
        }
    ],
    "links": {
        "first": "https://flowly.example/api/v1/transactions?limit=2&page=1",
        "last": "https://flowly.example/api/v1/transactions?limit=2&page=21",
        "prev": null,
        "next": "https://flowly.example/api/v1/transactions?limit=2&page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 21,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "page": null,
                "active": false
            },
            {
                "url": "https://flowly.example/api/v1/transactions?limit=2&page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": "https://flowly.example/api/v1/transactions?limit=2&page=2",
                "label": "2",
                "page": 2,
                "active": false
            },
            {
                "url": "https://flowly.example/api/v1/transactions?limit=2&page=2",
                "label": "Next »",
                "page": 2,
                "active": false
            }
        ],
        "path": "https://flowly.example/api/v1/transactions",
        "per_page": 2,
        "to": 2,
        "total": 42
    }
}
 

Example response (401, Token fehlt oder ist ungültig):


{
    "message": "Unauthenticated."
}
 

Example response (403, Kein aktives Abo):


{
    "message": "Kein aktives Abo."
}
 

Example response (422, Ungültige Parameter):


{
    "message": "The limit field must not be greater than 500.",
    "errors": {
        "limit": [
            "The limit field must not be greater than 500."
        ]
    }
}
 

Example response (429, Tageslimit erreicht):


{
    "message": "Too Many Attempts."
}
 

Request      

GET api/v1/transactions

Headers

Authorization        

Example: Bearer {DEIN_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

limit   integer  optional    

Umsätze pro Seite, Standard 50. Must be at least 1. Must not be greater than 500. Example: 50

page   integer  optional    

Seite. Must be at least 1. Example: 1

search   string  optional    

Sucht ohne Beachtung der Groß- und Kleinschreibung in den Namen von Empfänger und Auftraggeber sowie im Verwendungszweck. Must not be greater than 100 characters. Example: rewe

bank_account_id   string  optional    

Nur Umsätze dieses Kontos (bank_account_id aus einem Umsatz). Must not be greater than 26 characters. Example: 01JB8Y7D2C5H8P1RZ3N6K9V4QS

from   string  optional    

Gebucht ab diesem Tag (einschließlich), Format JJJJ-MM-TT. Must be a valid date in the format Y-m-d. Example: 2026-10-01

until   string  optional    

Gebucht bis zu diesem Tag (einschließlich), Format JJJJ-MM-TT. Must be a valid date in the format Y-m-d. Must be a date after or equal to from. Example: 2026-10-31

direction   string  optional    

income nur Eingänge, expense nur Ausgaben. Example: expense

Must be one of:
  • income
  • expense
category_id   integer  optional    

Nur Umsätze dieser Kategorie und ihrer Unterkategorien. Eine unbekannte Kategorie ergibt eine leere Liste. Example: 12

without_logo   boolean  optional    

Nur Umsätze, für die Flowly kein Händler-Logo kennt. Example: false

Response

Response Fields

data   object     
id   string     

ID des Umsatzes (ULID).

bank_account_id   string     

ID des Kontos, auf dem der Umsatz gebucht ist.

status   string     

booked gebucht, pending vorgemerkt.

Must be one of:
  • booked
  • pending
booking_date   string     

Buchungstag, JJJJ-MM-TT.

value_date   string     

Wertstellung, JJJJ-MM-TT.

amount   string     

Betrag als Dezimalzahl mit Punkt; negativ bei Ausgaben, positiv bei Eingängen.

currency   string     

Währung nach ISO 4217, z. B. EUR.

name   string     

Gegenpartei: bei Ausgaben der Empfänger, bei Eingängen der Auftraggeber, bei Kartenzahlungen der Händler.

merchant   string     

Von Flowly erkannter Händler, sonst null.

creditor   object     

Empfänger mit name und iban.

debtor   object     

Auftraggeber mit name und iban.

remittance_information   string     

Verwendungszweck.

booking_text   string     

Buchungstext der Bank, z. B. Lastschrift.

mandate_id   string     

Mandatsreferenz bei Lastschriften.

creditor_id   string     

Gläubiger-ID bei Lastschriften.

category   object     

Kategorie mit id, name und assigned_by (rule, manual oder fallback); null, solange keine zugeordnet ist.

links   object     

URLs zur ersten, letzten, vorigen und nächsten Seite.

meta   object     

Seitenangaben: current_page, last_page, per_page, total usw.