Buchungen automatisch an TaxFast senden.
TaxFast fragt deine Bank nicht selbst ab. Stattdessen schickt deine Bank, dein Zahlungsdienst oder ein Tool wie Zapier jede Kontobewegung an einen Webhook — und TaxFast macht daraus eine Transaktion auf dem richtigen Konto. Diese Seite erklärt alles, was du dafür brauchst.
Eine Buchung, eine Anfrage
POST https://taxfast.de/api/v1/webhooks/events
Authorization: Bearer atx_…
Content-Type: application/json
{
"source": "meine-bank",
"type": "expense",
"bankAccountId": "KONTO_ID",
"payload": {
"amount": 59,
"currency": "EUR",
"counterparty": "Cloudhost Ltd.",
"reference": "Rechnung 2026-1042",
"description": "Server Oktober",
"date": "2026-10-18T09:30:00Z"
}
}So läuft es.
Drei Schritte im Dashboard, dann kommen die Buchungen von allein.
Konto anlegen
Unter Einstellungen → Bankverbindungen legst du jedes Konto an, über das deine Firma Geld bewegt: Geschäftskonto, Tagesgeld, Kreditkarte.
Schlüssel erstellen
Auf dem Konto öffnest du „Buchungen automatisch erfassen“ und erstellst einen Schlüssel. Er gehört fest zu diesem Konto und wird nur einmal angezeigt.
Buchungen senden
Zapier, n8n, Make oder dein eigener Code schickt jede Buchung per POST an den Webhook. Sie erscheint sofort unter Transactions.
Endpoint & Schlüssel.
Ein Endpoint für alle Konten und alle Firmen. Der Schlüssel sagt TaxFast, wer sendet.
POST https://taxfast.de/api/v1/webhooks/eventsSchlüssel mitschicken
Am besten als Header: Authorization: Bearer atx_…. Wo du keine Header setzen kannst, geht auch ?key=atx_… in der Adresse.
Der Schlüssel braucht den Scope webhook. Er kann nur Buchungen anliefern — nichts lesen, nichts ändern.
Schlüssel bekommen
Im Dashboard unter Einstellungen → Bankverbindungen → dein Konto → „Buchungen automatisch erfassen“. Dort siehst du auch, wann über den Schlüssel zuletzt eine Buchung angekommen ist.
Jeder Schlüssel lässt sich jederzeit widerrufen und wirkt dann sofort nicht mehr.
Konto zuordnen.
Jede Buchung landet auf genau einem deiner Konten. TaxFast entscheidet so, in dieser Reihenfolge:
- 1
Die Anfrage nennt das Konto
Feld
bankAccountIdauf oberster Ebene des Bodys, oder?account=…in der Adresse. Das gewinnt immer. - 2
Der Schlüssel gehört zu einem Konto
Schlüssel, die du auf der Seite eines Kontos erstellst, sind fest daran gebunden. Dann musst du gar nichts mitschicken — der empfohlene Weg.
- 3
Sonst: dein Rechnungskonto
Das Konto, das als Rechnungskonto markiert ist. So kommen auch ältere Integrationen ohne Kontoangabe weiter an.
Die Konto-ID findest du auf der Seite des Kontos im Dashboard. Eine ID, die es nicht gibt, lehnt TaxFast mit 400 unknown_bank_account ab und schickt dir alle gültigen IDs mit — so fällt ein Tippfehler beim ersten Test auf, nicht erst beim Jahresabschluss.
Was du schickst.
Eine Buchung pro Anfrage, als JSON. Die eigentlichen Werte stehen unter payload; source, type und bankAccountId daneben.
{
"source": "meine-bank",
"type": "expense",
"bankAccountId": "KONTO_ID",
"payload": {
"amount": 59,
"currency": "EUR",
"counterparty": "Cloudhost Ltd.",
"reference": "Rechnung 2026-1042",
"description": "Server Oktober",
"date": "2026-10-18T09:30:00Z"
}
}| Feld | Typ | Nötig? | Bedeutung |
|---|---|---|---|
| payload.amount | number | Pflicht | Betrag in der Kontowährung, brutto. Mit „type“ ohne Vorzeichen; ohne „type“ negativ für Ausgaben, positiv für Eingänge. |
| payload.date | ISO 8601 | Pflicht | Buchungsdatum, z. B. „2026-10-18“ oder „2026-10-18T09:30:00Z“. Entscheidet, in welchem Monat die Buchung landet. |
| type | „income“ | „expense“ | Empfohlen | Geldeingang oder Ausgabe. Fehlt es, zählt das Vorzeichen des Betrags. |
| payload.counterparty | string | Empfohlen | Name der Gegenseite: Zahler, Empfänger oder Händler. Danach sucht TaxFast den passenden Beleg. |
| payload.currency | string | Empfohlen | ISO-Währung wie „EUR“ oder „USD“. |
| source | string | Empfohlen | Woher die Buchung kommt, z. B. „sparkasse“, „wise“ oder „stripe“. Erscheint in TaxFast als Quelle. |
| bankAccountId | string | Optional | Das TaxFast-Konto, auf dem die Buchung passiert ist. Fehlt es, zählt das Konto des Schlüssels, sonst dein Rechnungskonto. |
| payload.reference | string | Optional | Verwendungszweck oder Zahlungsreferenz, wie die Bank ihn zeigt. |
| payload.description | string | Optional | Freitext, z. B. der Buchungstext der Bank. |
Eingang oder Ausgabe
Schick type als income oder expense — dann darf der Betrag ohne Vorzeichen kommen. Ohne type gilt: negativ ist Ausgabe, positiv ist Eingang.
Zahlen als Text
Zapier und Make liefern Beträge oft als Text wie "59.00". Das ist in Ordnung, TaxFast wandelt es um. Nutze den Punkt als Dezimaltrenner.
Ohne payload
Fehlt payload, nimmt TaxFast den ganzen Body als Buchung. So kannst du das Original deiner Bank auch unverändert durchreichen.
Beispiele.
Dieselbe Buchung, vier Wege.
curl
curl -X POST 'https://taxfast.de/api/v1/webhooks/events' \
-H 'Authorization: Bearer atx_DEIN_SCHLUESSEL' \
-H 'Content-Type: application/json' \
-d '{
"source": "meine-bank",
"type": "expense",
"bankAccountId": "KONTO_ID",
"payload": {
"amount": 59,
"currency": "EUR",
"counterparty": "Cloudhost Ltd.",
"reference": "Rechnung 2026-1042",
"description": "Server Oktober",
"date": "2026-10-18T09:30:00Z"
}
}'Zapier
- 1. Trigger: die Zapier-App deiner Bank oder deines Zahlungsdienstes, Ereignis „Neue Transaktion“ oder „Neue Zahlung“.
- 2. Action: „Webhooks by Zapier“ → „Custom Request“. Method
POST, URLhttps://taxfast.de/api/v1/webhooks/events?key=DEIN_SCHLUESSEL, HeaderContent-Type: application/json. - 3. Data: die Vorlage unten; jeden
{{…}}-Platzhalter durch das passende Feld aus dem Trigger ersetzen. - 4. Testen: „Test step“ — die Buchung erscheint unter Transactions mit Status Offen. Dann den Zap einschalten.
{
"source": "meine-bank",
"type": "{{income oder expense}}",
"bankAccountId": "KONTO_ID",
"payload": {
"amount": "{{Betrag}}",
"currency": "{{Währung}}",
"counterparty": "{{Name der Gegenseite}}",
"reference": "{{Verwendungszweck}}",
"date": "{{Buchungsdatum}}"
}
}n8n
Node „HTTP Request“: Method POST, URL https://taxfast.de/api/v1/webhooks/events, Authentication „Header Auth“ mit Name Authorization und Wert Bearer DEIN_SCHLUESSEL. Body Content Type JSON, Felder per Expression aus dem vorigen Node.
Make
Modul „HTTP → Make a request“: Method POST, URL wie oben, ein Header Authorization: Bearer DEIN_SCHLUESSEL, Body type „Raw“, Content type „JSON“, Request content wie im Beispiel.
Deine Bank schickt ein anderes Format?
Schick es einfach so, wie es kommt. TaxFast erkennt gängige Felder von selbst — und den Rest ordnest du einmal zu.
Was TaxFast von selbst erkennt
- Betrag: amount, value, transactionAmount — auch verschachtelt als amount.value
- Währung: currency, currencyCode, iso_currency_code
- Gegenseite: counterparty, counterpartyName, creditorName, debtorName, merchantName, name, merchant.name
- Referenz: reference, remittanceInformation, remittanceInformationUnstructured, paymentReference, id
- Beschreibung: description, memo, narrative
- Datum: bookingDate, valueDate, date, createdAt, created_at, occurredAt, timestamp
- Hülle: transaction, data, event oder events[0] — TaxFast schaut auch eine Ebene tiefer
Felder zuordnen
Beim Schlüssel im Dashboard („Felder zuordnen“) gibst du für Betrag, Währung, Gegenseite, Referenz, Beschreibung und Datum einen Pfad in deinen Body an, z. B. data.amount.value oder events.0.creditorName.
Für Eingang/Ausgabe kannst du einen festen Wert setzen, einen Feldwert abgleichen (etwa CRDT → income) oder einen kleinen Ausdruck schreiben. Die letzte empfangene Buchung dient dabei als Vorschau.
Der Original-Body bleibt immer gespeichert und ist in der Transaktion einsehbar.
Antworten & Fehler.
| Status | error | Bedeutung |
|---|---|---|
| 201 | Angelegt | { "eventId": "…", "bankAccountId": "…" } — die Buchung liegt als offene Transaktion in TaxFast. |
| 200 | Schon bekannt | { "eventId": "…", "duplicate": true } — dieselbe Buchung kam in den letzten 60 Sekunden schon an. |
| 400 | invalid_json | Der Body ist kein gültiges JSON. |
| 400 | unknown_bank_account | Die angegebene bankAccountId gibt es in dieser Firma nicht. Die Antwort enthält knownAccounts mit allen gültigen IDs. |
| 401 | unauthorized | Schlüssel fehlt, ist falsch oder wurde widerrufen. |
| 403 | forbidden | Der Schlüssel hat nicht den Scope „webhook“. Agent- und Admin-Schlüssel dürfen hier nicht senden. |
| 413 | payload_too_large | Mehr als 200 Felder im Body. Schick nur die Buchung, nicht den ganzen Kontoauszug. |
| 500 | internal | Etwas ist auf unserer Seite schiefgegangen. Noch einmal senden ist sicher — siehe Doppelte Buchungen. |
Doppelte Buchungen.
Manche Banken und Zahlungsdienste schicken dieselbe Buchung zweimal. Du musst dich darum nicht kümmern.
Was TaxFast zusammenfasst
Gleicher Betrag, gleiche Gegenseite und ein Buchungszeitpunkt innerhalb von ±60 Sekunden auf demselben Konto: Die zweite Anfrage bekommt 200 mit duplicate: true und der ID der ersten Buchung.
Was getrennt bleibt
Derselbe Betrag im selben Moment auf zwei verschiedenen eigenen Konten ist eine Umbuchung, keine Dublette — beide Buchungen werden angelegt. Darum lohnt sich die Kontozuordnung auch für Tagesgeld und Kreditkarte.
Testen & Fehlersuche.
Kommt etwas an?
Auf der Kontoseite im Dashboard steht beim Schlüssel „Letzte Buchung“. Jede angelegte Buchung erscheint sofort unter Transactions mit Status Offen.
401 oder 403
Schlüssel prüfen: vollständig kopiert, nicht widerrufen, Scope „webhook“. Bei?key= darauf achten, dass die Adresse nicht abgeschnitten wurde.
Felder leer
Öffne die Transaktion — der Original-Body steht darin. Passt ein Feldname nicht zu den erkannten Namen, ordne ihn beim Schlüssel einmal zu.
Sicherheit.
- ✓Schlüssel werden nur gehasht gespeichert. Du siehst den Schlüssel genau einmal, beim Erstellen.
- ✓Ein Webhook-Schlüssel kann nur Buchungen anliefern — nichts lesen, nichts bestätigen, nichts löschen.
- ✓Jeder Schlüssel gehört zu einer Firma und optional zu einem Konto. Widerrufen wirkt sofort.
- ✓Buchungen werden ausschließlich über TLS angenommen und in der EU verarbeitet.
Einmal einrichten. Nie wieder abtippen.
Leg dein Konto an, erstell den Schlüssel und schick die erste Buchung — der Rest ist Buchhaltung, die von allein passiert.
Zum Dashboard