{"openapi":"3.1.0","info":{"title":"Comvo API","version":"2.1.8","description":"Mit der Comvo API können Sie personalisierte Umfrageeinladungen erstellen, Umfragen automatisch über Transaktionsereignisse versenden, Antworten und Kennzahlen abrufen, Ihre Organisationsstruktur synchronisieren und Ereignisse per Webhook empfangen.\n\n## Schnellstart\n\n1. Erstellen Sie im Panel unter **Ayarlar › API Anahtarları** (Einstellungen › API-Schlüssel) einen Schlüssel. Führen Sie die ersten Versuche mit einem `sk_test_`-Schlüssel durch: Mit einem Testschlüssel erstellte Einladungen und Antworten werden getrennt von den Live-Daten gehalten und fließen nicht in Berichte ein.\n2. Prüfen Sie den Schlüssel:\n\n```bash\ncurl https://my.comvo.com.tr/api/me \\\n  -H \"Authorization: Bearer sk_test_...\"\n```\n\n3. Rufen Sie für eine Transaktion (Bestellung, Serviceauftrag) einen personalisierten Umfragelink ab:\n\n```bash\ncurl -X POST https://my.comvo.com.tr/api/invitations \\\n  -H \"Authorization: Bearer sk_test_...\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Idempotency-Key: siparis-98123\" \\\n  -d '{\n    \"survey\": \"srv_...\",\n    \"org_unit\": \"IST-034\",\n    \"transaction_ref\": \"98123\",\n    \"contact\": { \"external_id\": \"C-5521\", \"name\": \"Ayşe Yılmaz\", \"email\": \"ayse@example.com\" }\n  }'\n# 201 { \"id\": \"inv_...\", \"url\": \"https://my.comvo.com.tr/s/...\", ... }\n```\n\nDie `url` in der Antwort ist der Einmallink, der an den Kontakt gesendet wird, und wird nur in dieser Antwort zurückgegeben. Jedes Feld im Kontext (Einheit, Transaktionsnummer, Kundennummer, Kontaktdaten, benutzerdefinierte Felder) muss im aktuell gültigen Datenschutzhinweis der Marke aufgeführt sein; andernfalls wird die Anfrage mit dem Fehler `privacy_notice_not_covering` abgelehnt.\n\n## Authentifizierung\n\nSenden Sie bei jeder Anfrage den Header `Authorization: Bearer sk_live_...`. Ein Schlüssel kann nur die bei seiner Erstellung gewählten Berechtigungsbereiche (Scopes) nutzen; ein auf eine Einheit beschränkter Schlüssel sieht nur diese Einheit und die darunterliegenden Einheiten. Testschlüssel (`sk_test_`) haben keinen Zugriff auf Live-Daten.\n\n## Idempotenz\n\nSenden Sie bei schreibenden Anfragen den Header `Idempotency-Key`. Dieselbe Anfrage mit demselben Schlüssel innerhalb von 24 Stunden wird nicht erneut verarbeitet; die erste Antwort wird mit dem Header `Idempotent-Replayed: true` zurückgegeben. Kommt derselbe Schlüssel mit einem anderen Body, wird 422 zurückgegeben.\n\n## Paginierung\n\nListen arbeiten mit Cursorn. Senden Sie den Wert `next_cursor` aus der Antwort mit dem Parameter `?cursor=`; ist `has_more` gleich `false`, ist die Liste zu Ende. `limit` beträgt höchstens 100.\n\n## Ratenbegrenzung\n\nPro Schlüssel sind 600 Anfragen pro Minute möglich, bei Massen-Endpunkten 30 Anfragen. Beachten Sie die Header `RateLimit-Limit`, `RateLimit-Remaining` und `RateLimit-Reset`; wenn Sie eine 429-Antwort erhalten, warten Sie die Dauer aus `Retry-After` ab.\n\n## Zeit, IDs und personenbezogene Daten\n\nZeitangaben sind im Format ISO 8601 und in UTC. IDs haben ein Präfix: `srv_` (Umfrage), `inv_` (Einladung), `rsp_` (Antwort), `org_` (Einheit). Name, E-Mail und Telefon sind in Antworten nur mit dem Scope `responses:pii` enthalten; hat der Kontakt sich für Anonymität entschieden, sind sie nie enthalten.\n\n## Webhooks\n\nUm Ereignisse zu empfangen, fügen Sie im Panel unter **Ayarlar › Webhook'lar** (Einstellungen › Webhooks) oder über den Endpunkt `/webhook-endpoints` eine Adresse hinzu. Jede Anfrage wird mit diesem Header signiert:\n\n```\nWebhook-Signature: t=<Zeit>,v1=<HMAC-SHA256(geheimer Schlüssel, \"Zeit.Body\")>\n```\n\nIm Panel enthält der Reiter **Teknik Rehber** (Technischer Leitfaden) jedes Webhooks Prüfcode für PHP, Node.js und Python sowie eine Beispiel-Payload. Beantworten Sie die Anfrage innerhalb von 10 Sekunden mit 2xx; andernfalls wird sie gemäß der Fehlerrichtlinie des Webhooks erneut zugestellt.\n\n## Fehlercodes\n\nFehler haben das Format [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) `application/problem+json`. Richten Sie Ihr Verhalten nach dem Feld `code`; das Feld `detail` ist für Menschen gedacht.\n\n```json\n{ \"type\": \"https://my.comvo.com.tr/developers#errors-validation_failed\", \"title\": \"Doğrulama hatası\", \"status\": 422,\n  \"code\": \"validation_failed\", \"detail\": \"...\", \"errors\": { \"survey\": [\"Anket bulunamadı.\"] } }\n```\n\n| Code | Status | Bedeutung und Vorgehen |\n| --- | --- | --- |\n| `unauthenticated` | 401 | Der Authorization-Header fehlt oder hat ein falsches Format. |\n| `invalid_key` | 401 | Der Schlüssel wurde nicht gefunden, wurde widerrufen oder ist abgelaufen. Erstellen Sie im Panel einen neuen Schlüssel. |\n| `insufficient_scope` | 403 | Dem Schlüssel fehlt der Scope für diesen Vorgang (im Feld required_scope). Erstellen Sie den Schlüssel mit dem neuen Scope. |\n| `outside_scope` | 403 | Ein auf eine Einheit beschränkter Schlüssel kann nicht auf diesen Datensatz oder auf einen mandantenweiten Vorgang zugreifen. |\n| `forbidden` | 403 | Der Vorgang ist nicht erlaubt. |\n| `not_found` | 404 | Der Datensatz existiert nicht oder liegt außerhalb des Zugriffsbereichs des Schlüssels (Einheit, Live-/Testmodus). |\n| `method_not_allowed` | 405 | Diese Adresse unterstützt diese HTTP-Methode nicht. |\n| `invitation_completed` | 409 | Eine beantwortete Einladung kann nicht storniert werden. |\n| `idempotency_in_progress` | 409 | Die erste Anfrage mit demselben Idempotency-Key wird noch verarbeitet; versuchen Sie es in Kürze erneut. |\n| `invalid_idempotency_key` | 400 | Idempotency-Key ist leer oder länger als 255 Zeichen. |\n| `idempotency_mismatch` | 422 | Derselbe Idempotency-Key wurde mit einem anderen Body verwendet. |\n| `validation_failed` | 422 | Die gesendeten Daten enthalten Fehler; Details pro Feld stehen in errors. |\n| `survey_not_live` | 422 | Die Umfrage ist nicht live; es kann keine Einladung erstellt werden. |\n| `unknown_context_field` | 422 | Ein Feld im Kontext ist im Panel unter KVKK ve Veri > Alanlar (KVKK und Daten > Felder; KVKK ist das türkische Datenschutzgesetz Nr. 6698) nicht definiert (fields). |\n| `privacy_notice_not_covering` | 422 | Die Felder sind im aktuell gültigen Datenschutzhinweis der Marke nicht aufgeführt (fields). Ergänzen Sie den Hinweis und veröffentlichen Sie ihn. |\n| `invalid_assignee` | 422 | Das zuzuweisende Mitglied existiert nicht oder ist nicht berechtigt, diese Antwort zu bearbeiten. |\n| `invalid_level` | 422 | Der Ebenenname wurde nicht gefunden, oder unter der übergeordneten Einheit ist keine Ebene definiert. |\n| `range_too_long` | 422 | Der Kennzahlenzeitraum beträgt höchstens 366 Tage. |\n| `rate_limited` | 429 | Ratenbegrenzung überschritten; warten Sie die Dauer aus Retry-After ab. |\n| `server_error` | 500 | Unerwarteter Fehler. Sie können es mit einem Idempotency-Key gefahrlos erneut versuchen. |"},"servers":[{"url":"https://my.comvo.com.tr/api"}],"tags":[{"name":"Identität"},{"name":"Umfragen"},{"name":"Ereignisse"},{"name":"Einladungen"},{"name":"Kontakte"},{"name":"Antworten"},{"name":"Organisation"},{"name":"Kennzahlen"},{"name":"Webhooks"}],"paths":{"/me":{"get":{"tags":["Identität"],"summary":"Schlüsselinformationen","security":[{"bearer":[]}],"x-scope":"","description":"Zum Testen der Integration: ob der Schlüssel gültig ist und welche Scopes er hat.","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getMe"}},"/surveys":{"get":{"tags":["Umfragen"],"summary":"Umfragen auflisten","security":[{"bearer":[]}],"x-scope":"surveys:read","description":"\n\nScope: `surveys:read`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurveyList"}}}},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"listSurveys","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"}]}},"/surveys/{id}":{"get":{"tags":["Umfragen"],"summary":"Umfrage und ihre Fragen","security":[{"bearer":[]}],"x-scope":"surveys:read","description":"\n\nScope: `surveys:read`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Survey"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getSurvey","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"srv_..."}]}},"/events":{"post":{"tags":["Ereignisse"],"summary":"Ereignis senden","security":[{"bearer":[]}],"x-scope":"events:write","description":"Senden Sie Transaktionsereignisse (Bestellung zugestellt, Serviceauftrag abgeschlossen, Anruf beendet). Für jeden aktiven Auslöser, der im Panel mit diesem Typ verknüpft ist, wird geprüft: ob die Umfrage live ist, ob sich der Kontakt abgemeldet hat, die Häufigkeitsgrenze und der Kanal (anhand der E-Mail- bzw. Telefondaten des Kontakts); sind die Bedingungen erfüllt, wird eine Einladung erstellt und eine verzögerte Nachricht geplant. Verwenden Sie `Idempotency-Key`, um dasselbe Ereignis nicht zweimal zu senden.\n\nScope: `events:write`","responses":{"202":{"description":"Empfangen; zurückgegeben wird, welcher Auslöser wann und über welchen Kanal eine Umfrage sendet oder warum er übersprungen wurde","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"400":{"$ref":"#/components/responses/E400"},"409":{"$ref":"#/components/responses/E409"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"createEvent","parameters":[{"$ref":"#/components/parameters/idempotency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventInput"}}}}}},"/events/batch":{"post":{"tags":["Ereignisse"],"summary":"Massenereignisse (höchstens 500)","security":[{"bearer":[]}],"x-scope":"events:write","description":"\n\nScope: `events:write`","responses":{"202":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventBatchResult"}}}},"400":{"$ref":"#/components/responses/E400"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"createEventBatch","parameters":[{"$ref":"#/components/parameters/idempotency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["events"],"properties":{"events":{"type":"array","maxItems":500,"items":{"$ref":"#/components/schemas/EventInput"}}}}}}}}},"/events/{id}":{"get":{"tags":["Ereignisse"],"summary":"Ereignisergebnis","security":[{"bearer":[]}],"x-scope":"events:write","description":"\n\nScope: `events:write`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"evt_..."}]}},"/contacts/{external_id}":{"get":{"tags":["Kontakte"],"summary":"Kontakt","security":[{"bearer":[]}],"x-scope":"contacts:write","description":"\n\nScope: `contacts:write`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getContact","parameters":[{"name":"external_id","in":"path","required":true,"schema":{"type":"string"},"description":"Ihre Kundennummer"}]},"put":{"tags":["Kontakte"],"summary":"Kontakt erstellen oder aktualisieren","security":[{"bearer":[]}],"x-scope":"contacts:write","description":"Mit `opted_out: true` wird der Kontakt von Umfragenachrichten ausgeschlossen (zur Synchronisierung mit Ihrer eigenen Einwilligungsverwaltung).\n\nScope: `contacts:write`","responses":{"200":{"description":"Aktualisiert","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"201":{"description":"Erstellt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"putContact","parameters":[{"name":"external_id","in":"path","required":true,"schema":{"type":"string"},"description":"Ihre Kundennummer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactInput"}}}}},"delete":{"tags":["Kontakte"],"summary":"KVKK: Kontakt löschen","security":[{"bearer":[]}],"x-scope":"contacts:write","description":"Der Kontaktdatensatz und die Kontaktdaten werden gelöscht; die Antworten werden vom Kontakt getrennt und anonymisiert (sie bleiben in der Statistik), personenbezogene Kontextfelder und Kontaktantworten werden gelöscht, ausstehende Nachrichten werden storniert. Kann nicht rückgängig gemacht werden.\n\nScope: `contacts:write`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactErasure"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"eraseContact","parameters":[{"name":"external_id","in":"path","required":true,"schema":{"type":"string"},"description":"Ihre Kundennummer"}]}},"/contacts/{external_id}/export":{"get":{"tags":["Kontakte"],"summary":"KVKK: Datenauszug des Kontakts","security":[{"bearer":[]}],"x-scope":"contacts:write","description":"Für einen Antrag auf Auskunft: Kontakt, Einladungen, Nachrichten und Antworten.\n\nScope: `contacts:write`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactExport"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"exportContact","parameters":[{"name":"external_id","in":"path","required":true,"schema":{"type":"string"},"description":"Ihre Kundennummer"}]}},"/invitations":{"post":{"tags":["Einladungen"],"summary":"Einladung erstellen","security":[{"bearer":[]}],"x-scope":"invitations:write","description":"Personalisierter Einmallink. Jedes Feld im Kontext muss im aktuell gültigen Datenschutzhinweis aufgeführt sein; andernfalls `privacy_notice_not_covering` (422).\n\nScope: `invitations:write`","responses":{"201":{"description":"Erstellt; `url` ist der Link, der an den Kontakt gesendet wird","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invitation"}}}},"400":{"$ref":"#/components/responses/E400"},"409":{"$ref":"#/components/responses/E409"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"createInvitation","parameters":[{"$ref":"#/components/parameters/idempotency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationInput"}}}}}},"/invitations/batch":{"post":{"tags":["Einladungen"],"summary":"Masseneinladungen (höchstens 1000)","security":[{"bearer":[]}],"x-scope":"invitations:write","description":"Ein fehlerhafter Eintrag hält die übrigen nicht auf; die Ergebnisse werden in der Reihenfolge der Einträge zurückgegeben.\n\nScope: `invitations:write`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResult"}}}},"400":{"$ref":"#/components/responses/E400"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"createInvitationBatch","parameters":[{"$ref":"#/components/parameters/idempotency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["invitations"],"properties":{"invitations":{"type":"array","maxItems":1000,"items":{"$ref":"#/components/schemas/InvitationInput"}}}}}}}}},"/invitations/{id}":{"get":{"tags":["Einladungen"],"summary":"Einladungsstatus","security":[{"bearer":[]}],"x-scope":"invitations:write","description":"\n\nScope: `invitations:write`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invitation"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getInvitation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"inv_..."}]}},"/invitations/{id}/cancel":{"post":{"tags":["Einladungen"],"summary":"Einladung stornieren","security":[{"bearer":[]}],"x-scope":"invitations:write","description":"\n\nScope: `invitations:write`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invitation"}}}},"404":{"$ref":"#/components/responses/E404"},"409":{"$ref":"#/components/responses/E409"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"cancelInvitation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"inv_..."},{"$ref":"#/components/parameters/idempotency"}]}},"/responses":{"get":{"tags":["Antworten"],"summary":"Antworten auflisten","security":[{"bearer":[]}],"x-scope":"responses:read","description":"Nur abgeschlossene Antworten, gemäß Modus des Schlüssels (live/test) und Einheitsbeschränkung. Personenbezogene Daten nur mit dem Scope `responses:pii`.\n\nScope: `responses:read`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseList"}}}},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"listResponses","parameters":[{"name":"survey","in":"query","required":false,"schema":{"type":"string"},"description":"Umfrage-ID"},{"name":"org_unit","in":"query","required":false,"schema":{"type":"string"},"description":"Einheitscode oder ID (einschließlich Unterbaum)"},{"name":"touchpoint","in":"query","required":false,"schema":{"type":"string"},"description":"Kontaktpunkt-Schlüssel"},{"name":"transaction_ref","in":"query","required":false,"schema":{"type":"string"},"description":"Transaktionsnummer (Bestellung, Beleg)"},{"name":"case_status","in":"query","required":false,"schema":{"enum":["new","in_progress","resolved"]},"description":"Fallstatus"},{"name":"priority","in":"query","required":false,"schema":{"enum":["normal","high","critical"]},"description":"Priorität"},{"name":"completed_since","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Nach diesem Zeitpunkt abgeschlossen"},{"name":"updated_since","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Nach diesem Zeitpunkt geändert (für die Synchronisierung)"},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"]},"description":"Reihenfolge (Standard desc)"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"}]}},"/responses/{id}":{"get":{"tags":["Antworten"],"summary":"Antwort","security":[{"bearer":[]}],"x-scope":"responses:read","description":"\n\nScope: `responses:read`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getResponse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"rsp_..."}]},"patch":{"tags":["Antworten"],"summary":"Fallstatus, Priorität oder Zuständigen ändern","security":[{"bearer":[]}],"x-scope":"responses:write","description":"Die Änderung wird im Fallverlauf mit \"API: Schlüsselname\" protokolliert, und an abonnierte Webhooks wird ein case.*-Ereignis gesendet.\n\nScope: `responses:write`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"404":{"$ref":"#/components/responses/E404"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"updateResponse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"rsp_..."},{"$ref":"#/components/parameters/idempotency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUpdate"}}}}}},"/responses/{id}/notes":{"post":{"tags":["Antworten"],"summary":"Notiz zum Fall hinzufügen","security":[{"bearer":[]}],"x-scope":"responses:write","description":"\n\nScope: `responses:write`","responses":{"201":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}}},"404":{"$ref":"#/components/responses/E404"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"createNote","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"rsp_..."},{"$ref":"#/components/parameters/idempotency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["body"],"properties":{"body":{"type":"string","maxLength":5000}}}}}}}},"/org-units":{"get":{"tags":["Organisation"],"summary":"Einheiten auflisten","security":[{"bearer":[]}],"x-scope":"org:read","description":"\n\nScope: `org:read`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgUnitList"}}}},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"listOrgUnits","parameters":[{"name":"updated_since","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Nach diesem Zeitpunkt geändert"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"}]}},"/org-units/{code}":{"get":{"tags":["Organisation"],"summary":"Einheit","security":[{"bearer":[]}],"x-scope":"org:read","description":"\n\nScope: `org:read`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgUnit"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getOrgUnit","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"},"description":"Einheitscode oder ID"}]},"put":{"tags":["Organisation"],"summary":"Einheit per Code erstellen oder aktualisieren","security":[{"bearer":[]}],"x-scope":"org:write","description":"\n\nScope: `org:write`","responses":{"200":{"description":"Aktualisiert","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgUnit"}}}},"201":{"description":"Erstellt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgUnit"}}}},"404":{"$ref":"#/components/responses/E404"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"putOrgUnit","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"},"description":"Einheitscode im externen System (Buchstaben, Ziffern, . _ -)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgUnitInput"}}}}}},"/people/{code}":{"put":{"tags":["Organisation"],"summary":"Mitarbeiter per Code erstellen oder aktualisieren","security":[{"bearer":[]}],"x-scope":"org:write","description":"\n\nScope: `org:write`","responses":{"200":{"description":"Aktualisiert","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Person"}}}},"201":{"description":"Erstellt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Person"}}}},"404":{"$ref":"#/components/responses/E404"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"putPerson","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"},"description":"Mitarbeitercode"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"org_unit":{"type":"string"},"email":{"type":"string","format":"email"},"is_active":{"type":"boolean"}}}}}}}},"/touchpoints":{"get":{"tags":["Organisation"],"summary":"Kontaktpunkte auflisten","security":[{"bearer":[]}],"x-scope":"org:read","description":"\n\nScope: `org:read`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TouchpointList"}}}},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"listTouchpoints","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"}]}},"/touchpoints/{key}":{"put":{"tags":["Organisation"],"summary":"Kontaktpunkt per Schlüssel erstellen oder aktualisieren","security":[{"bearer":[]}],"x-scope":"org:write","description":"\n\nScope: `org:write`","responses":{"200":{"description":"Aktualisiert","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Touchpoint"}}}},"201":{"description":"Erstellt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Touchpoint"}}}},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"putTouchpoint","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"},"description":"Schlüssel (Kleinbuchstaben, Ziffern, _)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"is_active":{"type":"boolean"}}}}}}}},"/metrics":{"get":{"tags":["Kennzahlen"],"summary":"CSAT, NPS, CES und Aufschlüsselung","security":[{"bearer":[]}],"x-scope":"reports:read","description":"Gleiche Berechnung wie in den Panel-Berichten: live, abgeschlossene, nicht verdächtige Antworten; Tage in der Zeitzone des Mandanten.\n\nScope: `reports:read`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Metrics"}}}},"404":{"$ref":"#/components/responses/E404"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getMetrics","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"group_by","in":"query","required":false,"schema":{"enum":["org_unit","touchpoint","person","channel","survey","day"]},"description":"Aufschlüsselung"},{"name":"level","in":"query","required":false,"schema":{"type":"string"},"description":"Ebenenname für group_by=org_unit (z. B. Region)"},{"name":"survey","in":"query","required":false,"schema":{"type":"string"},"description":"Umfrage-ID"},{"name":"org_unit","in":"query","required":false,"schema":{"type":"string"},"description":"Einheitscode (Unterbaum)"},{"name":"touchpoint","in":"query","required":false,"schema":{"type":"string"},"description":"Kontaktpunkt-ID"},{"name":"channel","in":"query","required":false,"schema":{"type":"string"},"description":"qr, email, sms, link"}]}},"/webhook-endpoints":{"get":{"tags":["Webhooks"],"summary":"Webhooks auflisten","security":[{"bearer":[]}],"x-scope":"webhooks:manage","description":"\n\nScope: `webhooks:manage`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointList"}}}},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"listWebhookEndpoints","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"}]},"post":{"tags":["Webhooks"],"summary":"Webhook erstellen","security":[{"bearer":[]}],"x-scope":"webhooks:manage","description":"\n\nScope: `webhooks:manage`","responses":{"201":{"description":"Erstellt; `secret` nur in dieser Antwort","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"createWebhookEndpoint","parameters":[{"$ref":"#/components/parameters/idempotency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointInput"}}}}}},"/webhook-endpoints/{id}":{"get":{"tags":["Webhooks"],"summary":"Webhook","security":[{"bearer":[]}],"x-scope":"webhooks:manage","description":"\n\nScope: `webhooks:manage`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"getWebhookEndpoint","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"whk_..."}]},"patch":{"tags":["Webhooks"],"summary":"Webhook aktualisieren","security":[{"bearer":[]}],"x-scope":"webhooks:manage","description":"\n\nScope: `webhooks:manage`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"404":{"$ref":"#/components/responses/E404"},"422":{"$ref":"#/components/responses/E422"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"updateWebhookEndpoint","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"whk_..."},{"$ref":"#/components/parameters/idempotency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointInput"}}}}},"delete":{"tags":["Webhooks"],"summary":"Webhook löschen","security":[{"bearer":[]}],"x-scope":"webhooks:manage","description":"\n\nScope: `webhooks:manage`","responses":{"204":{"description":"Gelöscht"},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"deleteWebhookEndpoint","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"whk_..."}]}},"/webhook-deliveries":{"get":{"tags":["Webhooks"],"summary":"Zustellprotokoll","security":[{"bearer":[]}],"x-scope":"webhooks:manage","description":"\n\nScope: `webhooks:manage`","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryList"}}}},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"listWebhookDeliveries","parameters":[{"name":"endpoint","in":"query","required":false,"schema":{"type":"string"},"description":"whk_..."},{"name":"status","in":"query","required":false,"schema":{"enum":["pending","sending","retrying","succeeded","failed"]},"description":"Status"},{"name":"event","in":"query","required":false,"schema":{"type":"string"},"description":"Ereignis"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"}]}},"/webhook-deliveries/{id}/redeliver":{"post":{"tags":["Webhooks"],"summary":"Erneut senden","security":[{"bearer":[]}],"x-scope":"webhooks:manage","description":"\n\nScope: `webhooks:manage`","responses":{"202":{"description":"In die Warteschlange gestellt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"}}}},"404":{"$ref":"#/components/responses/E404"},"401":{"$ref":"#/components/responses/E401"},"403":{"$ref":"#/components/responses/E403"},"429":{"$ref":"#/components/responses/E429"}},"operationId":"redeliverWebhook","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"whd_..."},{"$ref":"#/components/parameters/idempotency"}]}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"sk_live_... / sk_test_..."}},"parameters":{"limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},"cursor":{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Der next_cursor-Wert der vorherigen Seite"},"idempotency":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Verhindert, dass dieselbe Anfrage zweimal verarbeitet wird (24 Stunden)"}},"responses":{"E400":{"description":"Ungültige Anfrage","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"E401":{"description":"Authentifizierung fehlgeschlagen","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"E403":{"description":"Unzureichender Scope oder außerhalb des Zugriffsbereichs","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"E404":{"description":"Nicht gefunden (oder außerhalb des Bereichs des Schlüssels)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"E409":{"description":"Konflikt","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"E422":{"description":"Validierungs- oder Geschäftsregelfehler","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"E429":{"description":"Ratenbegrenzung überschritten","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"schemas":{"Problem":{"type":"object","required":["type","title","status","code"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"code":{"type":"string","description":"Maschinenlesbarer Fehlercode"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"fields":{"type":"array","items":{"type":"string"}},"required_scope":{"type":"string"}}},"Me":{"type":"object","required":["object","id","name","tenant","scopes","org_unit","livemode","expires_at"],"additionalProperties":false,"properties":{"object":{"const":"api_key"},"id":{"type":"string","pattern":"^key_[0-9a-z]{26}$","examples":["key_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"},"tenant":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","pattern":"^ten_[0-9a-z]{26}$","examples":["ten_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"}}},"scopes":{"type":"array","items":{"enum":["surveys:read","invitations:write","events:write","contacts:write","responses:read","responses:pii","responses:write","org:read","org:write","reports:read","webhooks:manage"]}},"org_unit":{"type":["string","null"]},"livemode":{"type":"boolean"},"expires_at":{"type":["string","null"],"format":"date-time"}}},"Survey":{"type":"object","required":["object","id","name","status","live","version","locales","touchpoint","created_at","updated_at"],"additionalProperties":false,"properties":{"object":{"const":"survey"},"id":{"type":"string","pattern":"^srv_[0-9a-z]{26}$","examples":["srv_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"},"status":{"enum":["draft","active","paused","archived"]},"live":{"type":"boolean"},"version":{"type":["integer","null"]},"locales":{"type":"array","items":{"type":"string"}},"touchpoint":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"questions":{"type":"array","items":{"type":"object","required":["key","type","title","metric","required","options"],"properties":{"key":{"type":"string"},"type":{"type":"string"},"title":{"type":"string"},"metric":{"type":["string","null"]},"required":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","required":["key","label"],"properties":{"key":{"type":"string"},"label":{"type":"string"}}}}}}}}},"InvitationInput":{"type":"object","required":["survey"],"additionalProperties":false,"properties":{"survey":{"type":"string","description":"Umfrage-ID (srv_...)"},"org_unit":{"type":"string","description":"Einheitscode (z. B. IST-034) oder ID"},"person":{"type":"string","description":"Mitarbeitercode"},"touchpoint":{"type":"string","description":"Kontaktpunkt-Schlüssel; wenn nicht angegeben, der der Umfrage"},"transaction_ref":{"type":"string","maxLength":128,"description":"Bestell-, Beleg- oder Serviceauftragsnummer"},"contact":{"type":"object","additionalProperties":false,"properties":{"external_id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"locale":{"enum":["tr","en","ar","ru","de"]}}},"context":{"type":"object","description":"Im Panel definierte Kontextfelder; müssen im Datenschutzhinweis aufgeführt sein","additionalProperties":{"type":["string","number","boolean"]}},"max_uses":{"type":"integer","minimum":1,"maximum":100,"default":1},"expires_at":{"type":"string","format":"date-time","description":"Standard 30 Tage"}}},"Invitation":{"type":"object","required":["object","id","survey","status","url","channel","org_unit","person","touchpoint","contact","transaction_ref","context","max_uses","uses","expires_at","livemode","created_at"],"additionalProperties":false,"properties":{"object":{"const":"invitation"},"id":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","examples":["inv_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"survey":{"type":"string","pattern":"^srv_[0-9a-z]{26}$","examples":["srv_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"status":{"enum":["pending","sent","started","responded","cancelled","expired"]},"url":{"type":["string","null"],"format":"uri","description":"Personalisierter Link. Nur in der Erstellungsantwort befüllt; das System speichert das Token nicht."},"channel":{"type":"string"},"org_unit":{"type":["string","null"]},"person":{"type":["string","null"]},"touchpoint":{"type":["string","null"]},"contact":{"type":["object","null"],"required":["id","external_id"],"properties":{"id":{"type":"string","pattern":"^con_[0-9a-z]{26}$","examples":["con_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"external_id":{"type":["string","null"]}}},"transaction_ref":{"type":["string","null"]},"context":{"type":"object"},"max_uses":{"type":"integer"},"uses":{"type":"integer"},"expires_at":{"type":["string","null"],"format":"date-time"},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"}}},"BatchResult":{"type":"object","required":["object","created","failed","results"],"properties":{"object":{"const":"batch_result"},"created":{"type":"integer"},"failed":{"type":"integer"},"results":{"type":"array","items":{"type":"object","required":["index","ok"],"properties":{"index":{"type":"integer"},"ok":{"type":"boolean"},"invitation":{"$ref":"#/components/schemas/Invitation"},"error":{"type":"object","required":["code"],"properties":{"code":{"type":"string"}}}}}}}},"Response":{"type":"object","required":["object","id","survey","unit","touchpoint","person","channel","locale","completed_at","transaction_ref","scores","case","anonymous","contact","answers","panel_url"],"additionalProperties":false,"properties":{"object":{"const":"response"},"id":{"type":"string","pattern":"^rsp_[0-9a-z]{26}$","examples":["rsp_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"survey":{"type":"object","required":["id","name","version"],"properties":{"id":{"type":"string","pattern":"^srv_[0-9a-z]{26}$","examples":["srv_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"},"version":{"type":"integer"}}},"unit":{"type":["object","null"],"required":["id","name","code","level"],"additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^org_[0-9a-z]{26}$","examples":["org_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"},"code":{"type":["string","null"]},"level":{"type":["string","null"]}}},"touchpoint":{"type":["object","null"],"required":["id","name"],"additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^tch_[0-9a-z]{26}$","examples":["tch_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"}}},"person":{"type":["object","null"],"required":["id","name"],"additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^per_[0-9a-z]{26}$","examples":["per_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"}}},"channel":{"type":"string"},"locale":{"type":"string"},"completed_at":{"type":["string","null"],"format":"date-time"},"transaction_ref":{"type":["string","null"]},"scores":{"type":"object","required":["csat","ces","nps"],"properties":{"csat":{"type":["number","null"]},"ces":{"type":["number","null"]},"nps":{"type":["integer","null"]}}},"case":{"type":"object","required":["status","priority","flagged","assignee","due_at"],"properties":{"status":{"enum":["new","in_progress","resolved"]},"priority":{"enum":["normal","high","critical"]},"flagged":{"type":"boolean"},"assignee":{"type":["object","null"],"required":["id","name"],"additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^mem_[0-9a-z]{26}$","examples":["mem_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"}}},"due_at":{"type":["string","null"],"format":"date-time"},"resolution_code":{"type":["string","null"],"description":"Bei der Lösung gewählter Abschlusscode (im Panel unter Vaka Ayarları (Falleinstellungen))"},"follow_up_result":{"enum":["resolved","partly","not_resolved",null],"description":"Antwort des Kunden in der Umfrage zur Lösungszufriedenheit"}}},"anonymous":{"type":"boolean"},"contact":{"type":["object","null"],"description":"Nur mit dem Scope `responses:pii` und wenn der Kontakt nicht anonym ist","properties":{"name":{"type":["string","null"]},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"external_id":{"type":["string","null"]}}},"answers":{"type":"array","items":{"type":"object","required":["key","type","title","metric","value","label"],"additionalProperties":false,"properties":{"key":{"type":"string"},"type":{"type":"string"},"title":{"type":"string"},"metric":{"type":["string","null"]},"value":{"description":"Zahl, Optionsschlüssel, Schlüssel-Array oder Text"},"label":{"description":"Optionsbezeichnung (kann ein Array sein) oder null"}}}},"panel_url":{"type":"string","format":"uri"}}},"ResponseUpdate":{"type":"object","additionalProperties":false,"properties":{"case_status":{"enum":["new","in_progress","resolved"]},"priority":{"enum":["normal","high","critical"]},"assignee":{"type":["string","null"],"description":"Mitglieds-ID (mem_...); null = Zuweisung aufheben"},"resolution_code":{"type":["string","null"],"description":"Schlüssel des Abschlusscodes, zusammen mit case_status=resolved"}}},"Note":{"type":"object","required":["object","id","response","body","created_at"],"properties":{"object":{"const":"note"},"id":{"type":"string","pattern":"^act_[0-9a-z]{26}$","examples":["act_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"response":{"type":"string","pattern":"^rsp_[0-9a-z]{26}$","examples":["rsp_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"body":{"type":"string"},"created_at":{"type":"string","format":"date-time"}}},"OrgUnit":{"type":"object","required":["object","id","code","name","level","depth","parent","city","address","is_active","updated_at"],"additionalProperties":false,"properties":{"object":{"const":"org_unit"},"id":{"type":"string","pattern":"^org_[0-9a-z]{26}$","examples":["org_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"code":{"type":["string","null"]},"name":{"type":"string"},"level":{"type":["string","null"]},"depth":{"type":["integer","null"]},"parent":{"type":["string","null"]},"city":{"type":["string","null"]},"address":{"type":["string","null"]},"is_active":{"type":"boolean"},"updated_at":{"type":"string","format":"date-time"}}},"OrgUnitInput":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"},"parent":{"type":["string","null"],"description":"Code der übergeordneten Einheit; ändert er sich, wird die Einheit verschoben"},"level":{"type":"string","description":"Ebenenname; wenn nicht angegeben, eine Ebene unter der übergeordneten"},"city":{"type":"string"},"address":{"type":"string"},"review_url":{"type":"string","format":"uri"},"is_active":{"type":"boolean"}}},"Person":{"type":"object","required":["object","id","code","name","org_unit","is_active"],"additionalProperties":false,"properties":{"object":{"const":"person"},"id":{"type":"string","pattern":"^per_[0-9a-z]{26}$","examples":["per_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"code":{"type":["string","null"]},"name":{"type":"string"},"org_unit":{"type":["string","null"]},"is_active":{"type":"boolean"}}},"Touchpoint":{"type":"object","required":["object","id","key","name","description","is_active"],"additionalProperties":false,"properties":{"object":{"const":"touchpoint"},"id":{"type":"string","pattern":"^tch_[0-9a-z]{26}$","examples":["tch_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"key":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"is_active":{"type":"boolean"}}},"MetricSet":{"type":"object","required":["count","csat","satisfied","ces","nps","promoters","detractors","nps_count","critical"],"properties":{"count":{"type":"integer"},"csat":{"type":["number","null"]},"satisfied":{"type":["number","null"],"description":"Anteil CSAT >= 4 in Prozent"},"ces":{"type":["number","null"]},"nps":{"type":["integer","null"]},"promoters":{"type":["number","null"]},"detractors":{"type":["number","null"]},"nps_count":{"type":"integer"},"critical":{"type":"integer"},"review_offered":{"type":"integer","description":"Google-Bewertungseinladung angezeigt"},"review_clicked":{"type":"integer","description":"Auf die Einladung geklickt"}}},"Metrics":{"type":"object","required":["object","range","summary","previous"],"properties":{"object":{"const":"metrics"},"range":{"type":"object","required":["from","to"],"properties":{"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"}}},"summary":{"$ref":"#/components/schemas/MetricSet"},"previous":{"$ref":"#/components/schemas/MetricSet","description":"Vorherige Periode gleicher Länge"},"groups":{"type":"array","items":{"type":"object","required":["key","name","count","csat"],"properties":{"key":{"type":"string"},"name":{"type":"string"},"count":{"type":"integer"},"csat":{"type":["number","null"]},"satisfied":{"type":["number","null"]},"nps":{"type":["integer","null"]},"critical":{"type":"integer"},"delta":{"type":["number","null"]}}}}}},"WebhookEndpoint":{"type":"object","required":["object","id","name","url","events","filters","include_pii","header_names","is_active","retry_every_minutes","give_up_after_minutes","notify_on_failure","notify_emails","disable_after_failures","disabled_reason","created_at"],"properties":{"object":{"const":"webhook_endpoint"},"id":{"type":"string","pattern":"^whk_[0-9a-z]{26}$","examples":["whk_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"enum":["response.completed","response.flagged","case.assigned","case.status_changed","case.resolved","case.escalated"]}},"filters":{"type":"object","properties":{"surveys":{"type":"array","items":{"type":"string"}},"unit":{"type":"string"},"min_priority":{"enum":["high","critical"]}}},"include_pii":{"type":"boolean"},"header_names":{"type":"array","items":{"type":"string"}},"is_active":{"type":"boolean"},"retry_every_minutes":{"type":"integer"},"give_up_after_minutes":{"type":"integer","description":"0 = keine Wiederholung"},"notify_on_failure":{"type":"boolean"},"notify_emails":{"type":"array","items":{"type":"string"}},"disable_after_failures":{"type":["integer","null"]},"disabled_reason":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"secret":{"type":"string","description":"Nur in der Erstellungsantwort"}}},"WebhookEndpointInput":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"enum":["response.completed","response.flagged","case.assigned","case.status_changed","case.resolved","case.escalated"]}},"filters":{"type":"object"},"include_pii":{"type":"boolean"},"headers":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"value":{"type":["string","null"]}}}},"retry_every_minutes":{"type":"integer","minimum":1,"maximum":1440,"default":5},"give_up_after_minutes":{"type":"integer","minimum":0,"maximum":10080,"default":1440},"notify_on_failure":{"type":"boolean"},"notify_emails":{"type":"array","items":{"type":"string","format":"email"}},"disable_after_failures":{"type":["integer","null"]},"is_active":{"type":"boolean"}}},"WebhookDelivery":{"type":"object","required":["object","id","endpoint","event","event_id","status","attempts","last_status_code","last_error","next_attempt_at","created_at"],"additionalProperties":false,"properties":{"object":{"const":"webhook_delivery"},"id":{"type":"string","pattern":"^whd_[0-9a-z]{26}$","examples":["whd_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"endpoint":{"type":"string","pattern":"^whk_[0-9a-z]{26}$","examples":["whk_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"event":{"type":"string"},"event_id":{"type":"string"},"status":{"enum":["pending","sending","retrying","succeeded","failed"]},"attempts":{"type":"integer"},"last_status_code":{"type":["integer","null"]},"last_error":{"type":["string","null"]},"next_attempt_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"}}},"EventInput":{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"type":"string","pattern":"^[a-z0-9][a-z0-9_.]{0,63}$","description":"Ereignistyp; die im Panel mit diesem Typ verknüpften Auslöser werden ausgeführt (z. B. order_delivered)"},"occurred_at":{"type":"string","format":"date-time","description":"Zeitpunkt des Ereignisses; die Verzögerung wird hinzugerechnet. Wenn nicht angegeben, jetzt."},"contact":{"type":"object","additionalProperties":false,"properties":{"external_id":{"type":"string","description":"Ihre Kundennummer (empfohlen)"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string","description":"+90 5xx... oder 05xx..."},"locale":{"enum":["tr","en","ar","ru","de"]}}},"org_unit":{"type":"string"},"person":{"type":"string"},"touchpoint":{"type":"string"},"transaction_ref":{"type":"string","maxLength":128},"context":{"type":"object","additionalProperties":{"type":["string","number","boolean"]}}}},"Event":{"type":"object","required":["object","id","type","occurred_at","matched_triggers","scheduled","skipped","livemode","created_at"],"additionalProperties":false,"properties":{"object":{"const":"event"},"id":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","examples":["evt_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"type":{"type":"string"},"occurred_at":{"type":"string","format":"date-time"},"matched_triggers":{"type":"integer"},"scheduled":{"type":"array","items":{"type":"object","required":["trigger","survey","invitation","message","channel","send_at"],"properties":{"trigger":{"type":"string","pattern":"^trg_[0-9a-z]{26}$","examples":["trg_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"survey":{"type":"string","pattern":"^srv_[0-9a-z]{26}$","examples":["srv_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"invitation":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","examples":["inv_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"message":{"type":"string","pattern":"^msg_[0-9a-z]{26}$","examples":["msg_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"channel":{"enum":["email","sms"]},"send_at":{"type":"string","format":"date-time"}}}},"skipped":{"type":"array","items":{"type":"object","required":["trigger","reason","detail"],"properties":{"trigger":{"type":"string","pattern":"^trg_[0-9a-z]{26}$","examples":["trg_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"detail":{"type":"string"},"reason":{"type":"string","description":"survey_not_live, opted_out, frequency_trigger, frequency_global, no_recipient, privacy_notice_not_covering, unknown_context_field, validation_failed"}}}},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"}}},"EventBatchResult":{"type":"object","required":["object","created","failed","results"],"properties":{"object":{"const":"batch_result"},"created":{"type":"integer"},"failed":{"type":"integer"},"results":{"type":"array","items":{"type":"object","required":["index","ok"],"properties":{"index":{"type":"integer"},"ok":{"type":"boolean"},"event":{"$ref":"#/components/schemas/Event"},"error":{"type":"object"}}}}}},"Contact":{"type":"object","required":["object","id","external_id","name","email","phone","locale","opted_out","created_at"],"additionalProperties":false,"properties":{"object":{"const":"contact"},"id":{"type":"string","pattern":"^con_[0-9a-z]{26}$","examples":["con_01k7x9q2m5c8v3n4b6z1t0r2w8"]},"external_id":{"type":["string","null"]},"name":{"type":["string","null"]},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"locale":{"type":["string","null"]},"opted_out":{"type":"boolean","description":"Möchte keine Umfragenachrichten erhalten"},"created_at":{"type":"string","format":"date-time"}}},"ContactInput":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"locale":{"enum":["tr","en","ar","ru","de"]},"opted_out":{"type":"boolean","description":"true: Dieser Kontakt erhält keine Umfragenachrichten"}}},"ContactExport":{"type":"object","required":["object","contact","invitations","messages","responses","exported_at"],"properties":{"object":{"const":"contact_export"},"contact":{"$ref":"#/components/schemas/Contact"},"invitations":{"type":"array"},"messages":{"type":"array"},"responses":{"type":"array","items":{"type":"object"}},"exported_at":{"type":"string","format":"date-time"}}},"ContactErasure":{"type":"object","required":["object","erased","responses_anonymized"],"properties":{"object":{"const":"contact_erasure"},"erased":{"const":true},"responses_anonymized":{"type":"integer"}}},"SurveyList":{"type":"object","required":["object","data","has_more","next_cursor"],"additionalProperties":false,"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Survey"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"InvitationList":{"type":"object","required":["object","data","has_more","next_cursor"],"additionalProperties":false,"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Invitation"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"ResponseList":{"type":"object","required":["object","data","has_more","next_cursor"],"additionalProperties":false,"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Response"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"OrgUnitList":{"type":"object","required":["object","data","has_more","next_cursor"],"additionalProperties":false,"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OrgUnit"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"TouchpointList":{"type":"object","required":["object","data","has_more","next_cursor"],"additionalProperties":false,"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Touchpoint"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"WebhookEndpointList":{"type":"object","required":["object","data","has_more","next_cursor"],"additionalProperties":false,"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"WebhookDeliveryList":{"type":"object","required":["object","data","has_more","next_cursor"],"additionalProperties":false,"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}}}}}