Für Vertrauen gebautTLS-VerschlüsselungDSGVO-konformGoogle CloudSichere ZahlungenSicherheitsüberblick
G2

Auf G2 mit 5,0 von 5 bewertet

Bewertungen auf G2 lesen
The page-level analytics are the best part because they show real engagement instead of just basic opens.
Verified User in Computer Software
What I like most about the product is how easy it is to use, especially when it comes to listing all my links and embedding demos in one place for leads and prospects.
Jerome K.Founder
Responsiveness, configurability and development velocity.
Suman K.Co-Founder & CEO

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.

Basis-URLhttps://app.hummingdeck.com/api/v1
OpenAPI Spec

Authentifizierung

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:read

Räume, Tabs, Elemente, Links und Labels anzeigen.

rooms:write

Räume, Tabs, Elemente, Links und Labels erstellen und verwalten.

plan:read

Phasen und Aufgaben des Mutual Action Plans anzeigen.

plan:write

Phasen und Aufgaben des Mutual Action Plans erstellen und verwalten.

analytics:read

Interaktionsanalysen, Aktivitäten und erfasste E-Mails anzeigen.

crm:read

Unternehmen und Kontakte im Arbeitsbereich suchen.

crm:write

Unternehmen, Kontakte und Link-Zielgruppen erstellen oder aktualisieren.

documents:read

Dokumente suchen und ihre Metadaten anzeigen.

documents:write

Dokumente 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.

GET/me

Gibt 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).

POST/decks

Ein 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.

Erforderlich:documents:write
GET/decks

Listet bis zu 20 Dokumente auf, neueste zuerst. Verwenden Sie den optionalen Abfrageparameter title für eine teilweise Titelsuche ohne Beachtung der Groß- und Kleinschreibung.

Erforderlich:documents:read

GET /decks Antwortfelder

FieldTypeDescription
idstringDokument-ID
titlestringDokumenttitel
fileTypestringMIME-Typ des Dokuments
pageCountinteger | nullAnzahl der Seiten
thumbnailUrlstring | nullURL des Vorschaubildes
processingStatusstringpending, 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.
processingErrorCodestring | nullGrund, falls die Verarbeitung fehlgeschlagen ist
createdAtstringISO 8601-Zeitstempel

POST /decks Antwortfelder

FieldTypeDescription
idstringDokument-ID
titlestringDokumenttitel
fileTypestringMIME-Typ des Dokuments
processingStatusstringpending, 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.
processingErrorCodestring | nullGrund, falls die Verarbeitung fehlgeschlagen ist

Freigabelinks

Verfolgbare Dokumentlinks erstellen. Ein persönlicher Link kann Kontakt und Unternehmen in derselben Anfrage auflösen oder anlegen.

POST/shares

Einen persönlichen oder anonymen Link erstellen. Persönliche Links können Kontodatensätze automatisch finden oder anlegen.

Erforderlich:documents:write
Bedingt:crm:write(Required for a non-anonymous share when the request supplies contactId, companyId, companyName, recipientEmail, or recipientName.)

Anforderungsfelder

FieldTypeDescription
deckIdstringerforderlichID des zu teilenden Dokuments
recipientNamestringoptionalName des Empfängers (für persönliche Links)
recipientEmailstringoptionalE-Mail des Empfängers (für persönliche Links)
contactIdUUIDoptionalVorhandener Kontakt im authentifizierten Arbeitsbereich
companyIdUUIDoptionalVorhandenes Unternehmen. Nicht mit companyName kombinierbar
companyNamestringoptionalUnternehmen, das nach Namen gesucht oder angelegt wird
companyDomainstringoptionalDomain zur Ergänzung bei Angabe von companyName. Sie wird nie zur Auswahl eines Unternehmens verwendet
typestringoptionalStandardmäßig personal, wenn Empfänger- oder Kontofelder vorhanden sind, andernfalls anonymous

Link und Kontodatensätze gemeinsam anlegen

Empfänger- und Unternehmensdaten direkt an /shares senden. HummingDeck findet passende Datensätze, legt fehlende an, verknüpft sie mit dem Link und meldet, was erstellt wurde. type ausdrücklich auf anonymous setzen, um keine Kontodatensätze anzulegen.

{
  "deckId": "8f3d41de-2bb8-4d8e-80de-6cd2072ffab1",
  "recipientName": "Ada Lovelace",
  "recipientEmail": "ada@analytical.example",
  "companyName": "Analytical Engines",
  "companyDomain": "analytical.example"
}

Antwortfelder

FieldTypeDescription
idstringFreigabe-ID
slugstringFreigabe-Slug (wird in der URL verwendet)
shareUrlstringVollständige verfolgbare URL
typestring"personal" oder "anonymous"
recipientNamestringName des Empfängers (bei persönlichen Links)
recipientEmailstringE-Mail des Empfängers (bei persönlichen Links)
contactobject | nullAufgelöster, mit dem Link verknüpfter Kontakt
contactCreatedbooleanOb diese Anfrage den Kontakt angelegt hat
companyobject | nullAufgelöstes, mit dem Link verknüpftes Unternehmen
companyCreatedbooleanOb diese Anfrage das Unternehmen angelegt hat
createdAtstringISO 8601-Zeitstempel

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.

GET/rooms

Rä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.

Erforderlich:rooms:read
Bedingt:crm:read(Required when the companyId filter is present.)
POST/rooms

Einen Raum mit seinen Dokumenten und dem ersten Zielgruppenlink in einem Aufruf erstellen.

Erforderlich:rooms:write
Bedingt:documents: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.)
GET/rooms/{roomId}

Die Einstellungen des Raums, seine Tabs und Elemente in Anzeigereihenfolge sowie die Anzahl seiner Links abrufen.

Erforderlich:rooms:read
PATCH/rooms/{roomId}

Namen, Begrüßungsnachricht, Ansprechpartner, Unternehmen oder Kontakt ändern.

Erforderlich:rooms:write
Bedingt:crm:write(Required when companyId or contactId is present, including null to detach the association.)
POST/rooms/{roomId}/archive

Den Raum archivieren. Seine Links funktionieren nicht mehr.

Erforderlich:rooms:write
POST/rooms/{roomId}/restore

Einen archivierten Raum wiederherstellen. Seine Links funktionieren wieder.

Erforderlich:rooms:write
POST/rooms/{roomId}/tabs

Einen Tab hinzufügen, an einer bestimmten Position oder am Ende.

Erforderlich:rooms:write
PATCH/rooms/{roomId}/tabs/{tabId}

Einen Tab umbenennen.

Erforderlich:rooms:write
PUT/rooms/{roomId}/tabs/order

Alle Tabs neu anordnen.

Erforderlich:rooms:write
DELETE/rooms/{roomId}/tabs/{tabId}

Einen Tab entfernen, der keine Elemente anzeigt.

Erforderlich:rooms:write
POST/rooms/{roomId}/items

Einem Tab ein Dokument, eine URL, eine Einbettung oder einen Abschnittstrenner hinzufügen.

Erforderlich:rooms:write
Bedingt:documents:write(Required when type is document or url.)
POST/rooms/{roomId}/items/{itemId}/move

Ein Element ans Ende eines anderen Tabs verschieben.

Erforderlich:rooms:write
PUT/rooms/{roomId}/items/order

Die Elemente eines Tabs neu anordnen.

Erforderlich:rooms:write
DELETE/rooms/{roomId}/items/{itemId}

Ein Element aus dem Raum nehmen. Es bleibt in deiner Bibliothek.

Erforderlich:rooms:write
GET/rooms/{roomId}/links

Listet die Zielgruppen-Links des Raums, neueste zuerst, mit den aktiven Eingeladenen jedes eingeschränkten Links.

Erforderlich:rooms:read
POST/rooms/{roomId}/links

Einen zugeordneten offenen Link für einen aktiven Raum erstellen.

Erforderlich:rooms:write
Zusätzlich erforderlich:crm:write
PATCH/rooms/{roomId}/links/{linkId}

Schaltet einen Link ein oder aus, setzt oder löscht sein Ablaufdatum oder ersetzt seine Zugangsliste.

Erforderlich:rooms:write
Bedingt:crm:write(Required when allowedEmails or allowedDomains is present, including an empty array that clears the audience.)
GET/rooms/{roomId}/action-plan

Gibt den Aktionsplan des Raums zurück: Einstellungen, Phasen, Aufgaben (auch interne), Abhängigkeiten und Fortschritt.

Erforderlich:plan:read
PATCH/rooms/{roomId}/action-plan

Ändert die Einstellungen des Plans, auch ob die Personen im Raum ihre eigenen Aufgaben abhaken dürfen.

Erforderlich:plan:write
POST/rooms/{roomId}/action-plan/phases

Fügt einen Meilenstein hinzu. Ohne color wechseln die Phasen der Reihe nach zwischen Türkis, Pfirsich und Blau.

Erforderlich:plan:write
PATCH/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.

Erforderlich:plan:write
DELETE/rooms/{roomId}/action-plan/phases/{phaseId}

Entfernt eine Phase. mode ist erforderlich: delete_tasks oder move_to_unphased, damit Aufgaben nie versehentlich verschwinden.

Erforderlich:plan:write
POST/rooms/{roomId}/action-plan/tasks

Fü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.

Erforderlich:plan:write
PATCH/rooms/{roomId}/action-plan/tasks/{taskId}

Aktualisiert eine Aufgabe. Ohne assignee bleibt die Zuständigkeit unverändert; null entfernt sie.

Erforderlich:plan:write
DELETE/rooms/{roomId}/action-plan/tasks/{taskId}

Entfernt eine Aufgabe. Ihre Teilaufgaben verschwinden mit ihr.

Erforderlich:plan:write
POST/rooms/{roomId}/action-plan/tasks/{taskId}/status

Schließt eine Aufgabe im Namen des Workspace ab oder öffnet sie wieder. Eine Aufgabe hinter einer offenen Abhängigkeit liefert 409 TASK_BLOCKED.

Erforderlich:plan:write
GET/rooms/{roomId}/analytics

Raumbesuche, eindeutige Betrachter, Durchschnittszeit, geöffnete Dokumente von insgesamt und durchschnittlicher Abschluss. Ohne Bots.

Erforderlich:analytics:read
GET/rooms/{roomId}/activity

Was im Raum passiert ist, neueste zuerst. Diskussionseinträge nennen die absendende Person und enthalten nie die Nachricht. Mit since eingrenzen.

Erforderlich:analytics:read
GET/rooms/{roomId}/captured-emails

Adressen, 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.

Erforderlich:analytics:read
GET/room-views

Raumzutritte im gesamten Workspace, neueste zuerst. Für das Betreten eines Raums gibt es keine andere Quelle; /views deckt nur Dokumentaufrufe ab.

Erforderlich:analytics:read
GET/room-labels

Listet die Raum-Labels des Workspace samt Anzahl der Räume je Label. Hier findest du die Label-IDs, bevor du einen Raum kennzeichnest.

Erforderlich:rooms:read
POST/room-labels

Erstellt ein Label. Namen sind pro Workspace eindeutig, Groß- und Kleinschreibung spielt keine Rolle; color ist ein Hexwert im Format #RRGGBB.

Erforderlich:rooms:write
PATCH/room-labels/{labelId}

Benennt ein Label um, ändert seine Farbe oder bearbeitet seine Beschreibung.

Erforderlich:rooms:write
DELETE/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.

Erforderlich:rooms:write

Einen 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.

FieldTypeDescription
VideoLoom, YouTube, Vimeo, Wistia, Vidyard
TerminplanungCalendly, Cal.com, SavvyCal, Google Calendar
FormulareTypeform, Tally, Google Forms, Jotform, Fillout
DesignFigma, Miro, Canva, Whimsical
Dokumente und TabellenGoogle Docs, Google Sheets, Notion, Coda, Airtable
PräsentationenGoogle Slides, Pitch, Gamma, Guideflow, Flipsnack, Prezi
AudioSpotify, 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.

GET/companies?name={name}&domain={domain}

Bis zu 10 Unternehmen nach exaktem Namen, Domain oder beidem finden.

Erforderlich:crm:read
POST/companies

Ein 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.

Erforderlich:crm:write
GET/contacts?email={query}

Kontakte nach E-Mail-Adresse suchen. Gibt passende Kontakte mit ihrem zugehörigen Unternehmen zurück.

Erforderlich:crm:read
POST/contacts

Einen Kontakt nach E-Mail finden oder anlegen, optional mit einem vorhandenen oder neuen Unternehmen.

Erforderlich:crm:write

Anfrage POST /companies

FieldTypeDescription
namestringerforderlichUnternehmensname
domainstringoptionalUnternehmensdomain zur Ergänzung. Sie wird nie zum Abgleich mit einem bestehenden Unternehmen verwendet

Anfrage POST /contacts

FieldTypeDescription
namestringbedingtVollständiger Name. Dieses Feld oder firstName und lastName verwenden
firstNamestringbedingtVorname, wenn name nicht angegeben ist
lastNamestringoptionalNachname bei Verwendung von firstName
emailstringerforderlichE-Mail für die Suche ohne Beachtung der Groß- und Kleinschreibung
titlestringoptionalBerufsbezeichnung
companyIdUUIDoptionalVorhandenes Unternehmen im authentifizierten Arbeitsbereich
companyNamestringoptionalUnternehmen, das ohne companyId gefunden oder angelegt wird
companyDomainstringoptionalOptionale Ergänzungsdomain für companyName. Kein Abgleichsschlüssel für Unternehmen

Unternehmensantwort

FieldTypeDescription
company.idUUIDUnternehmens-ID
company.namestringUnternehmensname
company.domainstring | nullNormalisierte Unternehmensdomain
createdbooleanOb diese Anfrage das Unternehmen angelegt hat

Kontaktantwort

FieldTypeDescription
contact.idUUIDKontakt-ID
contact.firstNamestringVorname
contact.lastNamestringNachname
contact.emailstringE-Mail-Adresse
contact.titlestring | nullBerufsbezeichnung
contact.companyIdUUID | nullID des zugehörigen Unternehmens
contact.companyNamestring | nullName des zugehörigen Unternehmens
createdbooleanOb diese Anfrage den Kontakt angelegt hat
companyobject | nullAufgelöstes Unternehmen, falls vorhanden
companyCreatedbooleanOb 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.

POST/hooks

Ein Ereignis abonnieren. Erfordert eine HTTPS-Ziel-URL und einen Ereignistyp. Gibt eine Abonnement-ID zurück.

Nur Zapier OAuth

DELETE/hooks/{id}

Ein Ereignis anhand der Abonnement-ID abbestellen.

Nur Zapier OAuth

Ereignistypen

EventDescription
view.createdEine echte Person hat ein freigegebenes Dokument aufgerufen. Bot-Verkehr (E-Mail-Sicherheitsscanner, Crawler) wird automatisch gefiltert.
decision.madeEin Interessent hat auf ein Angebot reagiert: angenommen, abgelehnt oder Änderungen angefordert.
email_capturedEin 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.

GET/views

Die letzten 100 Dokumentaufrufe auflisten. Bot-Sitzungen sind ausgeschlossen.

Erforderlich:analytics:read
GET/decisions

Aktuelle Angebotsentscheidungen auflisten (angenommen, abgelehnt, Änderungen angefordert).

Erforderlich:analytics:read
GET/emails

Aktuelle E-Mail-Erfassungen aus gesperrten Inhalten auflisten.

Erforderlich:analytics:read

Fehlerbehandlung

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.

StatusMeaning
400Ungültige Anfrage: fehlende oder ungültige Parameter
401Nicht autorisiert: ungültiges oder abgelaufenes Bearer-Token
403Verboten: 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
404Nicht gefunden: Ressource existiert nicht oder gehört nicht Ihrem Team
409Konflikt: Die angegebenen Kennungen stimmen nicht überein, der Raum ist archiviert, oder die Tabs des Raums lassen die Änderung nicht zu
413Nutzlast zu groß: Der Anfrageinhalt oder die hochgeladene Datei überschreitet das Limit dieses Endpunkts
429Zu viele Anfragen: Der Schlüssel oder die Client-IP hat das aktuelle Rate-Limit überschritten; warten Sie die in Retry-After angegebene Zeit
500Serverfehler: 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.