Rechnungen aus externen Tools erstellen
Die External API verbindet eigene Systeme, Automationen und Integrationen mit Billutant. Ein Token reicht, um Kunden, Artikel, Vorlagen und Rechnungen mandantensicher zu verwalten.
POST /invoices
Authorization: Bearer bt_live_...
Content-Type: application/json
{
"customerId": "customer_123",
"itemIds": ["item_setup", "item_monthly"],
"draft": false,
"send": true,
"emailTemplateId": "template_invoice"
}In wenigen Minuten zum ersten API-Request
Die Integration braucht keinen OAuth-Flow und keine lokale SDK-Installation. Ein Secret, eine Base URL und JSON reichen für den ersten Test.
1. Token erzeugen
Erstelle in Billutant einen API-Token und speichere ihn im externen System als Secret.
2. Test-Host nutzen
Starte gegen die Test-Umgebung, bis Payload, Status und Versand sauber funktionieren.
3. Request senden
Sende JSON mit customerId und itemIds an /invoices. Produktion braucht später nur die andere Base URL.
Base URLs und Authentifizierung
Tokens werden in Billutant in den Einstellungen erzeugt. Jede Anfrage verwendet den Header Authorization: Bearer TOKEN und wird automatisch rate-limited.
API Hosts
Produktion und Test nutzen jeweils denselben Pfad unter /api/v1.
https://app.billutant.com/api/v1https://test.billutant.com/api/v1Bearer Token
Der Token ist nur einmal sichtbar. Speichere ihn im externen Tool als Secret.
Authorization: Bearer bt_live_...
JSON Requests
Schreibende Requests verwenden application/json. GET-Endpunkte brauchen keinen Body.
Content-Type: application/json
Rate Limit
Standardmäßig sind 60 Requests pro Minute und Token vorgesehen. Bei Überschreitung antwortet die API mit 429.
Rechnungen, Kunden, Artikel und Vorlagen
Die Rechnungs-API bleibt bewusst schlank: Kunden und Artikel werden per ID referenziert, das Rechnungsdatum setzt Billutant automatisch.
/invoicesRechnung erstellen
Erstellt eine Rechnung aus vorhandener Kunden-ID und Artikel-IDs. Optional direkt senden.
/invoicesRechnungen listen
Liefert die Rechnungen des verbundenen Billutant Mandanten.
/invoices/{id}Rechnung abrufen
Liest eine einzelne Rechnung, wenn sie zum Mandanten des Tokens gehört.
/invoices/{id}Entwurf aktualisieren
Aktualisiert nur Rechnungen im Status Entwurf. Finalisierte Rechnungen bleiben gesperrt.
/invoices/{id}/sendRechnung senden
Sendet eine bestehende, nicht als Entwurf gespeicherte Rechnung mit emailTemplateId.
/invoices/{id}Nicht erlaubt
Rechnungen können über die API nicht gelöscht werden.
Minimaler Request
customerId und itemIds sind Pflicht. send versendet automatisch, wenn eine gültige emailTemplateId übergeben wird und der Kunde eine gültige E-Mail-Adresse hat.
createDate wird nicht akzeptiert und von Billutant gesetzt.
draft: true erstellt einen Entwurf.
draft und send können nicht gleichzeitig true sein.
PATCH /invoices/{id} kann Entwürfe ändern, aber nicht senden.
POST /invoices/{id}/send braucht nur emailTemplateId im Body.
DELETE /invoices/{id} ist gesperrt.
curl -X POST https://test.billutant.com/api/v1/invoices \
-H "Authorization: Bearer bt_live_..." \
-H "Content-Type: application/json" \
-d '{"customerId":"customer_123","itemIds":["item_setup"],"send":false}'{
"success": true,
"data": {
"id": "invoice_123",
"invoiceNumber": "2026-0012",
"status": "pending",
"customerId": "customer_123",
"files": ["2026-0012.pdf"],
"sent": true,
"draft": false
}
}Statuscodes zuerst behandeln
Für robuste Integrationen sollte der Client zuerst den HTTP-Status auswerten und erst danach die JSON-Antwort weiterverarbeiten.
Erfolgreich
Der Request wurde verarbeitet. Bei POST /invoices enthält data die erstellte Rechnung.
Payload prüfen
Pflichtfelder fehlen oder Regeln wie draft und send wurden verletzt.
Token prüfen
Der Bearer Token fehlt, ist ungültig oder wurde im externen Tool falsch gespeichert.
Feature aktivieren
Die External Invoice API ist für den verbundenen Mandanten noch nicht freigeschaltet.
Ressource prüfen
Die angefragte ID existiert nicht oder gehört nicht zum Mandanten des Tokens.
Methode wechseln
Die Route existiert, aber die HTTP-Methode ist dort nicht erlaubt, zum Beispiel DELETE /invoices/{id}.
Retry später
Das Rate Limit wurde erreicht. Clients sollten verzögert erneut senden.
async function createBillutantInvoice(token) {
const response = await fetch('https://test.billutant.com/api/v1/invoices', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
customerId: 'customer_123',
itemIds: ['item_setup'],
send: false,
}),
});
const payload = await response.json();
if (!response.ok) {
throw new Error(payload.error || `Billutant API request failed with ${response.status}`);
}
return payload.data;
}{
"success": false,
"error": "emailTemplateId is required when send is true."
}Stammdaten für externe Workflows
Kunden, Artikel und E-Mail-Vorlagen können direkt über die API gepflegt werden, damit externe Systeme keine manuellen Vorarbeiten in Billutant brauchen.
/customersKunden listen
Liste vorhandener Kunden für die Auswahl in externen Tools.
/customersKunden erstellen
Legt einen Kunden an. Firma, Name oder E-Mail ist als Identifikation erforderlich.
/customers/{id}Kunde abrufen
Liest einen einzelnen Kunden, wenn er zum Mandanten des Tokens gehört.
/customers/{id}Kunden aktualisieren
Ändert Stammdaten eines vorhandenen Kunden.
/customers/{id}Kunden löschen
Löscht Kunden, wenn externe Workflows das ausdrücklich brauchen.
/itemsArtikel listen
Liest Produkte und Leistungen, die als Rechnungspositionen genutzt werden.
/itemsArtikel erstellen
Speichert eine Leistung mit Name, Beschreibung, Preis, Steuer und Einheit.
/items/{id}Artikel abrufen
Liest ein einzelnes Produkt oder eine Leistung aus dem verbundenen Mandanten.
/items/{id}Artikel aktualisieren
Ändert Name, Beschreibung, Preis, Steuer oder Einheit eines Artikels.
/items/{id}Artikel löschen
Löscht einen Artikel, wenn externe Workflows ihn nicht mehr benötigen.
/email-templatesVorlagen listen
Liest E-Mail-Vorlagen, die beim automatischen Versand verwendet werden.
/email-templatesVorlagen erstellen
Erstellt eine Vorlage mit Typ, Label, Betreff und Body für den Rechnungsversand.
/email-templates/{id}Vorlage abrufen
Liest eine einzelne E-Mail-Vorlage aus dem verbundenen Mandanten.
/email-templates/{id}Vorlage aktualisieren
Aktualisiert Typ, Label, Betreff, Body oder Mahnparameter einer Vorlage.
/email-templates/{id}Vorlage löschen
Löscht eine E-Mail-Vorlage, wenn sie nicht mehr genutzt wird.
Token erstellen und ersten Test-Request senden
Nutze zuerst die Test-Umgebung. Wenn Payload und Versand passen, stellst du im externen Tool nur die Base URL auf Produktion um.