Riferimento API
HummingDeck espone un'API REST per i partner di integrazione e le piattaforme di automazione. Gli endpoint si autenticano con un Bearer token e restituiscono risposte JSON.
https://app.hummingdeck.com/api/v1Autenticazione
Ogni richiesta API porta un Bearer token nell'header Authorization. Sono accettati due tipi di credenziale, che si comportano in modo diverso.
Metodo
Bearer token
Formato dell'intestazione
Authorization: Bearer {access_token}
Tipi di credenziale
Token API dello spazio di lavoro
Authorization: Bearer hd_api_...
Emesso dal proprietario dello spazio di lavoro da Impostazioni dello spazio, Integrazioni, HummingDeck API. Disponibile per spazi selezionati durante un pilota privato. Il token viene mostrato una sola volta alla creazione e non può essere recuperato in seguito. Scade un anno dopo la creazione ed è legato in modo permanente allo spazio per cui è stato emesso, quindi una richiesta non può scegliere né cambiare il proprio spazio di lavoro.
Creare un token quando ne esiste già uno lo sostituisce, e quello precedente smette subito di funzionare. Il proprietario può disattivare un token in qualsiasi momento. Per quel token è definitivo: creane uno nuovo invece di aspettarti di ripristinarlo.
Gli endpoint di sottoscrizione ai webhook non sono disponibili per i token API dello spazio di lavoro.
Zapier OAuth
Authorization: Bearer {access_token}
Emesso tramite il flusso di autorizzazione OAuth quando uno spazio di lavoro collega l'integrazione Zapier. I token di accesso scadono dopo 30 giorni. Usa il token di aggiornamento, valido 90 giorni, per ottenerne uno nuovo senza riautorizzare.
È l'unica credenziale che può creare o eliminare sottoscrizioni ai webhook.
Quando una richiesta restituisce 401
Una richiesta viene rifiutata con 401 quando il token è sconosciuto o malformato, è scaduto, è stato disattivato, appartiene a uno spazio di lavoro il cui accesso API è stato disattivato, oppure è stato emesso da qualcuno che non è più proprietario di quello spazio.
Testa la connessione
Verifica che il tuo token sia valido e consulta il profilo dell'utente autenticato.
/meRestituisce nome, e-mail e informazioni sul team dell'utente corrente.Documenti
Carica, cerca e gestisci documenti (PDF, presentazioni, proposte e altri file).
/decksCaricare un nuovo documento. Invia come multipart/form-data con un campo file (PDF, PPTX, DOCX, XLSX, HTML) e un campo title. Il limite di caricamento tramite API è di 30 MB./decks?title={query}Cerca documenti per titolo. Non distingue maiuscole e minuscole; restituisce fino a 20 risultati.Campi della risposta
| Field | Type | Description |
|---|---|---|
| id | string | ID del documento |
| title | string | Titolo del documento |
| fileType | string | Tipo di file (pdf, pptx, docx, html) |
| pageCount | number | Numero di pagine |
| thumbnailUrl | string | URL dell'immagine in miniatura |
| createdAt | string | Timestamp ISO 8601 |
Stanze
Recupera la struttura di una stanza e crea link tracciabili per il pubblico. Disponibile solo con token API dell’area di lavoro; le credenziali OAuth di Zapier vengono rifiutate.
/rooms/{roomId}Restituisce metadati, schede, elementi e il numero di link attivi e totali della stanza./rooms/{roomId}/linksCrea un link aperto con attribuzione per una stanza attiva.Creare un link aperto per la stanza
Fornisci almeno uno dei campi recipientName, recipientEmail, contactId, companyId o companyName. Nome ed e-mail trovano o creano un contatto; i campi dell’azienda trovano o creano un’azienda. Chiunque disponga dell’URL può aprire un link aperto.
{
"accessMode": "open",
"recipientName": "Ada Lovelace",
"recipientEmail": "ada@analytical.example",
"companyName": "Analytical Engines"
}Aziende e contatti
Trova i record dell’account esistenti o creane di nuovi con una corrispondenza deterministica. I nomi delle aziende e le e-mail dei contatti vengono confrontati senza distinzione tra maiuscole e minuscole.
/companies?name={name}&domain={domain}Cerca aziende per nome esatto e dominio facoltativo./companiesTrova un’azienda per nome senza distinzione tra maiuscole e minuscole o la crea. Un dominio esplicito arricchisce soltanto il record./contacts?email={query}Cerca contatti per indirizzo e-mail e restituisce le corrispondenze con l’azienda associata./contactsTrova o crea un contatto per e-mail e lo collega facoltativamente a un’azienda.Richiesta POST /companies
| Field | Type | Description | |
|---|---|---|---|
| name | string | obbligatorio | Nome dell’azienda |
| domain | string | facoltativo | Dominio usato per arricchire l’azienda. Non viene mai usato per trovare un’azienda esistente |
Richiesta POST /contacts
| Field | Type | Description | |
|---|---|---|---|
| name | string | condizionale | Nome completo. Obbligatorio se firstName non è presente |
| firstName | string | condizionale | Nome. Obbligatorio se name non è presente |
| lastName | string | facoltativo | Cognome |
| string | obbligatorio | Indirizzo e-mail usato per una corrispondenza univoca | |
| title | string | facoltativo | Titolo professionale |
| companyId | UUID | facoltativo | Azienda esistente nello spazio di lavoro autenticato |
| companyName | string | facoltativo | Nome dell’azienda da trovare o creare |
| companyDomain | string | facoltativo | Dominio facoltativo di arricchimento usato con companyName. Non è una chiave di corrispondenza |
Risposta dell’azienda
| Field | Type | Description |
|---|---|---|
| company.id | UUID | ID dell’azienda |
| company.name | string | Nome dell’azienda |
| company.domain | string | null | Dominio aziendale normalizzato |
| created | boolean | true se la richiesta POST ha creato l’azienda |
Risposta del contatto
| Field | Type | Description |
|---|---|---|
| contact.id | UUID | ID del contatto |
| contact.firstName | string | Nome |
| contact.lastName | string | Cognome |
| contact.email | string | Indirizzo e-mail normalizzato |
| contact.title | string | null | Titolo professionale |
| contact.companyId | UUID | null | ID dell’azienda associata |
| contact.companyName | string | null | Nome dell’azienda associata |
| created | boolean | true se la richiesta POST ha creato il contatto |
| company | object | null | Azienda risolta, se disponibile |
| companyCreated | boolean | true se questa richiesta ha creato l’azienda |
Webhook
Iscriviti agli eventi in tempo reale tramite REST Hooks. Quando si verifica un evento, HummingDeck invia una richiesta POST all'URL HTTPS registrato con il payload dell'evento. Le consegne fallite vengono ritentate fino a 3 volte (a intervalli di 1 s, 5 s e 30 s). Le sottoscrizioni ai webhook sono gestite dall'integrazione Zapier e non sono disponibili per i token API dello spazio di lavoro.
/hooksIscriversi a un evento. Richiede un URL HTTPS di destinazione e un tipo di evento. Restituisce un ID abbonamento./hooks/{id}Annullare l'iscrizione a un evento tramite ID abbonamento.Tipi di eventi
| Event | Description |
|---|---|
| view.created | Una persona reale ha visualizzato un documento condiviso. Il traffico bot (scanner di sicurezza e-mail, crawler) viene filtrato automaticamente. |
| decision.made | Un prospect ha risposto a una proposta: accettata, rifiutata o con modifiche richieste. |
| email_captured | Un visitatore ha inserito il proprio indirizzo e-mail per accedere a contenuti protetti. |
Esempi di payload
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"
}
}Visualizzazioni ed eventi
Endpoint di polling per recuperare i dati di coinvolgimento recenti. Restituiscono gli stessi dati che i webhook consegnano in tempo reale. Usali per il backfilling, i test o come alternativa.
/viewsElencare le 100 visualizzazioni di documenti più recenti. Le sessioni bot sono escluse./decisionsElencare le decisioni recenti sulle proposte (accettate, rifiutate, modifiche richieste)./emailsElencare le recenti acquisizioni di e-mail da contenuti protetti.Gestione degli errori
Ogni errore restituisce un oggetto JSON con un campo error che descrive cosa non ha funzionato. Alcune risposte includono anche un campo code per la gestione programmatica, come PLAN_LIMIT_REACHED, INVALID_FORMAT o FILE_TOO_LARGE. I codici di stato HTTP seguono le convenzioni consuete.
| Status | Meaning |
|---|---|
| 400 | Richiesta non valida: parametri mancanti o non validi |
| 401 | Non autorizzato: Bearer token non valido o scaduto |
| 403 | Vietato: limite del piano raggiunto, oppure questo tipo di credenziale non è consentito su questo endpoint |
| 404 | Non trovato: la risorsa non esiste o non appartiene al tuo team |
| 409 | Conflitto: gli identificatori di contatto, e-mail e azienda forniti non corrispondono |
| 500 | Errore del server: riprova la richiesta |
Limiti di frequenza
Massimo 50 abbonamenti webhook attivi per team. Le richieste API non sono soggette a limiti di frequenza, ma un uso eccessivo potrebbe essere rallentato.
Questa API è attualmente utilizzata dalla nostra integrazione Zapier. Ulteriori piattaforme di integrazione potrebbero essere supportate in futuro.