REST-API v1
Base-URL: https://buchkram.de/api/v1
Authentifizierung
Bearer-Token im Authorization-Header. Token erzeugst du im Dashboard unter Einstellungen → API-Tokens.
Authorization: Bearer 42|YourPlainTextTokenHere
Antwort-Format
Alle Endpoints liefern JSON. Listen kommen paginiert in einem data-Array mit Metadata:
{
"data": [...],
"links": { "first": "...", "last": "...", "next": "...", "prev": null },
"meta": { "current_page": 1, "per_page": 25, "total": 142 }
}
Rate Limits
60 Requests pro Minute pro Token. Bei Überschreitung kommt HTTP 429 mit Retry-After-Header.
Endpoints
Auth & Profile
GET
/me User + Tenant + Token-InfoKunden / Lieferanten
GET
/customers?type=customer&q=acmePOST
/customersGET
/customers/{id}PATCH
/customers/{id}DELETE
/customers/{id}POST /api/v1/customers
{
"type": "customer",
"company_name": "Acme GmbH",
"email": "max@acme.example",
"address_line1": "Hauptstr. 5",
"postal_code": "10115",
"city": "Berlin",
"country": "DE",
"vat_id": "DE123456789"
}
Rechnungen
GET
/invoices?status=issued&customer_id=...POST
/invoicesGET
/invoices/{id}DELETE
/invoices/{id} nur DraftsPOST /api/v1/invoices
{
"customer_id": "uuid",
"invoice_date": "2026-05-15",
"due_date": "2026-05-29",
"subject": "Mai-Beratung",
"currency": "EUR",
"status": "issued",
"items": [
{"title": "Beratung", "quantity": 8, "unit": "h", "unit_price_net": 120, "vat_rate": 19},
{"title": "Reisekosten", "quantity": 1, "unit": "Pauschal", "unit_price_net": 85, "vat_rate": 19}
]
}
Belege
GET
/receipts?status=draftPOST
/receiptsGET
/receipts/{id}DELETE
/receipts/{id}Projekte
GET
/projects?status=activePOST
/projectsGET
/projects/{id}PATCH
/projects/{id}DELETE
/projects/{id}Zeit-Einträge
GET
/time-entries?from=2026-05-01&to=2026-05-31POST
/time-entriesGET
/time-entries/{id}DELETE
/time-entries/{id}Bank
GET
/bank-transactions?match_status=unmatchedGET
/bank-transactions/{id}Fehler-Codes
401— kein/ungültiger Token403— Token ohne Tenant-Bindung404— Ressource gehört nicht zu deinem Tenant oder existiert nicht422— Validierungsfehler, sieheerrors-Objekt429— Rate Limit erreicht500— wir haben was kaputt gemacht, bitte Ticket öffnen