Zuletzt aktualisiert: 2. Oktober 2026
Es gibt drei Wege, von außen mit Layer zu arbeiten:
- Eine KI-App über MCP verbinden, etwa Claude oder ChatGPT. Sie melden sich bei Layer an und wählen, was die App darf.
- Die REST-API für Ihre eigene Software, mit einem Schlüssel, den Sie selbst erstellen.
- Webhooks: Layer meldet an Ihre Adresse, dass etwas passiert ist, etwa eine bezahlte Rechnung.
1. So bleibt es sicher
- Nie mehr als der Ersteller. Ein Schlüssel oder eine verbundene App kann nie mehr als die Person, die ihn erstellt hat. Ändert sich deren Rolle, ändert sich der Schlüssel mit. Verlässt jemand das Team, funktioniert sein Schlüssel nicht mehr.
- Schreiben ist immer ein Vorschlag. Nichts von außen ändert selbst etwas in Ihrem Arbeitsbereich. Jede Änderung kommt in Freigaben und geschieht erst, wenn jemand mit diesem Recht sie freigibt.
- Text von außen bleibt markiert. Was über die API oder MCP hereinkommt, gilt als Text von außen. Ein Vorschlag mit solchem Text wird nie automatisch ausgeführt, auch nicht, wenn Sie andere Vorschläge automatisch ausführen lassen.
- Sichtbar und widerrufbar. Unter Einstellungen, Geräte sehen Sie jeden Schlüssel und jede App, wann sie zuletzt genutzt wurden und was sie getan haben. Widerrufen wirkt sofort.
- Eine Bremse. Jeder Schlüssel und jede App darf 120 Anfragen pro Minute stellen. Darüber erhalten Sie eine 429 mit einem Retry-After.
2. Einen Schlüssel erstellen
In Layer: Einstellungen, Entwickler, Schlüssel für die API. Geben Sie dem Schlüssel einen Namen, wählen Sie, wie lange er gültig ist (30 Tage, 90 Tage oder ein Jahr), und haken Sie an, was er darf. Sie sehen den Schlüssel einmal. Wir speichern nur einen Hash, verloren ist also verloren: Widerrufen Sie ihn und erstellen Sie einen neuen.
Schlüssel gehören zu Ihrem eigenen Arbeitsbereich, nicht zur Demo. Die genaue Adresse Ihrer API und Ihres MCP-Servers steht auf derselben Seite; in den Beispielen unten steht https://jouw-werkplek.example.
| Recht | Was es gewährt |
|---|---|
relaties.lezen | Kunden, Leads, Lieferanten und ihre Ansprechpartner. |
offertes.lezen | Angebote mit ihren Positionen und ihrem Status. |
facturen.lezen | Rechnungen mit Beträgen, Status und Zahlungsdatum. |
leads.lezen | Leads mit Phase, Wert und nächster Aktion. Mit Vorschläge erstellen auch Leads anlegen und aktualisieren. |
communicatie.lezen | Die Zeitleiste der Anrufe, Mails, Gespräche und Notizen pro Kontakt. Mit Vorschläge erstellen auch erfassen. |
mail.lezen | Suchen und Lesen in den Postfächern, die Sie in Layer selbst sehen, mit pro Gespräch, wer zuletzt geschrieben hat und ob es schon eine Antwort gibt. Nur lesen, ohne Anhänge. Was die App liest, geht an die KI, die Sie verbinden. |
agenda.lezen | Ihre eigenen Termine. Mit Vorschläge erstellen auch einen Termin einplanen, ohne Einladung. |
facturen.concept | Einen Rechnungsentwurf erstellen (aus offenen Stunden oder mit eigenen Positionen) oder eine offene Rechnung mit einem Link für den Kunden, sie anpassen und das PDF ansehen. Versenden ist immer ein Vorschlag in Freigaben; den Link teilen Sie selbst. |
offertes.concept | Ein neues Angebot als Entwurf. Das Versenden erledigen Sie immer selbst in Layer. |
bedrijf.vragen | Sucht in Gesprächsprotokollen, der Wissensdatenbank, Kunden, Aufgaben und Datensätzen nach den Stellen, die zu einer Frage passen, mit der Quelle dazu. |
projecten.lezen | Projekte mit Status, Deadline und Aufgaben. |
taken.lezen | Aufgaben mit Status, Deadline und Priorität. |
uren.lezen | Erfasste Stunden. Beträge nur, wenn Ihre Rolle Geld sehen darf. |
producten.lezen | Produkte und Dienstleistungen mit Preis und Bestand. |
tickets.lezen | Supporttickets mit Status und Priorität. |
content.lezen | Posts im Content-Kalender mit Kanal, Datum und Status. |
series.lezen | Formate, Serien und Folgen mit ihrem Schritt und ihrer Bewertung. |
radar.lezen | Ideen mit Score und Signalen aus dem Radar: Ausreißer, Kanalwachstum, Suchanfragen. |
social.lezen | Follower und feste Kennzahlen pro eigenem Social-Media-Konto pro Tag. |
analytics.lezen | Besucher und Suchtraffic aus Google Analytics und Search Console. |
radar.sturen | Entdecken ein- oder ausschalten, Suchbegriffe und Kanäle steuern und den Trendanalysten starten. Nur für diejenigen, die im Arbeitsbereich den Radar verwalten. |
radar.feedback | Ideen aus dem Radar als gut oder nicht gut bewerten. Das steuert nur, wo der Radar sucht und was der Trendanalyst erstellt; nichts geht hinaus. |
content.voorstellen | Einen Post als Idee im Content-Kalender vorschlagen. Zusammen mit Vorschläge erstellen; er wartet in Freigaben. |
verslagen.insturen | Protokolle aus TrompTech Notulen in Meetings ablegen. Was damit passiert (Aufgaben, Kontaktmoment, Mail), wählen Sie danach selbst. |
verslagen.verwerken | Aus einem Protokoll, das Sie selbst eingereicht haben, Aufgaben, einen Kontaktmoment und einen Mailentwurf erstellen, wie die Schaltfläche Verarbeiten in Meetings. Nur was Ihre Rolle darf; eine Mail wird nie versendet. |
opnames.insturen | Inspektionen, Abnahmen und Schadensaufnahmen aus TrompTech Opname auf dem PC in Aufnahmen ablegen, mit den Fotos und dem Bericht. |
opnames.lezen | Ihre Aufnahmen mit ihren Punkten und Fotos, um eine Aufnahme, die auf dem Telefon begonnen wurde, auf dem PC fertigzustellen. |
uren.schrijven | Was TrompTech Uren auf Ihrem PC gesehen und Sie geprüft haben, als Entwurf in Ihre eigene Wochenübersicht übernehmen, und Ihre eigenen Stunden lesen, um nichts doppelt zu erfassen. Das Einreichen erledigen Sie selbst; Fenstertitel werden nicht übertragen. |
gids.lezen | Welche Seiten und Hilfeartikel Sie in diesem Arbeitsbereich öffnen können, für TrompTech Gids auf Ihrem PC: Er beantwortet Fragen zu Layer und bringt Sie an die richtige Stelle. Keine Daten von Kunden oder Kollegen. |
content.insturen | Karussells aus TrompTech Slides und Videos und Shorts aus TrompTech Studio als Post in den Content-Kalender stellen, mit den Bildern oder dem Video. Sie warten auf Ihre Zustimmung; das Veröffentlichen erledigen Sie selbst. |
dictaat.insturen | Was Sie in TrompTech Voice diktieren, als Aufgabe, als interne Notiz bei einem Kunden oder als Mailentwurf in den Postausgang stellen. Nur was Ihre Rolle darf; eine Mail wird nie versendet. |
documenten.delen | Vorschläge und Berichte aus TrompTech Documenten als Webseite mit einem Kunden teilen, sehen, wann er sie öffnet, und das PDF beim Kunden und beim Projekt ablegen. |
kennis.insturen | Anleitungsvideos mit Schritten aus TrompTech Uitleg in die Wissensdatenbank stellen. |
afletteren.transacties.schrijven | Gutschriften eines Kontos in den Abgleich übernehmen, für ein Privatkonto, das auch geschäftlich genutzt wird. Lesen ist mit diesem Recht nicht möglich. |
huishouden.lezen | Ihr Haushaltsbuch (Einkommen, Fixkosten, Budgets und Schulden), Ihre Einkaufsliste und Ihre Aufgaben. Nur lesen, keine Beratung. |
huishouden.schrijven | Einkäufe auf die Liste setzen, abhaken und entfernen sowie Haushaltsaufgaben hinzufügen und abhaken: direkt, mit Rückgängig machen. Eine Schuld oder ein Budget bleibt immer ein Vorschlag in Freigaben. Liest auch Ihren Haushalt. |
aanbiedingen.lezen | Die Supermarktangebote dieser und nächster Woche aus Ihrer Angebots-App, und Preise pro Geschäft für Ihre Einkäufe vergleichen. Nur lesen. |
voorstellen.maken | Änderungen vorschlagen. Sie warten in Freigaben, bis jemand sie freigibt; nichts passiert von selbst. |
Ein Recht funktioniert nur, wenn das Modul in Ihrem Abonnement enthalten ist und Ihre Rolle es erlaubt. Beträge wie einen Stundensatz sehen Sie nur, wenn Ihre Rolle Geld sehen darf.
3. Die REST-API
Alles liegt unter /api/v1. Senden Sie den Schlüssel als Authorization: Bearer mit. GET /api/v1 zeigt, welche Ressourcen Ihr Schlüssel lesen kann. Die vollständige Beschreibung steht in /api/v1/openapi.json (OpenAPI 3.1), auch ohne Schlüssel abrufbar.
Lesen und blättern
curl "https://jouw-werkplek.example/api/v1/taken?status=open&per_pagina=20" \
-H "Authorization: Bearer $LAYER_SLEUTEL"Jede Liste kommt in Seiten, neueste zuerst. Mit per_pagina (1 bis 100, Standard 50) und pagina blättern Sie; volgende gibt die Adresse der nächsten Seite an, oder null. Filtern Sie mit status oder mit sinds (ein Datum oder eine Uhrzeit in ISO 8601), um nur abzurufen, was sich seitdem geändert hat.
{
"data": [ { "id": "...", "titel": "...", "status": "open", "deadline": "2026-10-03T07:00:00.000Z" } ],
"pagina": 1,
"per_pagina": 20,
"totaal": 1,
"volgende": null
}| Ressource | Recht | Vorschläge |
|---|---|---|
/api/v1/relatiesKunden, Leads und (mit dem Modul Lieferanten) Lieferanten. | relaties.lezen | neu (POST): soort, naam, bedrijf, email, telefoon, adres, postcode, plaats, kvk, btw, branche, rechtsvorm, notities, bron; ändern (PATCH): telefoon, branche, rechtsvorm, plaats, website, bron |
/api/v1/contactpersonenAnsprechpartner bei einem Kunden, Lead oder Lieferanten. | relaties.lezen | neu (POST): naam, bedrijf, email, telefoon, notities, bron |
/api/v1/offertesAngebote mit Positionen, Betrag und Status. | offertes.lezen | ändern (PATCH): status |
/api/v1/facturenRechnungen mit Positionen, Betrag, Status und Zahlungsdatum. | facturen.lezen | ändern (PATCH): status, betaald_op |
/api/v1/projectenProjekte mit Status, Deadline, Aufgaben und Fortschritt. | projecten.lezen | ändern (PATCH): status, deadline |
/api/v1/takenAufgaben mit Status, Deadline und Priorität. | taken.lezen | neu (POST): titel, omschrijving, deadline, prioriteit, klant_id, project_id; ändern (PATCH): status, deadline, prioriteit |
/api/v1/urenErfasste Stunden: Ihre eigenen oder die des ganzen Teams, wenn Ihre Rolle das sehen darf. Stundensatz und Rechnung nur, wenn Ihre Rolle das sehen darf. | uren.lezen | nur lesen |
/api/v1/productenProdukte und Dienstleistungen mit Preis und Bestand. Den Einkaufspreis nur, wenn Ihre Rolle Geld sehen darf. | producten.lezen | nur lesen |
/api/v1/ticketsSupporttickets mit Status, Priorität und Kategorie. | tickets.lezen | ändern (PATCH): status |
/api/v1/contentPosts im Content-Kalender: Datum, Kanal, Thema, Status und die Serie, zu der sie gehören. | content.lezen | nur lesen |
/api/v1/formatsFormate: der feste Aufbau einer Folge, pro Plattform Form und Länge, und die Checkliste. | series.lezen | nur lesen |
/api/v1/seriesSerien: ein Format mit Rhythmus, Konto und Status. | series.lezen | nur lesen |
/api/v1/afleveringenFolgen aller Serien, mit Datum, Schritt, Skript und Bewertung. | series.lezen | nur lesen |
/api/v1/radar-ideeenIdeen mit Score aus dem Content-Radar. Der Score ist eine Spanne mit Bestandteilen, nie eine Chance auf Viralität. | radar.lezen | nur lesen |
/api/v1/radar-serievoorstellenSerienvorschläge des Trendanalysten: eine wiederkehrende Show zu einem Thema, das bei mehreren Ausreißern wiederkehrt. Eine Serie erstellen Sie in Layer selbst. | radar.lezen | nur lesen |
/api/v1/radar-signalenSignale der letzten 90 Tage: Ausreißer, frühe Ausreißer, Kanalwachstum, Suchanfragen und Nachrichten, mit der Erklärung, wie sie berechnet sind. | radar.lezen | nur lesen |
/api/v1/social-metingenPro eigenem Social-Media-Konto pro Tag die Follower und die festen Kennzahlen, die der Kanal meldet (letzte 120 Tage). Eine fehlende Zahl ist null, nie die Zahl 0. | social.lezen | nur lesen |
Eine Änderung vorschlagen
Mit dem Recht voorstellen.maken schlagen Sie einen neuen Datensatz oder eine Änderung vor. Die Antwort ist eine 202: Der Vorschlag liegt bereit, es hat sich noch nichts geändert. Geben Sie in waarom den Grund an, dann sieht die prüfende Person ihn dazu.
curl -X POST "https://jouw-werkplek.example/api/v1/taken" \
-H "Authorization: Bearer $LAYER_SLEUTEL" \
-H "Content-Type: application/json" \
-d '{"titel": "Wegen des Angebots nachfassen", "deadline": "2026-10-03", "waarom": "In der Besprechung vereinbart"}'HTTP/1.1 202 Accepted
{
"voorstel": { "id": "...", "actie": "taak.nieuw", "titel": "...", "status": "wacht", "link": "https://jouw-werkplek.example/app/ai/goedkeuringen?id=..." },
"uitleg": "Dit is een voorstel. Er is nog niets veranderd: het wacht in Goedkeuringen tot iemand het goedkeurt."
}Verfolgen Sie den Stand mit GET /api/v1/voorstellen oder GET /api/v1/voorstellen/{id}; Sie sehen nur die Vorschläge Ihres eigenen Schlüssels. Möchten Sie lieber einen Webhook, abonnieren Sie voorstel.goedgekeurd. Andere Aktionen, die die KI in Layer kennt, schlagen Sie mit POST /api/v1/voorstellen und {"actie": "...", "gegevens": { ... }} vor. Ist eine Aktion nicht möglich oder fehlt etwas, erhalten Sie eine 422 mit dem Grund. Löschen ist über die API nicht möglich.
Fehler
Ein Fehler ist immer JSON: {"fout": {"code": "...", "melding": "..."}}, mit einer Meldung in verständlicher Sprache.
| Code | Bedeutung |
|---|---|
| 400 | Die Anfrage stimmt nicht, zum Beispiel ein ungültiges Datum oder ein fehlendes Feld. |
| 401 | Kein Schlüssel oder ein Schlüssel, der abgelaufen oder widerrufen ist. |
| 403 | Dem Schlüssel fehlt ein Recht. Der Header WWW-Authenticate nennt, welches Recht. |
| 404 | Diese Adresse oder dieser Datensatz existiert nicht, oder Sie dürfen ihn nicht sehen. |
| 405 | Diese Methode ist hier nicht möglich. Der Header Allow nennt, was möglich ist. |
| 422 | Der Vorschlag wurde abgelehnt, mit dem Grund dazu. |
| 429 | Zu viele Anfragen. Warten Sie die Anzahl Sekunden aus Retry-After ab. |
4. Webhooks
Wer in Layer Verbindungen verwaltet, richtet Webhooks unter Einstellungen, Entwickler, Webhooks ein: eine Adresse und die Ereignisse, über die Sie informiert werden möchten. Das Geheimnis zum Prüfen der Signatur sehen Sie einmal.
| Ereignis | Wann |
|---|---|
factuur.verstuurd | Eine Rechnung steht auf versendet. |
factuur.betaald | Eine Rechnung steht auf bezahlt. |
offerte.geaccepteerd | Ein Kunde hat ein Angebot angenommen. |
ticket.nieuw | Ein Supportticket ist hinzugekommen, auch aus einer Mail. |
taak.afgerond | Jemand hat eine Aufgabe abgeschlossen. |
voorstel.goedgekeurd | Ein Vorschlag in Freigaben wurde freigegeben. |
Eine Nachricht ist bewusst schlank: was passiert ist und wo Sie es lesen, keine Beträge oder Kundendaten. Den Inhalt rufen Sie mit einem Schlüssel über href ab. Die id bleibt gleich, wenn wir eine Nachricht erneut senden, daran erkennen Sie also eine doppelte Nachricht.
POST /jouw-webhook HTTP/1.1
Content-Type: application/json
TrompTech-Event: factuur.betaald
TrompTech-Delivery: ...
TrompTech-Signature: t=1790931600,v1=...
{
"id": "evt_...",
"type": "factuur.betaald",
"aangemaakt": "2026-10-02T09:00:00.000Z",
"data": { "object": "factuur", "id": "...", "nummer": "...", "href": "/api/v1/facturen/..." }
}Die Signatur prüfen
Der Header TrompTech-Signature enthält eine Zeit t (in Sekunden) und v1: einen HMAC-SHA256 mit Ihrem Geheimnis über t, einen Punkt und den Body, so wie er angekommen ist. Rechnen Sie ihn selbst nach, vergleichen Sie in konstanter Zeit und lehnen Sie Nachrichten ab, die älter als fünf Minuten sind.
import { createHmac, timingSafeEqual } from "node:crypto";
// geheim: das vollständige Webhook-Geheimnis, mit dem Präfix whsec_.
// inhoud: der Body genau so, wie er ankam, als Text (nicht zuerst als JSON einlesen).
export function handtekeningKlopt(geheim, kop, inhoud) {
const delen = new Map((kop ?? "").split(",").map(d => d.trim().split("=", 2)));
const t = Number(delen.get("t")), v1 = delen.get("v1") ?? "";
// Älter als fünf Minuten: ablehnen, damit niemand eine alte Nachricht erneut abspielen kann.
if (!Number.isInteger(t) || Math.abs(Date.now() / 1000 - t) > 300 || !/^[0-9a-f]{64}$/.test(v1)) return false;
const verwacht = createHmac("sha256", geheim).update(`${t}.${inhoud}`).digest();
return timingSafeEqual(verwacht, Buffer.from(v1, "hex"));
}import hashlib, hmac, re, time
def handtekening_klopt(geheim: str, kop: str, inhoud: bytes) -> bool:
delen = dict(d.strip().split("=", 1) for d in (kop or "").split(",") if "=" in d)
t, v1 = delen.get("t", ""), delen.get("v1", "")
if not t.isdigit() or abs(time.time() - int(t)) > 300 or not re.fullmatch(r"[0-9a-f]{64}", v1):
return False
verwacht = hmac.new(geheim.encode(), t.encode() + b"." + inhoud, hashlib.sha256).hexdigest()
return hmac.compare_digest(verwacht, v1)Zustellung und erneute Versuche
- Antworten Sie innerhalb von 10 Sekunden mit einem 2xx. Einer Weiterleitung (3xx) folgen wir nicht.
- Klappt es nicht, versuchen wir es erneut nach 1 Minute, 5 Minuten, 30 Minuten, 2 Stunden, 6 Stunden und 24 Stunden. Danach gilt die Nachricht als fehlgeschlagen; Sie können sie in Layer erneut senden.
- Schlagen zehn Nachrichten nacheinander fehl, wird der Webhook ausgeschaltet. Sie schalten ihn selbst wieder ein.
- Nur https an eine öffentliche Adresse mit Namen, auf dem Standardport. Eine Adresse, die auf ein internes Netzwerk zeigt, erhält nichts; das prüfen wir bei jeder Zustellung erneut.
5. Eine KI-App über MCP verbinden
Layer ist ein MCP-Server unter https://jouw-werkplek.example/api/mcp (Streamable HTTP). Die Anmeldung erfolgt mit OAuth 2.1 mit PKCE: Die App leitet Sie zu Layer, Sie melden sich wie immer an (mit Ihrem zweiten Faktor, falls Sie einen haben) und wählen auf dem Zustimmungsbildschirm, was die App darf.
- Claude: Öffnen Sie Einstellungen, Konnektoren, und fügen Sie einen eigenen Konnektor mit der Adresse Ihres MCP-Servers hinzu.
- ChatGPT: Öffnen Sie Einstellungen, Apps und Konnektoren. Schalten Sie unter Erweitert den Entwicklermodus ein und erstellen Sie einen Konnektor mit der Adresse, mit OAuth als Anmeldung.
- Andere Apps: Jeder MCP-Client mit OAuth funktioniert. Layer unterstützt dynamische Registrierung (RFC 7591) und Client ID Metadata Documents und veröffentlicht seine Daten unter
/.well-known/oauth-authorization-serverund/.well-known/oauth-protected-resource.
Die Menünamen in Claude und ChatGPT unterscheiden sich manchmal je nach Version. Die App sieht nur die Tools, die zu den gewählten Rechten gehören. Lesen geht direkt. Unterstützte Protokollversionen: 2026-07-28, 2025-11-25, 2025-06-18 und 2025-03-26.
Zuerst ein Plan. Eine einzelne Änderung führt die App sofort aus. Mehrere Änderungen gleichzeitig oder etwas, das Struktur schafft, etwa ein Projekt mit Aufgaben, hält sie zuerst als Plan fest: genau die Aktionen mit ihren Daten. Diesen Plan sehen Sie in Ihrem Chat, und erst nach Ihrem ausdrücklichen Ja führt Layer genau diese Aktionen aus, einmal. Interne Änderungen (ein Lead, Kontaktmoment, Notiz, Aufgabe, Termin ohne Einladung, Projekt oder Dokument) führt Layer dann sofort aus, wenn Ihr Arbeitsbereich das erlaubt. Sie sehen sie in Freigaben wieder und machen sie dort rückgängig. Alles, was nach außen geht oder Geld betrifft, etwa eine Mail, eine Einladung, ein Angebot versenden oder eine Rechnung, bleibt immer ein Vorschlag, den Sie freigeben. Eine Sitzung über MCP gilt immer als Text von außen.
Eine verbundene App funktioniert, bis Sie sie unter Einstellungen, Geräte widerrufen oder bis sie 30 Tage nicht genutzt wurde.
6. Fragen oder ein Problem gefunden?
Schreiben Sie an info@tromptech.nl. Ein Sicherheitsproblem melden Sie lieber vertraulich, wie unter Sicherheitsproblem melden beschrieben.