Für Entwickler
MeisterTakt API und Webhooks
Schlüssel erzeugen Administratoren unter Einstellungen, API & Integrationen. Die vollständige Beschreibung gibt es als OpenAPI-Datei.
Schnellstart
# Kunden lesen
curl https://meistertakt.de/api/v1/customers?limit=10 \
-H "Authorization: Bearer mt_IHR_SCHLUESSEL"
# Kunden anlegen. Mit "external" aktualisiert ein zweiter Aufruf, statt zu verdoppeln.
curl -X POST https://meistertakt.de/api/v1/customers \
-H "Authorization: Bearer mt_IHR_SCHLUESSEL" \
-H "Content-Type: application/json" \
-d '{
"name": "Muster GmbH",
"type": "GEWERBLICH",
"contact": "Anna Muster",
"address": "Musterweg 1, 12345 Musterstadt",
"phone": "+49 30 1234567",
"email": "info@muster.example",
"external": { "system": "mein-shop", "id": "K-1001" }
}'- Listen liefern höchstens 200 Einträge je Seite, gesteuert über limit und offset.
- Mit updatedSince holen Sie nur seit dem letzten Abgleich geänderte Datensätze.
- Je Schlüssel sind 120 Anfragen pro Minute möglich, danach antwortet die API mit 429.
- Fehler kommen einheitlich als JSON mit error.code und error.message. Festgeschriebene Monate lehnen Buchungen mit 409 ab.
- Lohn-, Bank- und Steuerdaten sowie Zugangsdaten gibt die API nicht heraus.
Endpunkte
| Aufruf | Zweck | Berechtigung |
|---|---|---|
| GET /api/v1/employees | Mitarbeiter auflisten | employees:read |
| GET /api/v1/employees/{id} | Mitarbeiter lesen | employees:read |
| GET /api/v1/customers | Kunden auflisten | customers:read |
| POST /api/v1/customers | Kunden anlegen oder über external aktualisieren | customers:write |
| GET /api/v1/customers/{id} | Kunden lesen | customers:read |
| PATCH /api/v1/customers/{id} | Kunden ändern | customers:write |
| GET /api/v1/materials | Material auflisten | materials:read |
| POST /api/v1/materials | Material anlegen oder über external aktualisieren | materials:write |
| GET /api/v1/materials/{id} | Material lesen | materials:read |
| PATCH /api/v1/materials/{id} | Material ändern | materials:write |
| GET /api/v1/orders | Aufträge auflisten | orders:read |
| POST /api/v1/orders | Auftrag anlegen oder über external aktualisieren | orders:write |
| GET /api/v1/orders/{id} | Auftrag lesen | orders:read |
| PATCH /api/v1/orders/{id} | Auftrag ändern | orders:write |
| GET /api/v1/time-events | Stempel auflisten | time:read |
| POST /api/v1/time-events | Stempel buchen. Festgeschriebene Monate werden abgelehnt. | time:write |
| GET /api/v1/time-entries | Manuelle Zeiteinträge auflisten | time:read |
| GET /api/v1/absences | Abwesenheiten auflisten | absences:read |
| POST /api/v1/absences | Abwesenheitsantrag stellen | absences:write |
| GET /api/v1/period-locks | Monatsabschlüsse auflisten | time:read |
Berechtigungen
| Berechtigung | Erlaubt |
|---|---|
| employees:read | Mitarbeiter lesen (ohne Lohn- und Bankdaten) |
| customers:read | Kunden lesen |
| customers:write | Kunden anlegen und ändern |
| materials:read | Material lesen |
| materials:write | Material anlegen und ändern |
| orders:read | Aufträge lesen |
| orders:write | Aufträge anlegen und ändern |
| time:read | Stempel, Zeiteinträge und Monatsabschlüsse lesen |
| time:write | Stempel buchen |
| absences:read | Abwesenheiten lesen |
| absences:write | Abwesenheitsanträge stellen |
Webhooks
MeisterTakt ruft Ihre HTTPS-Adresse auf, sobald ein Ereignis eintritt. Die Nachricht trägt nur Kennungen, Details holen Sie über die API. Bei Fehlern folgen bis zu sechs Wiederholungen mit wachsendem Abstand, zuletzt nach 24 Stunden.
POST /ihr/webhook
x-meistertakt-event: order.created
x-meistertakt-delivery: 3f1c...
x-meistertakt-timestamp: 1793523600
x-meistertakt-signature: sha256=8a2f...
{
"id": "b7e4...",
"type": "order.created",
"createdAt": "2026-11-01T12:00:00.000Z",
"data": { "id": "c91d..." }
}import { createHmac, timingSafeEqual } from "node:crypto";
function isValid(rawBody, headers, secret) {
const timestamp = headers["x-meistertakt-timestamp"];
// Alte Nachrichten verwerfen, damit sich nichts wiederholen lässt.
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
const received = headers["x-meistertakt-signature"].replace("sha256=", "");
return (
expected.length === received.length &&
timingSafeEqual(Buffer.from(expected), Buffer.from(received))
);
}| Ereignis | Bedeutung |
|---|---|
| customer.created | Kunde angelegt |
| customer.updated | Kunde geändert |
| material.created | Material angelegt |
| material.updated | Material geändert |
| order.created | Auftrag angelegt |
| order.updated | Auftrag geändert |
| absence.approved | Abwesenheit genehmigt |
| period.locked | Monat festgeschrieben |
Sie möchten die Anbindung nicht selbst bauen?
Im Enterprise-Tarif setzen wir individuelle Anbindungen als Projekt um.