Mittels read-api kann das Aktivitätsprotokoll von Events und anderen Entitäten abgerufen werden – als Änderungssignal für externe Systeme, die co*pilot-Daten regelmäßig synchronisieren.

Jede fachliche Änderung in co*pilot (Zeitplan, Benutzerfelder, Räume, Kontakte, Dateien, Angebote, …) erzeugt eine Aktivität an der betroffenen Entität. Anders als updatedAt im Event-Payload, das nur die Stammdaten des Events abbildet, erfasst das Aktivitätsprotokoll auch alle Teiländerungen.

Authentifizierung

Infos über Authentifizierung, Status Codes und Code Beispiele

Der Access Token benötigt die Berechtigung read-api. Aktivitäten zu vertraulichen Daten (vertrauliche Benutzerfelder, vertrauliche Dateien) sind nur enthalten, wenn der Token zusätzlich die Berechtigung confidential-api besitzt.

Endpunkte

  • GET /aktivitaeten/:entitaet (alle Aktivitäten eines Entitätstyps – z.B. „welche Events haben sich seit dem letzten Lauf geändert?")
  • GET /aktivitaeten/:entitaet/:id (Aktivitäten einer einzelnen Entität)

Die maschinenlesbare Spezifikation (OpenAPI) ist unter GET /{instanzId}/api/spec.yaml abrufbar, eine interaktive Oberfläche unter /{instanzId}/api/spec/ui/.

GET /aktivitaeten/:entitaet

Liefert die Aktivitäten aller Entitäten eines Typs, aufsteigend nach id (älteste zuerst).

Entitätstypen

Event, Reihe, Kontakt, Aufgabe, Angebot, Rechnung, Vorlage, Rechnungsvorlage, OptionsGruppe, Promotion, PromotionsKampagne, EventExport, DateiReferenz, Gästeliste, GästelisteKontingent, Artist, ArtistShow, Spielort, InventarArtikel, VfsDokument, Raum

Parameter

KeyTyp bzw. Wert
sinceZeitpunkt im Format RFC 3339 (z.B. "2026-09-17T03:00:00Z")
Nur Aktivitäten ab diesem Zeitpunkt (inklusive). Für den ersten Abruf einer Synchronisation.
cursorWert aus nextCursor der vorherigen Antwort
Nur Aktivitäten nach diesem Cursor. Damit kann ein späterer Lauf genau dort weiterlesen, wo der letzte aufgehört hat – ohne Zeitvergleich und ohne Lücken.
limitMaximale Anzahl Aktivitäten pro Antwort
Default: 50
Maximal: 200

Antwort

  {
  "data": [
    {
      "id": 4711,
      "entitaet": "Event",
      "entitaetId": "clx…",
      "aktion": "Geändert",
      "beschreibung": "hat den Ablauf 'Einlass' von '17.09.2026 19:30' zu '17.09.2026 19:00' verschoben",
      "vertraulich": false,
      "erstelltAm": "2026-09-17T10:12:33Z",
      "erstelltVon": {
        "typ": "Benutzer",
        "id": "clx…",
        "email": "armin@example.org",
        "anzeigename": "Armin Hedwig"
      }
    }
  ],
  "hasMore": true,
  "nextCursor": "4711"
}
  
FeldBedeutung
idLaufende Nummer der Aktivität; identisch mit dem Cursor-Wert
entitaet / entitaetIdBetroffene Entität. Deren aktuellen Stand liefert der jeweilige Detail-Endpunkt, z.B. GET /event/:slug mit Header x-param: id
aktion"Erstellt" | "Geändert" | "Gelöscht" | "Gelesen"
Erstellt und Gelöscht betreffen die Entität selbst, Geändert jede Teiländerung (Zeitplan, Benutzerfelder, Dateien, Zuordnungen, …)
beschreibungMenschenlesbare Beschreibung, wie sie auch in der Aktivitäten-Timeline in co*pilot erscheint
vertraulichBetrifft vertrauliche Daten (nur mit confidential-api enthalten)
erstelltVontyp = "Benutzer" (mit email/anzeigename) oder "System" für automatische Aktionen
hasMore / nextCursorEs gibt weitere Aktivitäten; mit cursor=nextCursor die nächste Seite abrufen

Empfohlener Ablauf für eine Synchronisation

  1. Erster Lauf: GET /aktivitaeten/Event?since=<Zeitpunkt> – alle Seiten lesen, bis hasMore false ist.
  2. Den letzten nextCursor (bzw. die höchste id) speichern.
  3. Jeder weitere Lauf: GET /aktivitaeten/Event?cursor=<gespeicherter Cursor>. Die Antwort enthält genau die Aktivitäten seit dem letzten Lauf.
  4. Für die enthaltenen entitaetIds den aktuellen Datenstand über den Detail-Endpunkt nachladen. Der Event-Payload bleibt die fachliche Quelle der Wahrheit; das Aktivitätsprotokoll ist nur das Signal.

GET /aktivitaeten/:entitaet/:id

Liefert die Aktivitäten einer einzelnen Entität, aufsteigend nach id. Parameter und Antwort entsprechen dem Feed-Endpunkt.

  curl -i "https://copilot.events/{instanzId}/api/aktivitaeten/Event/{eventId}?limit=20" \
  -H "Authorization: Bearer {token}"
  

Status Codes

Status CodeAnmerkung
200OK
400Bad Request (ungültiges Datum in since)
401Unauthorized (Invalider oder fehlender Access Token)
403Forbidden (Token ohne read-api)
422Unprocessable Entity (unbekannter Entitätstyp, ungültiger Cursor)