Entwicklerdoku

Referenz

Jede Operation der Kunden-API: Methode, Pfad, Scope, Parameter, Beispielantwort und mögliche Fehler.

Jede Operation unten gehört zur Kunden-API unter https://app.sip.coach/api/public/v1 und verlangt den im Kopf Authorization genannten Schlüssel-Scope (Ausnahme /me). Jede Antwort trägt zusätzlich X-Request-Id und die RateLimit-*-Köpfe; jede POST-Operation akzeptiert Idempotency-Key — Details dazu auf der Übersichtsseite. Diese Seite wird aus demselben Code erzeugt wie openapi.v1.json und bildet deshalb immer die tatsächlich erreichbaren Operationen ab.

Konto

GET /me kein Scope
Eigene Auskunft
Mandant, Scopes, Grenzwert und Datenschutzschalter des verwendeten Schlüssels.

Beispielantwort:

{
  "kind": "team",
  "privacy": {
    "member_detail_enabled": true
  },
  "rate_limit_per_min": 600,
  "scopes": [
    "users:read",
    "trainings:read"
  ],
  "tenant_id": "6a9c3e3e-9b8e-4b7b-9e9d-2b7b1a2c3d4e"
}
401 unauthorized403 api_disabled422 validation_error429 rate_limited503 unavailable

Mitglieder

GET /users scope: users:read
Mitglieder auflisten
Aktive und eingeladene Teammitglieder. email erscheint nur, wenn der Schalter member_detail_enabled des Teams an ist.
ParameterTyp
cursor (Query, optional)string
limit (Query, optional)integer

Beispielantwort:

{
  "data": [
    {
      "email": "anna@example.com",
      "id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
      "joined_at": "2026-09-01T08:00:00Z",
      "role": "member",
      "status": "active",
      "user_id": "2c0f3c4d-5e6f-7081-92a3-b4c5d6e7f809"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled422 validation_error429 rate_limited503 unavailable
POST /users scope: users:write
Mitglied einladen
Lädt ein neues Teammitglied per E-Mail ein. 409 seat_limit_reached, wenn kein Platz frei ist; 409 conflict, wenn die E-Mail bereits einem Mitglied dieses Teams oder dem Inhaber gehört. Eine andere Rolle als member gewährt deren Rechte und folgt denselben Regeln wie PATCH /users/{member_id} (sonst 403 insufficient_scope). Begrenzt auf 60 Einladungen pro Stunde und Team.

Anfragekörper:

FeldTypPflicht
emailstringja
rolestringnein
langstringnein

Beispielanfrage:

{
  "email": "jordan@example.com",
  "role": "member"
}

Beispielantwort:

{
  "email": "anna@example.com",
  "id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
  "joined_at": "2026-09-01T08:00:00Z",
  "role": "member",
  "status": "active",
  "user_id": "2c0f3c4d-5e6f-7081-92a3-b4c5d6e7f809"
}
401 unauthorized403 insufficient_scope/api_disabled409 conflict/seat_limit_reached422 validation_error/idempotency_mismatch429 rate_limited503 unavailable
GET /users/{member_id} scope: users:read
Mitglied abrufen
Ein einzelnes Teammitglied; eine fremde Kennung liefert 404.
ParameterTyp
member_id (Pfad, Pflicht)string

Beispielantwort:

{
  "email": "anna@example.com",
  "id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
  "joined_at": "2026-09-01T08:00:00Z",
  "role": "member",
  "status": "active",
  "user_id": "2c0f3c4d-5e6f-7081-92a3-b4c5d6e7f809"
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error429 rate_limited503 unavailable
PATCH /users/{member_id} scope: users:write
Rolle eines Mitglieds ändern
409 last_admin, wenn das Team dadurch ohne admin-Mitglied bliebe; 409 owner beim Inhaber des Teams. Die Rolle admin zu vergeben oder zu entziehen verlangt einen Schlüssel des Inhabers oder eines aktiven Admins, sonst 403 insufficient_scope. email erscheint nur, wenn der Schalter member_detail_enabled des Teams an ist.
ParameterTyp
member_id (Pfad, Pflicht)string

Anfragekörper:

FeldTypPflicht
rolestringja

Beispielanfrage:

{
  "role": "admin"
}

Beispielantwort:

{
  "email": "anna@example.com",
  "id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
  "joined_at": "2026-09-01T08:00:00Z",
  "role": "member",
  "status": "active",
  "user_id": "2c0f3c4d-5e6f-7081-92a3-b4c5d6e7f809"
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found409 owner/last_admin422 validation_error429 rate_limited503 unavailable
DELETE /users/{member_id} scope: users:write
Mitgliedschaft beenden
409 owner, wenn das Mitglied der Inhaber des Teams ist; 409 last_admin, wenn es der einzige aktive Administrator ist. Zieht in derselben Transaktion alle Lernzuweisungen zurück.
ParameterTyp
member_id (Pfad, Pflicht)string

Beispielantwort:

{
  "ok": true
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found409 owner/last_admin422 validation_error429 rate_limited503 unavailable

Trainings

GET /trainings scope: trainings:read
Trainings auflisten
Trainingssitzungen aktiver Mitglieder, gefiltert nach user_id, status, since und assignment_id. Verlangt member_detail_enabled am Team; sonst 403 privacy_restricted.
ParameterTyp
cursor (Query, optional)string
user_id (Query, optional)string
status (Query, optional)string
since (Query, optional)date-time
assignment_id (Query, optional)string
limit (Query, optional)integer

Beispielantwort:

{
  "data": [
    {
      "created_at": "2026-10-14T08:30:00Z",
      "duration_s": 900,
      "finished_at": "2026-10-14T08:42:10Z",
      "id": "7f3cfe1a-1111-4b22-9c33-abcdef012345",
      "industry_id": "saas",
      "personality_id": "skeptiker",
      "role_id": "einkauf",
      "situation_id": "kaltakquise",
      "source": "app",
      "status": "scored",
      "user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled/privacy_restricted422 validation_error429 rate_limited503 unavailable
GET /trainings/{training_id} scope: trainings:read
Training abrufen
Metadaten einer einzelnen Trainingssitzung; kein Transkript in v1.
ParameterTyp
training_id (Pfad, Pflicht)string

Beispielantwort:

{
  "created_at": "2026-10-14T08:30:00Z",
  "duration_s": 900,
  "finished_at": "2026-10-14T08:42:10Z",
  "id": "7f3cfe1a-1111-4b22-9c33-abcdef012345",
  "industry_id": "saas",
  "personality_id": "skeptiker",
  "role_id": "einkauf",
  "situation_id": "kaltakquise",
  "source": "app",
  "status": "scored",
  "user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8"
}
401 unauthorized403 insufficient_scope/api_disabled/privacy_restricted404 not_found422 validation_error429 rate_limited503 unavailable

Bewertungen

GET /evaluations scope: evaluations:read
Bewertete Trainings auflisten
Bewertete Trainingssitzungen zum Abgleich über ?updated_since=; dieselbe Form wie GET /trainings.
ParameterTyp
cursor (Query, optional)string
updated_since (Query, optional)date-time
limit (Query, optional)integer

Beispielantwort:

{
  "data": [
    {
      "created_at": "2026-10-14T08:30:00Z",
      "duration_s": 900,
      "finished_at": "2026-10-14T08:42:10Z",
      "id": "7f3cfe1a-1111-4b22-9c33-abcdef012345",
      "industry_id": "saas",
      "personality_id": "skeptiker",
      "role_id": "einkauf",
      "situation_id": "kaltakquise",
      "source": "app",
      "status": "scored",
      "user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled/privacy_restricted422 validation_error429 rate_limited503 unavailable
GET /trainings/{training_id}/evaluation scope: evaluations:read
Bewertung abrufen
Punktzahl, fünf Dimensionen, Ziel, stärkste Stelle, größter Hebel und bis zu fünf Tipps eines bewerteten Trainings. 404, solange nicht bewertet.
ParameterTyp
training_id (Pfad, Pflicht)string

Beispielantwort:

{
  "biggest_lever": "Close earlier",
  "goal": "partial",
  "methodology": "needs_qual",
  "score": {
    "dimensions": {
      "closing": 72,
      "conversation_control": 78,
      "needs_analysis": 71,
      "objection_handling": 80,
      "value_argument": 69
    },
    "spread": 3,
    "total": 74
  },
  "strongest": "Good discovery questions",
  "tips": [
    {
      "impact": "sounds more confident",
      "issue": "too hesitant",
      "moment": "Line 4",
      "principle": "State it clearly",
      "rewrite": "Let's lock that in."
    }
  ],
  "training_id": "7f3cfe1a-1111-4b22-9c33-abcdef012345",
  "user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8"
}
401 unauthorized403 insufficient_scope/api_disabled/privacy_restricted404 not_found422 validation_error429 rate_limited503 unavailable

Zuweisungen

GET /assignments scope: assignments:read
Zuweisungen auflisten
Team-Zuweisungen. Verlangt member_detail_enabled am Team; sonst 403 privacy_restricted.
ParameterTyp
cursor (Query, optional)string
limit (Query, optional)integer

Beispielantwort:

{
  "data": [
    {
      "created_at": "2026-10-01T09:00:00Z",
      "due_date": "2026-10-20",
      "id": "9a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
      "industry_id": "saas",
      "member_email": "anna@example.com",
      "member_user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
      "personality_id": "skeptiker",
      "situation_id": "kaltakquise",
      "status": "open",
      "title": "Practise cold calling"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled/privacy_restricted422 validation_error429 rate_limited503 unavailable
POST /assignments scope: assignments:write
Zuweisung anlegen
Prüft die Kombination gegen die wirksame Vorgabe des Empfängers; 403 vorgabe_gesperrt, wenn gesperrt.

Anfragekörper:

FeldTypPflicht
member_idstringja
titlestringja
situation_idstringja
personality_idstringja
industry_idstringja
notestringnein
due_datedatenein

Beispielanfrage:

{
  "member_id": "b3b2b1a0-1234-4a3b-8c9d-0e1f2a3b4c5d",
  "title": "Objection handling drill",
  "situation_id": "kaltakquise",
  "personality_id": "skeptiker",
  "industry_id": "saas",
  "due_date": "2026-10-15"
}

Beispielantwort:

{
  "created_at": "2026-10-01T09:00:00Z",
  "due_date": "2026-10-20",
  "id": "9a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
  "industry_id": "saas",
  "member_email": "anna@example.com",
  "member_user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
  "personality_id": "skeptiker",
  "situation_id": "kaltakquise",
  "status": "open",
  "title": "Practise cold calling"
}
401 unauthorized403 insufficient_scope/api_disabled/vorgabe_gesperrt422 validation_error/idempotency_mismatch/kombination_ungueltig429 rate_limited503 unavailable
GET /assignments/{assignment_id} scope: assignments:read
Zuweisung abrufen
Eine einzelne Team-Zuweisung; eine fremde Kennung liefert 404. Verlangt member_detail_enabled am Team; sonst 403 privacy_restricted.
ParameterTyp
assignment_id (Pfad, Pflicht)string

Beispielantwort:

{
  "created_at": "2026-10-01T09:00:00Z",
  "due_date": "2026-10-20",
  "id": "9a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
  "industry_id": "saas",
  "member_email": "anna@example.com",
  "member_user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
  "personality_id": "skeptiker",
  "situation_id": "kaltakquise",
  "status": "open",
  "title": "Practise cold calling"
}
401 unauthorized403 insufficient_scope/api_disabled/privacy_restricted404 not_found422 validation_error429 rate_limited503 unavailable
PATCH /assignments/{assignment_id} scope: assignments:write
Zuweisung aktualisieren
Aktualisiert status, note und/oder due_date. 404 für eine fremde oder unbekannte Kennung.
ParameterTyp
assignment_id (Pfad, Pflicht)string

Anfragekörper:

FeldTypPflicht
statusstringnein
notestringnein
due_datedatenein

Beispielanfrage:

{
  "status": "done"
}

Beispielantwort:

{
  "created_at": "2026-10-01T09:00:00Z",
  "due_date": "2026-10-20",
  "id": "9a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
  "industry_id": "saas",
  "member_email": "anna@example.com",
  "member_user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
  "personality_id": "skeptiker",
  "situation_id": "kaltakquise",
  "status": "open",
  "title": "Practise cold calling"
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error429 rate_limited503 unavailable
DELETE /assignments/{assignment_id} scope: assignments:write
Zuweisung löschen
Löscht die Zuweisung. 404 für eine fremde oder unbekannte Kennung.
ParameterTyp
assignment_id (Pfad, Pflicht)string

Beispielantwort:

{
  "ok": true
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error429 rate_limited503 unavailable

Fälle

GET /cases scope: cases:read
Fälle auflisten
Nur Team-Fälle — ein privater Fall eines Mitglieds wird nie zurückgegeben. Verlangt member_detail_enabled am Team; sonst 403 privacy_restricted.
ParameterTyp
cursor (Query, optional)string
user_id (Query, optional)string
limit (Query, optional)integer

Beispielantwort:

{
  "data": [
    {
      "created_at": "2026-09-20T07:00:00Z",
      "external_ref": {
        "id": "123",
        "object": "deal",
        "system": "hubspot"
      },
      "fields": {},
      "id": "5c6d7e8f-9011-4213-8495-c6d7e8f90123",
      "persona_id": "kaltakquise:skeptiker:saas",
      "title": "Deal Acme Corp",
      "user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled/privacy_restricted422 validation_error429 rate_limited503 unavailable
POST /cases scope: cases:write
Fall anlegen
user_id muss ein aktives Mitglied des aufrufenden Teams sein; eine fremde oder unbekannte Kennung liefert 404.

Anfragekörper:

FeldTypPflicht
user_idstringja
titlestringnein
fieldsobjectnein
persona_idstringnein
external_refobjectnein

Beispielanfrage:

{
  "user_id": "b3b2b1a0-1234-4a3b-8c9d-0e1f2a3b4c5d",
  "title": "Acme Corp — renewal",
  "fields": {
    "amount": 12000,
    "stage": "negotiation"
  }
}

Beispielantwort:

{
  "created_at": "2026-09-20T07:00:00Z",
  "external_ref": {
    "id": "123",
    "object": "deal",
    "system": "hubspot"
  },
  "fields": {},
  "id": "5c6d7e8f-9011-4213-8495-c6d7e8f90123",
  "persona_id": "kaltakquise:skeptiker:saas",
  "title": "Deal Acme Corp",
  "user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8"
}
401 unauthorized403 insufficient_scope/api_disabled422 validation_error/idempotency_mismatch429 rate_limited503 unavailable
GET /cases/{case_id} scope: cases:read
Fall abrufen
Ein einzelner Team-Fall; eine fremde Kennung liefert 404. Verlangt member_detail_enabled am Team; sonst 403 privacy_restricted.
ParameterTyp
case_id (Pfad, Pflicht)string

Beispielantwort:

{
  "created_at": "2026-09-20T07:00:00Z",
  "external_ref": {
    "id": "123",
    "object": "deal",
    "system": "hubspot"
  },
  "fields": {},
  "id": "5c6d7e8f-9011-4213-8495-c6d7e8f90123",
  "persona_id": "kaltakquise:skeptiker:saas",
  "title": "Deal Acme Corp",
  "user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8"
}
401 unauthorized403 insufficient_scope/api_disabled/privacy_restricted404 not_found422 validation_error429 rate_limited503 unavailable
PATCH /cases/{case_id} scope: cases:write
Fall aktualisieren
Aktualisiert title, fields, persona_id und/oder external_ref. 404 für eine fremde oder unbekannte Kennung.
ParameterTyp
case_id (Pfad, Pflicht)string

Anfragekörper:

FeldTypPflicht
titlestringnein
fieldsobjectnein
persona_idstringnein
external_refobjectnein

Beispielanfrage:

{
  "fields": {
    "stage": "won"
  }
}

Beispielantwort:

{
  "created_at": "2026-09-20T07:00:00Z",
  "external_ref": {
    "id": "123",
    "object": "deal",
    "system": "hubspot"
  },
  "fields": {},
  "id": "5c6d7e8f-9011-4213-8495-c6d7e8f90123",
  "persona_id": "kaltakquise:skeptiker:saas",
  "title": "Deal Acme Corp",
  "user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8"
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error429 rate_limited503 unavailable
DELETE /cases/{case_id} scope: cases:write
Fall löschen
Löscht den Fall. 404 für eine fremde oder unbekannte Kennung.
ParameterTyp
case_id (Pfad, Pflicht)string

Beispielantwort:

{
  "ok": true
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error429 rate_limited503 unavailable

Katalog

GET /catalog scope: catalog:read
Katalog abrufen
Plattformkatalog, eingeschränkt auf die wirksame Vorgabe des Teams, beschriftet nach Accept-Language.

Beispielantwort:

{
  "industry": [
    {
      "icon": "cloud",
      "id": "saas",
      "name": "SaaS"
    }
  ],
  "methodology": [
    {
      "icon": "list",
      "id": "needs_qual",
      "name": "Needs qualification"
    }
  ],
  "personality": [
    {
      "icon": "shield",
      "id": "skeptiker",
      "name": "Skeptic"
    }
  ],
  "role": [
    {
      "icon": "briefcase",
      "id": "einkauf",
      "name": "Procurement"
    }
  ],
  "situation": [
    {
      "icon": "phone",
      "id": "kaltakquise",
      "name": "Cold calling"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled422 validation_error429 rate_limited503 unavailable

Auswertung

GET /analytics/team scope: analytics:read
Teamauswertung abrufen
Aggregierte Teamauswertung; members bleibt leer, solange member_detail_enabled und leaderboard_enabled nicht beide an sind oder weniger als 5 aktive Mitglieder betroffen sind.

Beispielantwort:

{
  "dimensions": [
    {
      "dimension": "needs_analysis",
      "value": 71
    }
  ],
  "members": [],
  "skill_gaps": [
    "closing"
  ],
  "totals": {
    "active_members": 9,
    "avg_score": 71.5,
    "scored": 38,
    "sessions": 42
  },
  "trend": [
    {
      "score": 68
    },
    {
      "score": 72
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled422 validation_error429 rate_limited503 unavailable

CRM

GET /crm/deals scope: cases:read
Synchronisierte CRM-Deals auflisten
owner_user_id steht nur drin, wenn member_detail_enabled am Team an ist; die übrigen Felder sind davon unberührt.
ParameterTyp
cursor (Query, optional)string
limit (Query, optional)integer

Beispielantwort:

{
  "data": [
    {
      "amount": "1000.00",
      "close_date": "2026-11-01",
      "currency": "EUR",
      "external_id": "123",
      "id": "1a2b3c4d-5e6f-7081-92a3-b4c5d6e7f809",
      "industry_id": "saas",
      "last_activity_at": "2026-10-10T09:00:00Z",
      "outcome": "open",
      "owner_user_id": "1b9e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
      "pipeline_id": "default",
      "probability": 60,
      "stage_id": "contractsent",
      "synced_at": "2026-10-14T06:00:00Z",
      "title": "Acme Corp"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled422 validation_error429 rate_limited503 unavailable
GET /crm/objections scope: cases:read
Einwandkatalog des Teams auflisten
Der synchronisierte Einwandkatalog des Teams, seitenweise.
ParameterTyp
cursor (Query, optional)string
limit (Query, optional)integer

Beispielantwort:

{
  "data": [
    {
      "category": "price",
      "created_at": "2026-10-09T11:00:00Z",
      "deal_id": "1a2b3c4d-5e6f-7081-92a3-b4c5d6e7f809",
      "id": "42",
      "lang": "en",
      "text": "Too expensive compared to the incumbent."
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled422 validation_error429 rate_limited503 unavailable

Webhooks

GET /webhook-endpoints scope: webhooks:manage
Webhook-Endpunkte auflisten
Webhook-Endpunkte des aufrufenden Mandanten. secret ist nie enthalten (nur die Antwort auf POST trägt es, einmalig).

Beispielantwort:

{
  "data": [
    {
      "api_version": "2026-10",
      "created_at": "2026-10-01T09:00:00Z",
      "description": "CRM sync",
      "events": [
        "training.completed",
        "evaluation.completed"
      ],
      "id": "7c3b2a1d-0000-4000-8000-0123456789ab",
      "last_success_at": "2026-10-14T08:00:00Z",
      "status": "active",
      "url": "https://hooks.example.com/sip"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled422 validation_error429 rate_limited503 unavailable
POST /webhook-endpoints scope: webhooks:manage
Webhook-Endpunkt anlegen
Die Ziel-URL muss HTTPS sein und öffentlich erreichbar. secret steht nur in dieser Antwort — danach wird es nie wieder angezeigt.

Anfragekörper:

FeldTypPflicht
urlstringja
descriptionstringnein
eventsarrayja

Beispielanfrage:

{
  "url": "https://example.com/webhooks/sip-coach",
  "description": "Production",
  "events": [
    "training.completed",
    "evaluation.completed"
  ]
}

Beispielantwort:

{
  "api_version": "2026-10",
  "created_at": "2026-10-01T09:00:00Z",
  "description": "CRM sync",
  "events": [
    "training.completed",
    "evaluation.completed"
  ],
  "id": "7c3b2a1d-0000-4000-8000-0123456789ab",
  "last_success_at": "2026-10-14T08:00:00Z",
  "secret": "whsec_7f3c1a2b3c4d5e6f70819293a4b5c6d7",
  "status": "active",
  "url": "https://hooks.example.com/sip"
}
401 unauthorized403 insufficient_scope/api_disabled422 validation_error/idempotency_mismatch429 rate_limited503 unavailable
PATCH /webhook-endpoints/{endpoint_id} scope: webhooks:manage
Webhook-Endpunkt aktualisieren
Aktualisiert url, description, events und/oder status. 404 für eine fremde oder unbekannte Kennung.
ParameterTyp
endpoint_id (Pfad, Pflicht)string

Anfragekörper:

FeldTypPflicht
urlstringnein
descriptionstringnein
eventsarraynein
statusstringnein

Beispielanfrage:

{
  "status": "active"
}

Beispielantwort:

{
  "api_version": "2026-10",
  "created_at": "2026-10-01T09:00:00Z",
  "description": "CRM sync",
  "events": [
    "training.completed",
    "evaluation.completed"
  ],
  "id": "7c3b2a1d-0000-4000-8000-0123456789ab",
  "last_success_at": "2026-10-14T08:00:00Z",
  "status": "active",
  "url": "https://hooks.example.com/sip"
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error429 rate_limited503 unavailable
DELETE /webhook-endpoints/{endpoint_id} scope: webhooks:manage
Webhook-Endpunkt löschen
Löscht den Endpunkt; wartende Zustellungen dafür entfallen. 404 für eine fremde oder unbekannte Kennung.
ParameterTyp
endpoint_id (Pfad, Pflicht)string

Beispielantwort:

{
  "ok": true
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error429 rate_limited503 unavailable
POST /webhook-endpoints/{endpoint_id}/test scope: webhooks:manage
Testereignis senden
Reiht ein einzelnes ping-Ereignis zur Zustellung über die Hintergrundschleife ein (innerhalb von Sekunden abgeholt); das Ergebnis erscheint unter GET .../deliveries zur zurückgegebenen delivery_id.
ParameterTyp
endpoint_id (Pfad, Pflicht)string

Beispielantwort:

{
  "delivery_id": "42",
  "status": "pending"
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error/idempotency_mismatch429 rate_limited503 unavailable
POST /webhook-deliveries/{delivery_id}/retry scope: webhooks:manage
Zustellung jetzt wiederholen
Wiederholt eine fehlgeschlagene oder aufgegebene Zustellung sofort, statt auf den nächsten geplanten Versuch zu warten. 404 für eine fremde oder unbekannte Zustellungs-Kennung.
ParameterTyp
delivery_id (Pfad, Pflicht)string

Beispielantwort:

{
  "attempt": 1,
  "created_at": "2026-10-14T07:59:00Z",
  "event_type": "training.completed",
  "id": "42",
  "next_try_at": "2026-10-14T08:00:00Z",
  "response_code": 200,
  "response_excerpt": "ok",
  "response_ms": 120,
  "status": "ok"
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error/idempotency_mismatch429 rate_limited503 unavailable
GET /webhook-endpoints/{endpoint_id}/deliveries scope: webhooks:manage
Letzte Zustellungen eines Endpunkts auflisten
Die jüngsten Zustellversuche eines Endpunkts, neueste zuerst. 404 für eine fremde oder unbekannte Endpunkt-Kennung.
ParameterTyp
endpoint_id (Pfad, Pflicht)string
limit (Query, optional)integer

Beispielantwort:

{
  "data": [
    {
      "attempt": 1,
      "created_at": "2026-10-14T07:59:00Z",
      "event_type": "training.completed",
      "id": "42",
      "next_try_at": "2026-10-14T08:00:00Z",
      "response_code": 200,
      "response_excerpt": "ok",
      "response_ms": 120,
      "status": "ok"
    }
  ]
}
401 unauthorized403 insufficient_scope/api_disabled404 not_found422 validation_error429 rate_limited503 unavailable