Kampagnen und API
API für eigene Systeme
Persönliche Bewertungslinks automatisch aus Ticketsystem, CRM oder Shop erzeugen: Anmeldung, Aufrufe, Felder, Fehler.
Mit der API legt Ihr eigenes System, etwa ein Ticketsystem, CRM, Shop oder Event-Tool, persönliche Bewertungslinks automatisch an. Den Link verschickt Ihr System selbst, per Mail oder SMS. Die Bewertungen fragen Sie bei Bedarf wieder ab. Was Kampagnen und persönliche Links sind, steht unter Kampagnen und persönliche Links.
Beispiel: Umfrage 3 Tage nach dem Ticket
- Legen Sie einmalig eine Kampagne an, z. B. „Support-Tickets“, in der App oder per API. Ihre ID steht in der Adresse der Kampagne (
/kampagnen/{id}). - Wird ein Ticket geschlossen, plant Ihr System eine Aufgabe in drei Tagen.
- Die Aufgabe ruft
POST /api/v1/campaigns/{id}/invitationsmit der Ticketnummer alsreferenceauf und bekommt den Link zurück. - Ihr System schickt den Link an den Kunden. Fertig: Die Bewertung erscheint in emojirate mit der Ticketnummer.
curl -X POST https://app.emojirate.de/api/v1/campaigns/68db3e37-590a-42ac-97fc-aeda1dd724a7/invitations \
-H "Authorization: Bearer er_…" \
-H "Content-Type: application/json" \
-d '{"reference": "TICKET-4711", "expires_in_days": 14, "metadata": {"agent": "Lisa"}}'
{
"id": "74032aca-998d-45fd-8312-85f485ea924c",
"campaign_id": "68db3e37-590a-42ac-97fc-aeda1dd724a7",
"reference": "TICKET-4711",
"url": "https://feedback.emojirate.de/r/y1vFRqWcKVEcYlAunS4eIr",
"status": "pending",
"metadata": {"agent": "Lisa"},
"created_at": "2026-10-18T13:01:55Z",
"expires_at": "2026-11-01T13:01:55Z",
"opened_at": null,
"completed_at": null,
"revoked_at": null,
"rating": null
}
Anmeldung
Legen Sie unter API-Schlüssel einen Schlüssel an (nur Inhaber). Er beginnt mit er_ und wird genau einmal angezeigt. Schicken Sie ihn bei jeder Anfrage als Header mit:
Authorization: Bearer er_…
Ein Schlüssel gilt für alle Kampagnen Ihrer Organisation. Legen Sie je System einen eigenen Schlüssel an; so können Sie einen zurückziehen, ohne die anderen zu stören. Schlüssel gehören nur auf Server, nie in eine Website oder App, die Kunden laden.
Grundlagen
- Adresse:
https://app.emojirate.de/api/v1.GET /api/v1testet die Verbindung und nennt Ihre Organisation. - Format: JSON (Header
Content-Type: application/json), Zeichensatz UTF-8. Zeitangaben in UTC nach ISO 8601, z. B.2026-10-18T13:01:55Z. - Grenzen: 120 Anfragen pro Minute und Schlüssel. Darüber antwortet die API mit
429undRetry-After. - Doppelte Aufrufe: Je Kampagne gibt es zu einer
referencegenau einen Link. Ruft Ihr System dieselbe Referenz noch einmal auf, kommt der bestehende Link zurück (Status200statt201). Wiederholungen nach Netzwerkfehlern sind damit gefahrlos.
Kampagnen
| Aufruf | Wirkung |
|---|---|
GET /campaigns | Alle Kampagnen |
POST /campaigns | Kampagne anlegen → 201 |
GET /campaigns/{id} | Kampagne mit Kennzahlen (stats: Bewertungen, Ø, Verteilung, Links je Status, Rücklauf) |
PATCH /campaigns/{id} | Kampagne ändern; nur mitgeschickte Felder |
Felder:
| Feld | Bedeutung |
|---|---|
name | Pflicht beim Anlegen, max. 120 Zeichen. Nur intern. |
headline | Frage an die Kunden, max. 160 Zeichen. Leer = „Wie zufrieden waren Sie mit {Firma}?“ |
description | Zeile unter Ihrem Namen auf der Umfrageseite, max. 120 Zeichen |
active | true/false – pausierte Kampagnen nehmen keine Bewertungen an |
notify | Mail bei jeder Bewertung (Standard true) |
ask_email | Kunden nach einer E-Mail für Rückfragen fragen (Standard false) |
notification_email | Empfänger der Mails; leer = Adresse der Organisation |
website_url | Button auf der Danke-Seite; leer = Website der Organisation |
Rückfragen legen Sie in der App an (KampagnenKampagne öffnenRückfragen).
Persönliche Links
| Aufruf | Wirkung |
|---|---|
POST /campaigns/{id}/invitations | Link erzeugen → 201; Referenz schon vorhanden → 200 mit dem bestehenden Link |
GET /campaigns/{id}/invitations | Links einer Kampagne (Filter wie unten) |
GET /invitations | Links aller Kampagnen. Filter: campaign_id, reference, status, limit (1–100, Standard 50), cursor |
GET /invitations/{id} | Ein Link mit Status und Bewertung |
DELETE /invitations/{id} | Link zurückziehen. Schon bewertete Links → 409 |
Beim Erzeugen:
| Feld | Bedeutung |
|---|---|
reference | Optional, max. 120 Zeichen, z. B. Ticket- oder Auftragsnummer. Je Kampagne eindeutig. |
expires_in_days | Gültigkeit in Tagen, 1–365, Standard 30 |
metadata | Optional, beliebiges JSON-Objekt bis 2 KB, z. B. Bearbeiter oder Kanal. Kommt bei jeder Abfrage unverändert zurück. |
status ist einer von pending (offen), opened (geöffnet), completed (bewertet), expired (abgelaufen), revoked (zurückgezogen). Nach der Bewertung enthält rating die Note (score 1–5 und label), den Zeitpunkt, die Antworten auf die Rückfragen und – nur mit Einwilligung des Kunden – contact_email.
Seitenweise abrufen: Listen kommen neueste zuerst. Ist next_cursor nicht null, holen Sie die nächste Seite mit ?cursor=….
GET /api/v1/invitations?status=completed&limit=100
{
"data": [ { "id": "…", "reference": "TICKET-4711", "status": "completed",
"rating": { "score": 4, "label": "Gut", "rated_at": "2026-10-18T13:01:55Z",
"changed_at": null, "answers": [ { "question": "Wurde Ihr Anliegen gelöst?", "answer": "Ja" } ],
"contact_email": null }, … } ],
"next_cursor": "MjAyNi0xMC0xOCAxMzowMjoxMnw…"
}
Fehler
Fehler kommen immer im selben Format, bei ungültigen Eingaben mit den betroffenen Feldern:
{"error": {"code": "validation_failed", "message": "Bitte Eingaben prüfen.",
"fields": {"expires_in_days": "Ganze Zahl von 1 bis 365."}}}
| Status | code | Bedeutung |
|---|---|---|
| 400 | invalid_json | Body ist kein JSON-Objekt |
| 401 | unauthorized | Schlüssel fehlt, ist falsch oder zurückgezogen |
| 403 | plan_feature_missing | Plan enthält „Kampagnen und API“ nicht |
| 403 | subscription_inactive | Kein laufendes Abo: nur Lesen möglich |
| 404 | not_found | Kampagne oder Link gibt es nicht (oder gehört zu einer anderen Organisation) |
| 405 | method_not_allowed | Methode für diese Adresse nicht erlaubt |
| 409 | campaign_inactive | Kampagne ist pausiert, keine neuen Links |
| 409 | already_completed | Bewertete Links lassen sich nicht zurückziehen |
| 415 | unsupported_media_type | Content-Type: application/json fehlt |
| 422 | validation_failed | Eingaben ungültig, siehe fields |
| 429 | rate_limited | Zu viele Anfragen, kurz warten |