Auf G2 mit 5,0 von 5 bewertet
API-Referenz
HummingDeck stellt eine REST API für Integrationspartner und Automatisierungsplattformen bereit. Endpunkte authentifizieren sich mit einem Bearer-Token und geben JSON-Antworten zurück.
https://app.hummingdeck.com/api/v1Authentifizierung
Jede API-Anfrage sendet ein Bearer-Token im Authorization-Header. Es werden zwei Arten von Anmeldedaten akzeptiert, und sie verhalten sich unterschiedlich.
Methode
Bearer-Token
Header-Format
Authorization: Bearer {access_token}
Arten von Anmeldedaten
Workspace-API-Token
Authorization: Bearer hd_api_...
REST-API-Zugriff ist im Business-Tarif auf Anfrage verfügbar und wird nach einer Prüfung pro Arbeitsbereich aktiviert. Anschließend erstellen Inhaber und Administratoren unter Arbeitsbereichseinstellungen, Integrationen, HummingDeck API separat benannte API-Schlüssel. Wählen Sie nur die Berechtigungen aus, die die jeweilige Integration benötigt. Ein Schlüssel wird bei der Erstellung einmal angezeigt und kann danach nicht mehr abgerufen werden. Er läuft nach einem Jahr ab und bleibt dauerhaft an seinen Arbeitsbereich gebunden, sodass eine Anfrage den Arbeitsbereich weder auswählen noch überschreiben kann.
Ein Arbeitsbereich kann bis zu 20 aktive API-Schlüssel haben. Beim Ersetzen eines Schlüssels wird nur dessen vorheriges Geheimnis sofort ungültig; andere Schlüssel funktionieren weiter. Inhaber und Administratoren können jederzeit einen einzelnen oder alle Schlüssel deaktivieren. Der Widerruf dieses Geheimnisses ist dauerhaft.
Ein Arbeitsbereichs-API-Schlüssel kann nur die Vorgänge ausführen, die seine ausgewählten Berechtigungen erlauben. Endpunkte für Webhook-Abonnements sind für Arbeitsbereichs-API-Schlüssel nicht verfügbar.
Zapier OAuth
Authorization: Bearer {access_token}
Wird über den OAuth-Autorisierungsflow ausgestellt, wenn ein Workspace die Zapier-Integration verbindet. Zugriffstokens laufen nach 30 Tagen ab. Verwenden Sie das Refresh-Token, das 90 Tage gültig ist, um ohne erneute Autorisierung ein neues Zugriffstoken zu erhalten.
Dies sind die einzigen Anmeldedaten, die Webhook-Abonnements erstellen oder löschen können.
Berechtigungen
Wähle mindestens eine Berechtigung aus. Schreibberechtigungen enthalten auch den entsprechenden Lesezugriff. Beim Ersetzen des Schlüssels kannst du die Berechtigungen ändern.
rooms:readRäume, Tabs, Elemente, Links und Labels anzeigen.
rooms:writeRäume, Tabs, Elemente, Links und Labels erstellen und verwalten.
plan:readPhasen und Aufgaben des Mutual Action Plans anzeigen.
plan:writePhasen und Aufgaben des Mutual Action Plans erstellen und verwalten.
analytics:readInteraktionsanalysen, Aktivitäten und erfasste E-Mails anzeigen.
crm:readUnternehmen und Kontakte im Arbeitsbereich suchen.
crm:writeUnternehmen, Kontakte und Link-Zielgruppen erstellen oder aktualisieren.
documents:readDokumente suchen und ihre Metadaten anzeigen.
documents:writeDokumente hochladen und Dokumente oder URLs an Räume anhängen.
Die Berechtigungsangaben in den Endpunktzeilen gelten für Workspace-API-Schlüssel. Erforderliche Berechtigungen gelten immer, zusätzlich erforderliche werden gemeinsam benötigt und bedingte nur dann, wenn die Anfrage die zugehörigen Filter oder Felder verwendet. GET /me benötigt keine Berechtigung. Zapier OAuth verwendet seinen festgelegten Integrationszugriff.
Wenn eine Anfrage 401 zurückgibt
Eine Anfrage gibt 401 zurück, wenn der Schlüssel unbekannt oder fehlerhaft ist, abgelaufen oder deaktiviert wurde, zu einem Arbeitsbereich mit deaktiviertem API-Zugriff gehört oder von einer Person ausgestellt wurde, die nicht mehr Inhaber oder Administrator dieses Arbeitsbereichs ist.
Verbindung testen
Überprüfen Sie die Gültigkeit Ihres Tokens und sehen Sie das Profil des authentifizierten Benutzers.
/meGibt Name, E-Mail und Teaminformationen des aktuellen Benutzers zurück.
Keine API-Schlüssel-Berechtigung erforderlich
Dokumente
Dokumente hochladen, suchen und verwalten (PDFs, Präsentationen, Angebote und andere Dateien).
/decksEin neues Dokument hochladen. Als multipart/form-data mit einem file-Feld (PDF, PPTX, DOCX, XLSX, XLS, HTML) und einem title-Feld senden. Das Upload-Limit der API beträgt 30 MB. Die Verarbeitung läuft nach dem Upload weiter; die Antwort enthält processingStatus.
documents:write/decksListet bis zu 20 Dokumente auf, neueste zuerst. Verwenden Sie den optionalen Abfrageparameter title für eine teilweise Titelsuche ohne Beachtung der Groß- und Kleinschreibung.
documents:readGET /decks Antwortfelder
| Field | Type | Description |
|---|---|---|
| id | string | Dokument-ID |
| title | string | Dokumenttitel |
| fileType | string | MIME-Typ des Dokuments |
| pageCount | integer | null | Anzahl der Seiten |
| thumbnailUrl | string | null | URL des Vorschaubildes |
| processingStatus | string | pending, processing, completed oder failed. Ein Dokument kann schon während der Verarbeitung in einen Raum aufgenommen werden; verschicke einen Link dazu, sobald der Status completed lautet. |
| processingErrorCode | string | null | Grund, falls die Verarbeitung fehlgeschlagen ist |
| createdAt | string | ISO 8601-Zeitstempel |
POST /decks Antwortfelder
| Field | Type | Description |
|---|---|---|
| id | string | Dokument-ID |
| title | string | Dokumenttitel |
| fileType | string | MIME-Typ des Dokuments |
| processingStatus | string | pending, processing, completed oder failed. Ein Dokument kann schon während der Verarbeitung in einen Raum aufgenommen werden; verschicke einen Link dazu, sobald der Status completed lautet. |
| processingErrorCode | string | null | Grund, falls die Verarbeitung fehlgeschlagen ist |
Räume
Erstelle digitale Verkaufsräume samt Dokumenten und Zielgruppenlink mit einem einzigen Aufruf, finde Räume, ändere ihre Einstellungen, archiviere sie und stelle sie wieder her und ordne ihre Tabs und Elemente an. Nur mit Workspace-API-Token verfügbar; Zapier-OAuth-Anmeldedaten werden abgelehnt.
/roomsRäume auflisten, die neuesten zuerst. Filtern mit search, status (active, archived oder all) und companyId. Eine Seite enthält 25 Räume (bis zu 100 mit limit); übergib das nextCursor einer Seite als cursor, um die nächste abzurufen.
rooms:readcrm:read(Required when the companyId filter is present.)/roomsEinen Raum mit seinen Dokumenten und dem ersten Zielgruppenlink in einem Aufruf erstellen.
rooms:writedocuments:write(Required when documentIds contains one or more document IDs.)crm:write(Required when the request supplies contactId, recipientName, recipientEmail, companyId, companyName, or when either primaryLink.allowedEmails or primaryLink.allowedDomains is non-empty.)/rooms/{roomId}Die Einstellungen des Raums, seine Tabs und Elemente in Anzeigereihenfolge sowie die Anzahl seiner Links abrufen.
rooms:read/rooms/{roomId}Namen, Begrüßungsnachricht, Ansprechpartner, Unternehmen oder Kontakt ändern.
rooms:writecrm:write(Required when companyId or contactId is present, including null to detach the association.)/rooms/{roomId}/archiveDen Raum archivieren. Seine Links funktionieren nicht mehr.
rooms:write/rooms/{roomId}/restoreEinen archivierten Raum wiederherstellen. Seine Links funktionieren wieder.
rooms:write/rooms/{roomId}/tabsEinen Tab hinzufügen, an einer bestimmten Position oder am Ende.
rooms:write/rooms/{roomId}/tabs/{tabId}Einen Tab umbenennen.
rooms:write/rooms/{roomId}/tabs/orderAlle Tabs neu anordnen.
rooms:write/rooms/{roomId}/tabs/{tabId}Einen Tab entfernen, der keine Elemente anzeigt.
rooms:write/rooms/{roomId}/itemsEinem Tab ein Dokument, eine URL, eine Einbettung oder einen Abschnittstrenner hinzufügen.
rooms:writedocuments:write(Required when type is document or url.)/rooms/{roomId}/items/{itemId}/moveEin Element ans Ende eines anderen Tabs verschieben.
rooms:write/rooms/{roomId}/items/orderDie Elemente eines Tabs neu anordnen.
rooms:write/rooms/{roomId}/items/{itemId}Ein Element aus dem Raum nehmen. Es bleibt in deiner Bibliothek.
rooms:write/rooms/{roomId}/linksListet die Zielgruppen-Links des Raums, neueste zuerst, mit den aktiven Eingeladenen jedes eingeschränkten Links.
rooms:read/rooms/{roomId}/linksEinen zugeordneten offenen Link für einen aktiven Raum erstellen.
rooms:writecrm:write/rooms/{roomId}/links/{linkId}Schaltet einen Link ein oder aus, setzt oder löscht sein Ablaufdatum oder ersetzt seine Zugangsliste.
rooms:writecrm:write(Required when allowedEmails or allowedDomains is present, including an empty array that clears the audience.)/rooms/{roomId}/action-planGibt den Aktionsplan des Raums zurück: Einstellungen, Phasen, Aufgaben (auch interne), Abhängigkeiten und Fortschritt.
plan:read/rooms/{roomId}/action-planÄndert die Einstellungen des Plans, auch ob die Personen im Raum ihre eigenen Aufgaben abhaken dürfen.
plan:write/rooms/{roomId}/action-plan/phasesFügt einen Meilenstein hinzu. Ohne color wechseln die Phasen der Reihe nach zwischen Türkis, Pfirsich und Blau.
plan:write/rooms/{roomId}/action-plan/phases/{phaseId}Benennt eine Phase um, verschiebt sie, ändert ihr Datum oder setzt ihre Farbe. color null stellt die Rotation wieder her.
plan:write/rooms/{roomId}/action-plan/phases/{phaseId}Entfernt eine Phase. mode ist erforderlich: delete_tasks oder move_to_unphased, damit Aufgaben nie versehentlich verschwinden.
plan:write/rooms/{roomId}/action-plan/tasksFügt eine Aufgabe hinzu. assignee ist null, eine Seite allein für das zuständige Unternehmen oder eine Seite mit E-Mail für eine benannte Person.
plan:write/rooms/{roomId}/action-plan/tasks/{taskId}Aktualisiert eine Aufgabe. Ohne assignee bleibt die Zuständigkeit unverändert; null entfernt sie.
plan:write/rooms/{roomId}/action-plan/tasks/{taskId}Entfernt eine Aufgabe. Ihre Teilaufgaben verschwinden mit ihr.
plan:write/rooms/{roomId}/action-plan/tasks/{taskId}/statusSchließt eine Aufgabe im Namen des Workspace ab oder öffnet sie wieder. Eine Aufgabe hinter einer offenen Abhängigkeit liefert 409 TASK_BLOCKED.
plan:write/rooms/{roomId}/analyticsRaumbesuche, eindeutige Betrachter, Durchschnittszeit, geöffnete Dokumente von insgesamt und durchschnittlicher Abschluss. Ohne Bots.
analytics:read/rooms/{roomId}/activityWas im Raum passiert ist, neueste zuerst. Diskussionseinträge nennen die absendende Person und enthalten nie die Nachricht. Mit since eingrenzen.
analytics:read/rooms/{roomId}/captured-emailsAdressen, die der Raum gesammelt hat. source ist verify, wenn die Adresse über einen Einmal-Link bestätigt wurde, und ask, wenn sie nur eingegeben wurde.
analytics:read/room-viewsRaumzutritte im gesamten Workspace, neueste zuerst. Für das Betreten eines Raums gibt es keine andere Quelle; /views deckt nur Dokumentaufrufe ab.
analytics:read/room-labelsListet die Raum-Labels des Workspace samt Anzahl der Räume je Label. Hier findest du die Label-IDs, bevor du einen Raum kennzeichnest.
rooms:read/room-labelsErstellt ein Label. Namen sind pro Workspace eindeutig, Groß- und Kleinschreibung spielt keine Rolle; color ist ein Hexwert im Format #RRGGBB.
rooms:write/room-labels/{labelId}Benennt ein Label um, ändert seine Farbe oder bearbeitet seine Beschreibung.
rooms:write/room-labels/{labelId}Löscht ein Label und seine Zuordnungen. Die Räume, die es getragen haben, bleiben unverändert; die Antwort nennt ihre Anzahl.
rooms:writeEinen Raum mit einem Aufruf erstellen
Lade jede Datei mit POST /decks hoch und erstelle dann den Raum für das Unternehmen der Empfänger mit einem eingeschränkten Link für die Personen, die ihn sehen sollen. Unternehmen, Kontakte, Raum, Dokumente und Link werden gemeinsam angelegt: Wird der Aufruf abgelehnt, wird nichts davon angelegt. Dokumente können schon während der Verarbeitung in den Raum. Die Elemente des Raums melden processingStatus; verschicke den Link also erst, wenn jedes Dokument completed meldet.
{
"name": "Acme renewal",
"companyName": "Acme Inc",
"recipientName": "Pat Buyer",
"recipientEmail": "pat@acme.example",
"documentIds": [
"{documentId}",
"{documentId}"
],
"primaryLink": {
"accessMode": "verified-allowlist",
"allowedEmails": [
"pat@acme.example",
{
"email": "cfo@acme.example",
"name": "Sam Rivera"
}
],
"allowedDomains": [
"acme.example"
]
}
}accessMode ist open (jeder mit der URL), verify-any (Besucher bestätigen ihre E-Mail-Adresse über einen Einmal-Link) oder verified-allowlist (nur die Adressen in allowedEmails und alle mit einer Adresse bei den Domains in allowedDomains). Die API fügt einem eingeschränkten Link niemanden von sich aus hinzu; nimm also deine eigene Adresse auf, wenn du den Raum vorab ansehen möchtest. Eine Option, die dein Tarif nicht enthält, liefert 403 FEATURE_NOT_AVAILABLE, und ein unbekanntes Feld liefert 400. So öffnet sich ein Raum nie für eine andere Zielgruppe als die angefragte.
Tabs und Elemente anordnen
Geh vom aktuellen Stand des Raums aus: Beim Abrufen eines Raums kommen seine Tabs und Elemente in Anzeigereihenfolge zurück, und jedes Element meldet seinen Tab und seine Position darin, gezählt ab 0. Füge Tabs und Elemente an einer Position hinzu, verschiebe Elemente zwischen Tabs und sende die vollständige neue Reihenfolge eines Tabs. Eine Reihenfolge muss jedes Element des Tabs genau einmal enthalten; ruf den Raum also erneut ab, wenn zwischendurch eine andere Änderung erfolgt ist. Ein Tab lässt sich entfernen, sobald er keine Elemente mehr anzeigt.
{
"type": "section",
"label": "Commercials",
"tabId": "{tabId}",
"position": 0
}Unterstützte Embed-Anbieter
Embeds akzeptieren einen Freigabe- oder Einbettungslink und normalisieren ihn auf die Embed-Form des Anbieters. Alles außerhalb dieser Liste liefert 400 EMBED_PROVIDER_NOT_SUPPORTED.
| Field | Type | Description |
|---|---|---|
| Video | Loom, YouTube, Vimeo, Wistia, Vidyard | |
| Terminplanung | Calendly, Cal.com, SavvyCal, Google Calendar | |
| Formulare | Typeform, Tally, Google Forms, Jotform, Fillout | |
| Design | Figma, Miro, Canva, Whimsical | |
| Dokumente und Tabellen | Google Docs, Google Sheets, Notion, Coda, Airtable | |
| Präsentationen | Google Slides, Pitch, Gamma, Guideflow, Flipsnack, Prezi | |
| Audio | Spotify, SoundCloud |
Weiteren Zielgruppen-Link hinzufügen
Jeder Raum hat bereits einen Link aus POST /rooms; weitere kommen für Zielgruppen hinzu, die eine andere Zuordnung oder einen anderen Zugriff brauchen. Gib mindestens eines von recipientName, recipientEmail, contactId, companyId oder companyName an. accessMode nimmt dieselben Werte open, verify-any oder verified-allowlist wie primaryLink, mit denselben Feldern (requireEmail, allowedEmails, allowedDomains, label, expiresAt, allowDownloads). Ein abgelehnter Aufruf, auch an einer Plangrenze, hinterlässt weder Link noch Unternehmen oder Kontakt.
{
"companyName": "Analytical Engines",
"accessMode": "verified-allowlist",
"allowedEmails": [
{
"email": "cfo@analytical.example",
"name": "Sam Rivera"
}
]
}Einen Link ändern
Vier Felder: isActive, expiresAt, allowedEmails, allowedDomains (die beiden letzten nur bei verified-allowlist-Links). accessMode und der Slug ändern sich nie; lege stattdessen einen neuen Link an. Wer einen Link wieder aktiviert, löst eine erneute Prüfung des Limits für aktive Links im Plan aus.
{
"isActive": false
}Den Aktionsplan aufbauen
Jeder Raum hat genau einen Plan, daher hängt er ohne eigene ID am Raum. Die meisten Aufgaben gehören einem Unternehmen und nicht einer Person: Wird nur eine Seite gesendet, liest der Plan sie als das Unternehmen. Genau das willst du, wenn du nicht weißt, wer die Arbeit auf der Gegenseite erledigt. Eine E-Mail kommt nur dazu, wenn die Person bekannt ist. Eine interne Aufgabe erscheint nie im Raum und kann deshalb nicht der Empfängerseite gehören.
{
"title": "Sign the NDA",
"assignee": {
"side": "buyer"
},
"dueDate": "2026-10-02"
}recipientCompletionEnabled im Plan entscheidet, ob die Personen im Raum die Aufgaben ihrer Seite abhaken dürfen. Der Standard ist true, und es ist die einzige Schranke: Die API verlangt nie die Adresse einer empfangenden Person, um eine Aufgabe abzuschließen. Wer abgehakt hat, wird mit der Sicherheit festgehalten, die der Zugriffsmodus des Raums hergibt.
Räume mit Labels kennzeichnen
Labels gelten workspaceweit: einmal anlegen, überall wiederverwenden. Übergib labelIds bei POST /rooms, um einen Raum direkt beim Anlegen zu kennzeichnen, oder bei PATCH /rooms/{roomId}, um den gesamten Satz zu ersetzen; ein leeres Array entfernt alle Labels, und wenn das Feld fehlt, bleiben sie unverändert. Ein Raum trägt höchstens fünf, was strukturell festgelegt und keine Einstellung ist. Beim Lesen eines Raums werden seine Labels mitgeliefert.
{
"labelIds": [
"{labelId}"
]
}Erfahren, was passiert ist
Frage /room-views nach Zutritten im gesamten Workspace ab und lies dann Analytics, Aktivität und gesammelte Adressen eines Raums. Übergib den nextCursor einer Seite als cursor, um fortzufahren; ein Cursor, den diese API nicht ausgegeben hat, liefert 400 statt neu zu beginnen, damit ein Poller keine Arbeit wiederholt. Grenzen Sie das Aktivitätsfenster mit since ein und blättern Sie mit cursor durch die Ergebnisse. /room-views ist ein Zeitfenster und kein Archiv: ohne since bekommst du die letzten 30 Tage, mehr als 90 Tage zurück wird abgelehnt. Das verwendete Fenster kommt als since zurück; sende es zusammen mit cursor, um dieselbe Menge weiterzublättern.
Unternehmen und Kontakte
Vorhandene Kontodatensätze mit eindeutiger Zuordnung finden oder anlegen. Unternehmensnamen und Kontakt-E-Mails werden ohne Beachtung der Groß- und Kleinschreibung verglichen.
/companies?name={name}&domain={domain}Bis zu 10 Unternehmen nach exaktem Namen, Domain oder beidem finden.
crm:read/companiesEin Unternehmen anhand des Namens ohne Beachtung der Groß- und Kleinschreibung finden oder anlegen. Eine explizite Domain ergänzt nur den Datensatz. created kennzeichnet das Ergebnis.
crm:write/contacts?email={query}Kontakte nach E-Mail-Adresse suchen. Gibt passende Kontakte mit ihrem zugehörigen Unternehmen zurück.
crm:read/contactsEinen Kontakt nach E-Mail finden oder anlegen, optional mit einem vorhandenen oder neuen Unternehmen.
crm:writeAnfrage POST /companies
| Field | Type | Description | |
|---|---|---|---|
| name | string | erforderlich | Unternehmensname |
| domain | string | optional | Unternehmensdomain zur Ergänzung. Sie wird nie zum Abgleich mit einem bestehenden Unternehmen verwendet |
Anfrage POST /contacts
| Field | Type | Description | |
|---|---|---|---|
| name | string | bedingt | Vollständiger Name. Dieses Feld oder firstName und lastName verwenden |
| firstName | string | bedingt | Vorname, wenn name nicht angegeben ist |
| lastName | string | optional | Nachname bei Verwendung von firstName |
| string | erforderlich | E-Mail für die Suche ohne Beachtung der Groß- und Kleinschreibung | |
| title | string | optional | Berufsbezeichnung |
| companyId | UUID | optional | Vorhandenes Unternehmen im authentifizierten Arbeitsbereich |
| companyName | string | optional | Unternehmen, das ohne companyId gefunden oder angelegt wird |
| companyDomain | string | optional | Optionale Ergänzungsdomain für companyName. Kein Abgleichsschlüssel für Unternehmen |
Unternehmensantwort
| Field | Type | Description |
|---|---|---|
| company.id | UUID | Unternehmens-ID |
| company.name | string | Unternehmensname |
| company.domain | string | null | Normalisierte Unternehmensdomain |
| created | boolean | Ob diese Anfrage das Unternehmen angelegt hat |
Kontaktantwort
| Field | Type | Description |
|---|---|---|
| contact.id | UUID | Kontakt-ID |
| contact.firstName | string | Vorname |
| contact.lastName | string | Nachname |
| contact.email | string | E-Mail-Adresse |
| contact.title | string | null | Berufsbezeichnung |
| contact.companyId | UUID | null | ID des zugehörigen Unternehmens |
| contact.companyName | string | null | Name des zugehörigen Unternehmens |
| created | boolean | Ob diese Anfrage den Kontakt angelegt hat |
| company | object | null | Aufgelöstes Unternehmen, falls vorhanden |
| companyCreated | boolean | Ob diese Anfrage das Unternehmen angelegt hat |
Webhooks
Echtzeit-Ereignisse über REST Hooks abonnieren. Wenn ein Ereignis eintritt, sendet HummingDeck eine POST-Anfrage an Ihre registrierte HTTPS-URL mit dem Ereignis-Payload. Fehlgeschlagene Zustellungen werden bis zu 3 Mal wiederholt (nach 1 s, 5 s und 30 s). Webhook-Abonnements werden von der Zapier-Integration verwaltet und stehen Workspace-API-Tokens nicht zur Verfügung.
/hooksEin Ereignis abonnieren. Erfordert eine HTTPS-Ziel-URL und einen Ereignistyp. Gibt eine Abonnement-ID zurück.
Nur Zapier OAuth
/hooks/{id}Ein Ereignis anhand der Abonnement-ID abbestellen.
Nur Zapier OAuth
Ereignistypen
| Event | Description |
|---|---|
| view.created | Eine echte Person hat ein freigegebenes Dokument aufgerufen. Bot-Verkehr (E-Mail-Sicherheitsscanner, Crawler) wird automatisch gefiltert. |
| decision.made | Ein Interessent hat auf ein Angebot reagiert: angenommen, abgelehnt oder Änderungen angefordert. |
| email_captured | Ein Besucher hat seine E-Mail-Adresse eingegeben, um auf gesperrte Inhalte zuzugreifen. |
Beispiel-Payloads
view.created
{
"event": "view.created",
"data": {
"id": "view_abc123",
"deck_id": "deck_xyz789",
"deck_title": "Q4 Enterprise Proposal",
"viewer_email": "sarah@acme.com",
"viewer_name": "Sarah Wood",
"viewer_company": "Acme Corp",
"location": "San Francisco, CA",
"device": "Desktop",
"browser": "Chrome",
"pages_viewed": 8,
"total_pages": 12,
"duration_seconds": 272,
"completion_percent": 67,
"created_at": "2026-03-29T14:32:00Z"
}
}decision.made
{
"event": "decision.made",
"data": {
"share_slug": "proposal-2024",
"decision": "accepted",
"deck_title": "Q4 Enterprise Proposal",
"viewer_email": "sarah@acme.com",
"viewer_name": "Sarah Wood",
"decision_note": "Approved pending final review",
"decided_at": "2026-03-29T15:30:00Z"
}
}email_captured
{
"event": "email_captured",
"data": {
"email": "prospect@company.com",
"share_slug": "proposal-2024",
"deck_title": "Q4 Enterprise Proposal",
"view_id": "view_xyz789",
"captured_at": "2026-03-29T14:35:00Z"
}
}Aufrufe & Ereignisse
Polling-Endpunkte zum Abrufen aktueller Engagement-Daten. Diese geben dieselben Daten zurück, die Webhooks in Echtzeit liefern. Nutzen Sie sie zum Nachfüllen, Testen oder als Fallback.
/viewsDie letzten 100 Dokumentaufrufe auflisten. Bot-Sitzungen sind ausgeschlossen.
analytics:read/decisionsAktuelle Angebotsentscheidungen auflisten (angenommen, abgelehnt, Änderungen angefordert).
analytics:read/emailsAktuelle E-Mail-Erfassungen aus gesperrten Inhalten auflisten.
analytics:readFehlerbehandlung
Jeder Fehler gibt ein JSON-Objekt mit einem error-Feld zurück, das beschreibt, was schiefgelaufen ist. Die meisten Antworten enthalten zusätzlich ein code-Feld für die programmatische Behandlung, etwa PLAN_LIMIT_REACHED, FEATURE_NOT_AVAILABLE, ROOM_NOT_ACTIVE, TAB_NOT_EMPTY, INVALID_FORMAT oder FILE_TOO_LARGE. Die HTTP-Statuscodes folgen den üblichen Konventionen.
| Status | Meaning |
|---|---|
| 400 | Ungültige Anfrage: fehlende oder ungültige Parameter |
| 401 | Nicht autorisiert: ungültiges oder abgelaufenes Bearer-Token |
| 403 | Verboten: Der Berechtigung fehlt ein erforderlicher Scope, ein Tariflimit ist erreicht, der Tarif enthält eine benötigte Option nicht, oder dieser Anmeldedatentyp ist an diesem Endpunkt nicht zulässig |
| 404 | Nicht gefunden: Ressource existiert nicht oder gehört nicht Ihrem Team |
| 409 | Konflikt: Die angegebenen Kennungen stimmen nicht überein, der Raum ist archiviert, oder die Tabs des Raums lassen die Änderung nicht zu |
| 413 | Nutzlast zu groß: Der Anfrageinhalt oder die hochgeladene Datei überschreitet das Limit dieses Endpunkts |
| 429 | Zu viele Anfragen: Der Schlüssel oder die Client-IP hat das aktuelle Rate-Limit überschritten; warten Sie die in Retry-After angegebene Zeit |
| 500 | Serverfehler: Anfrage erneut senden |
Rate-Limits
Manuelle Workspace-Schlüssel und Zapier-OAuth-Verbindungen werden pro Schlüssel beziehungsweise Verbindung begrenzt: 600 Lesezugriffe in 5 Minuten, 120 Schreibzugriffe pro Minute, 60 Aufrufe von /room-views pro Minute und 20 Uploads pro Stunde. Workspace-weit gelten über alle Zugangsdaten hinweg 1.200 Lesezugriffe in 5 Minuten, 240 Schreibzugriffe pro Minute, 120 Aufrufe von /room-views pro Minute und 40 Uploads pro Stunde. Fehlgeschlagene Bearer-Authentifizierungen und ungültige OAuth-Client-Authentifizierungen sind jeweils pro Client-IP auf 60 Versuche in 5 Minuten begrenzt. Maximal 50 aktive Webhook-Abonnements pro Team.
Diese API wird derzeit von unserer Zapier-Integration verwendet. Weitere Integrationsplattformen können in Zukunft unterstützt werden.