Costruito per la fiduciaCrittografia TLSConforme al GDPRGoogle CloudPagamenti sicuriPanoramica sulla sicurezza

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.

URL basehttps://app.hummingdeck.com/api/v1
OpenAPI Spec

Autenticazione

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.

GET/meRestituisce nome, e-mail e informazioni sul team dell'utente corrente.

Documenti

Carica, cerca e gestisci documenti (PDF, presentazioni, proposte e altri file).

POST/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.
GET/decks?title={query}Cerca documenti per titolo. Non distingue maiuscole e minuscole; restituisce fino a 20 risultati.

Campi della risposta

FieldTypeDescription
idstringID del documento
titlestringTitolo del documento
fileTypestringTipo di file (pdf, pptx, docx, html)
pageCountnumberNumero di pagine
thumbnailUrlstringURL dell'immagine in miniatura
createdAtstringTimestamp ISO 8601

Link di condivisione

Crea link tracciabili ai documenti. Un link personale può trovare o creare il contatto e l’azienda nella stessa richiesta.

POST/sharesCrea un link personale o anonimo. I link personali possono trovare o creare automaticamente i record dell’account.

Campi della richiesta

FieldTypeDescription
deckIdstringobbligatorioID del documento da condividere
recipientNamestringfacoltativoNome del destinatario per un link personale
recipientEmailstringfacoltativoE-mail del destinatario per un link personale
contactIdUUIDfacoltativoContatto esistente nello spazio di lavoro autenticato
companyIdUUIDfacoltativoAzienda esistente. Non può essere usato con companyName
companyNamestringfacoltativoAzienda da trovare per nome o da creare
companyDomainstringfacoltativoDominio salvato per l’arricchimento quando viene fornito companyName. Non seleziona mai un’azienda
typestringfacoltativoIl valore predefinito è personal con campi destinatario o account, altrimenti anonymous

Crea insieme il link e i record dell’account

Invia i dati del destinatario e dell’azienda direttamente a /shares. HummingDeck trova i record corrispondenti, crea quelli mancanti, li collega al link e indica cosa è stato creato. Imposta esplicitamente type su anonymous per evitare la creazione dei record dell’account.

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

Campi della risposta

FieldTypeDescription
idstringID del link di condivisione
slugstringSlug del link usato nell’URL
shareUrlstringURL tracciabile completo
typestring"personal" o "anonymous"
recipientNamestringNome del destinatario se personale
recipientEmailstringE-mail del destinatario se personale
contactobject | nullContatto collegato al link personale
contactCreatedbooleantrue se questa richiesta ha creato il contatto
companyobject | nullAzienda collegata al link personale
companyCreatedbooleantrue se questa richiesta ha creato l’azienda
createdAtstringTimestamp 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.

GET/rooms/{roomId}Restituisce metadati, schede, elementi e il numero di link attivi e totali della stanza.
POST/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.

GET/companies?name={name}&domain={domain}Cerca aziende per nome esatto e dominio facoltativo.
POST/companiesTrova un’azienda per nome senza distinzione tra maiuscole e minuscole o la crea. Un dominio esplicito arricchisce soltanto il record.
GET/contacts?email={query}Cerca contatti per indirizzo e-mail e restituisce le corrispondenze con l’azienda associata.
POST/contactsTrova o crea un contatto per e-mail e lo collega facoltativamente a un’azienda.

Richiesta POST /companies

FieldTypeDescription
namestringobbligatorioNome dell’azienda
domainstringfacoltativoDominio usato per arricchire l’azienda. Non viene mai usato per trovare un’azienda esistente

Richiesta POST /contacts

FieldTypeDescription
namestringcondizionaleNome completo. Obbligatorio se firstName non è presente
firstNamestringcondizionaleNome. Obbligatorio se name non è presente
lastNamestringfacoltativoCognome
emailstringobbligatorioIndirizzo e-mail usato per una corrispondenza univoca
titlestringfacoltativoTitolo professionale
companyIdUUIDfacoltativoAzienda esistente nello spazio di lavoro autenticato
companyNamestringfacoltativoNome dell’azienda da trovare o creare
companyDomainstringfacoltativoDominio facoltativo di arricchimento usato con companyName. Non è una chiave di corrispondenza

Risposta dell’azienda

FieldTypeDescription
company.idUUIDID dell’azienda
company.namestringNome dell’azienda
company.domainstring | nullDominio aziendale normalizzato
createdbooleantrue se la richiesta POST ha creato l’azienda

Risposta del contatto

FieldTypeDescription
contact.idUUIDID del contatto
contact.firstNamestringNome
contact.lastNamestringCognome
contact.emailstringIndirizzo e-mail normalizzato
contact.titlestring | nullTitolo professionale
contact.companyIdUUID | nullID dell’azienda associata
contact.companyNamestring | nullNome dell’azienda associata
createdbooleantrue se la richiesta POST ha creato il contatto
companyobject | nullAzienda risolta, se disponibile
companyCreatedbooleantrue 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.

POST/hooksIscriversi a un evento. Richiede un URL HTTPS di destinazione e un tipo di evento. Restituisce un ID abbonamento.
DELETE/hooks/{id}Annullare l'iscrizione a un evento tramite ID abbonamento.

Tipi di eventi

EventDescription
view.createdUna persona reale ha visualizzato un documento condiviso. Il traffico bot (scanner di sicurezza e-mail, crawler) viene filtrato automaticamente.
decision.madeUn prospect ha risposto a una proposta: accettata, rifiutata o con modifiche richieste.
email_capturedUn 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.

GET/viewsElencare le 100 visualizzazioni di documenti più recenti. Le sessioni bot sono escluse.
GET/decisionsElencare le decisioni recenti sulle proposte (accettate, rifiutate, modifiche richieste).
GET/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.

StatusMeaning
400Richiesta non valida: parametri mancanti o non validi
401Non autorizzato: Bearer token non valido o scaduto
403Vietato: limite del piano raggiunto, oppure questo tipo di credenziale non è consentito su questo endpoint
404Non trovato: la risorsa non esiste o non appartiene al tuo team
409Conflitto: gli identificatori di contatto, e-mail e azienda forniti non corrispondono
500Errore 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.