Costruito per la fiduciaCrittografia TLSConforme al GDPRGoogle CloudPagamenti sicuriPanoramica sulla sicurezza
G2

Valutato 5,0 su 5 su G2

Leggi le recensioni su G2
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

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

L’accesso all’API REST è disponibile su richiesta con il piano Business e viene abilitato per ogni spazio di lavoro dopo una verifica. I proprietari e gli amministratori creano quindi chiavi API con nomi distinti in Impostazioni dello spazio, Integrazioni, HummingDeck API. Seleziona solo le autorizzazioni necessarie a ogni integrazione. La chiave viene mostrata una sola volta alla creazione e non può essere recuperata in seguito. Scade dopo un anno e resta legata al proprio spazio di lavoro, che una richiesta non può scegliere né cambiare.

Uno spazio di lavoro può avere fino a 20 chiavi API attive. La sostituzione di una chiave invalida immediatamente solo il suo segreto precedente; le altre chiavi continuano a funzionare. Proprietari e amministratori possono disattivare una chiave o tutte le chiavi in qualsiasi momento. La revoca di quel segreto è permanente.

Una chiave API dello spazio di lavoro può chiamare solo le operazioni consentite dalle autorizzazioni selezionate. Gli endpoint di sottoscrizione ai webhook non sono disponibili per queste chiavi.

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.

Autorizzazioni

Scegli almeno un’autorizzazione. Le autorizzazioni di scrittura includono anche il corrispondente accesso in lettura. Puoi modificarle quando sostituisci la chiave.

rooms:read

Visualizza stanze, schede, elementi, link ed etichette.

rooms:write

Crea e gestisci stanze, schede, elementi, link ed etichette.

plan:read

Visualizza fasi e attività del piano d’azione reciproco.

plan:write

Crea e gestisci fasi e attività del piano d’azione reciproco.

analytics:read

Visualizza analisi del coinvolgimento, attività ed email acquisite.

crm:read

Cerca aziende e contatti dello spazio di lavoro.

crm:write

Crea o aggiorna aziende, contatti e destinatari dei link.

documents:read

Cerca documenti e leggine i metadati.

documents:write

Carica documenti e collega documenti o URL alle stanze.

Le etichette dei permessi nelle righe degli endpoint si applicano alle chiavi API dello spazio di lavoro. I permessi richiesti valgono sempre, quelli aggiuntivi servono insieme e quelli condizionali solo quando la richiesta usa i relativi filtri o campi. GET /me non richiede permessi. Zapier OAuth usa il proprio accesso di integrazione fisso.

Quando una richiesta restituisce 401

Una richiesta restituisce 401 se la chiave è sconosciuta o malformata, è scaduta, è stata disattivata, appartiene a uno spazio di lavoro con accesso API disattivato oppure è stata emessa da una persona che non è più proprietaria o amministratrice di quello spazio.

Testa la connessione

Verifica che il tuo token sia valido e consulta il profilo dell'utente autenticato.

GET/me

Restituisce nome, e-mail e informazioni sul team dell'utente corrente.

Nessun permesso della chiave API richiesto

Documenti

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

POST/decks

Caricare un nuovo documento. Invia come multipart/form-data con un campo file (PDF, PPTX, DOCX, XLSX, XLS, HTML) e un campo title. Il limite di caricamento tramite API è di 30 MB. L’elaborazione prosegue dopo il caricamento; la risposta include processingStatus.

Richiesto:documents:write
GET/decks

Elenca fino a 20 documenti, dal più recente. Usa il parametro di query facoltativo title per filtrare una parte del titolo senza distinzione tra maiuscole e minuscole.

Richiesto:documents:read

GET /decks Campi della risposta

FieldTypeDescription
idstringID del documento
titlestringTitolo del documento
fileTypestringTipo MIME del documento
pageCountinteger | nullNumero di pagine
thumbnailUrlstring | nullURL dell'immagine in miniatura
processingStatusstringpending, processing, completed o failed. Un documento può entrare in una stanza mentre è in elaborazione; invia un link al documento quando risulta completed.
processingErrorCodestring | nullMotivo per cui l’elaborazione non è riuscita, se è successo
createdAtstringTimestamp ISO 8601

POST /decks Campi della risposta

FieldTypeDescription
idstringID del documento
titlestringTitolo del documento
fileTypestringTipo MIME del documento
processingStatusstringpending, processing, completed o failed. Un documento può entrare in una stanza mentre è in elaborazione; invia un link al documento quando risulta completed.
processingErrorCodestring | nullMotivo per cui l’elaborazione non è riuscita, se è successo

Link di condivisione

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

POST/shares

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

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

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

Crea Deal Room con i relativi documenti e il link per il pubblico in una sola chiamata, trova le stanze, modificane le impostazioni, archiviale e ripristinale, e organizzane schede ed elementi. Disponibile solo con token API dell’area di lavoro; le credenziali OAuth di Zapier vengono rifiutate.

GET/rooms

Elenca le stanze, dalla più recente. Filtra con search, status (active, archived o all) e companyId. Ogni pagina contiene 25 stanze (fino a 100 con limit); passa il nextCursor di una pagina come cursor per ottenere la successiva.

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

Crea una stanza con i suoi documenti e il primo link per il pubblico in una sola chiamata.

Richiesto:rooms:write
Condizionale: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}

Restituisce le impostazioni della stanza, le schede e gli elementi nell’ordine di visualizzazione e il numero di link.

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

Modifica nome, messaggio di benvenuto, referente, azienda o contatto.

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

Archivia la stanza. I suoi link smettono di funzionare.

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

Ripristina una stanza archiviata. I suoi link tornano a funzionare.

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

Aggiunge una scheda, in una posizione precisa o in fondo.

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

Rinomina una scheda.

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

Riordina tutte le schede.

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

Rimuove una scheda che non mostra elementi.

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

Aggiunge a una scheda un documento, un URL, un contenuto incorporato o un separatore di sezione.

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

Sposta un elemento in fondo a un’altra scheda.

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

Riordina gli elementi di una scheda.

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

Toglie un elemento dalla stanza. Resta nella tua libreria.

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

Elenca i link per il pubblico della room, dal più recente, con gli invitati attivi di ogni link riservato.

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

Crea un link aperto con attribuzione per una stanza attiva.

Richiesto:rooms:write
Richiesto anche:crm:write
PATCH/rooms/{roomId}/links/{linkId}

Attiva o disattiva un link, imposta o cancella la scadenza, oppure sostituisce la lista di accesso.

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

Restituisce il piano d'azione della stanza: impostazioni, fasi, attività (comprese quelle interne), dipendenze e avanzamento.

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

Modifica le impostazioni del piano, compreso se chi apre la room può spuntare le proprie attività.

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

Aggiunge una milestone. Senza color le fasi alternano turchese, pesca e blu nell'ordine.

Richiesto:plan:write
PATCH/rooms/{roomId}/action-plan/phases/{phaseId}

Rinomina una fase, la sposta, ne cambia la data o ne imposta il colore. Inviare color null ripristina la rotazione.

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

Elimina una fase. mode è obbligatorio: delete_tasks o move_to_unphased, così nessuna attività sparisce per errore.

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

Aggiunge un'attività. assignee è null, un side da solo per l'azienda che se ne occupa, o un side con email per una persona specifica.

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

Aggiorna un'attività. Omettere assignee lascia invariata la responsabilità; inviare null la rimuove.

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

Elimina un'attività. Le sue sotto-attività spariscono con lei.

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

Completa o riapre un'attività per conto dello spazio di lavoro. Un'attività con una dipendenza non conclusa restituisce 409 TASK_BLOCKED.

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

Visite alla stanza, visitatori unici, tempo medio, documenti aperti sul totale e completamento medio. Bot esclusi.

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

Che cosa è successo nella room, dal più recente. Le voci di discussione indicano chi ha scritto e non contengono mai il messaggio. Restringi con since.

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

Indirizzi raccolti dalla room. source è verify se la persona lo ha confermato con un link monouso, ask se lo ha solo digitato.

Richiesto:analytics:read
GET/room-views

Ingressi nelle room di tutto lo spazio di lavoro, dal più recente. Non c'è altra fonte per sapere che qualcuno è entrato; /views copre solo le visualizzazioni dei documenti.

Richiesto:analytics:read
GET/room-labels

Elenca le etichette delle room dello spazio di lavoro con quante room usano ciascuna. Qui trovi gli ID prima di etichettare una room.

Richiesto:rooms:read
POST/room-labels

Crea un'etichetta. I nomi sono unici per spazio di lavoro, senza distinzione tra maiuscole e minuscole; color è un valore esadecimale #RRGGBB.

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

Rinomina un'etichetta, ne cambia il colore o ne modifica la descrizione.

Richiesto:rooms:write
DELETE/room-labels/{labelId}

Elimina un'etichetta e le sue assegnazioni. Le room che la portavano restano invariate; la risposta indica quante l'hanno persa.

Richiesto:rooms:write

Creare una stanza con una sola chiamata

Carica ogni file con POST /decks, poi crea la stanza per l’azienda del destinatario con un link riservato alle persone che devono vederla. Azienda, contatti, stanza, documenti e link vengono creati insieme: se la chiamata viene rifiutata, non viene creato nulla. I documenti possono entrare nella stanza anche mentre sono ancora in elaborazione. Gli elementi della stanza riportano processingStatus, quindi invia il link quando ogni documento risulta completed.

{
  "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 può essere open (chiunque abbia l’URL), verify-any (i visitatori confermano il proprio indirizzo e-mail con un link monouso) o verified-allowlist (solo gli indirizzi in allowedEmails e chiunque abbia un indirizzo nei domini in allowedDomains). L’API non aggiunge nessuno di sua iniziativa a un link riservato, quindi includi il tuo indirizzo se vuoi vedere l’anteprima della stanza. Un’opzione non inclusa nel tuo piano restituisce 403 FEATURE_NOT_AVAILABLE e un campo sconosciuto restituisce 400, così una stanza non si apre mai a un pubblico diverso da quello richiesto.

Organizzare schede ed elementi

Parti dallo stato attuale della stanza: leggendo una stanza ottieni schede ed elementi nell’ordine di visualizzazione, e ogni elemento riporta la sua scheda e la sua posizione al suo interno, contando da 0. Aggiungi schede ed elementi in una posizione, sposta elementi tra le schede e invia il nuovo ordine completo di una scheda. Un ordine deve elencare ogni elemento della scheda esattamente una volta, quindi rileggi la stanza se nel frattempo è intervenuta un’altra modifica. Una scheda si può rimuovere quando non mostra più elementi.

{
  "type": "section",
  "label": "Commercials",
  "tabId": "{tabId}",
  "position": 0
}

Fornitori di embed supportati

Gli embed accettano un link di condivisione o di incorporamento e lo normalizzano alla forma di incorporamento del fornitore. Qualsiasi cosa fuori da questo elenco restituisce 400 EMBED_PROVIDER_NOT_SUPPORTED.

FieldTypeDescription
VideoLoom, YouTube, Vimeo, Wistia, Vidyard
PianificazioneCalendly, Cal.com, SavvyCal, Google Calendar
ModuliTypeform, Tally, Google Forms, Jotform, Fillout
DesignFigma, Miro, Canva, Whimsical
Documenti e tabelleGoogle Docs, Google Sheets, Notion, Coda, Airtable
PresentazioniGoogle Slides, Pitch, Gamma, Guideflow, Flipsnack, Prezi
AudioSpotify, SoundCloud

Aggiungere un altro link per il pubblico

Ogni stanza ha già un link creato da POST /rooms; aggiungine altri per i destinatari che richiedono un'attribuzione o un accesso diverso. Indica almeno uno tra recipientName, recipientEmail, contactId, companyId o companyName. accessMode accetta gli stessi valori open, verify-any o verified-allowlist di primaryLink, con gli stessi campi (requireEmail, allowedEmails, allowedDomains, label, expiresAt, allowDownloads). Una chiamata rifiutata, anche per un limite del piano, non lascia alcun link, azienda o contatto.

{
  "companyName": "Analytical Engines",
  "accessMode": "verified-allowlist",
  "allowedEmails": [
    {
      "email": "cfo@analytical.example",
      "name": "Sam Rivera"
    }
  ]
}

Aggiornare un link

Quattro campi: isActive, expiresAt, allowedEmails, allowedDomains (gli ultimi due solo sui link verified-allowlist). accessMode e lo slug non cambiano mai; crea invece un nuovo link. Riattivare un link fa ricontrollare il limite di link attivi del piano.

{
  "isActive": false
}

Costruire il piano d'azione

Ogni room ha esattamente un piano, quindi si aggancia alla room senza un identificatore proprio. La maggior parte delle attività appartiene a un'azienda e non a una persona: se invii solo un side, il piano lo legge come l'azienda, che è ciò che serve quando non sai chi farà il lavoro dall'altra parte. Aggiungi un'email solo quando conosci la persona. Un'attività interna non compare mai nella room, quindi non può appartenere al destinatario.

{
  "title": "Sign the NDA",
  "assignee": {
    "side": "buyer"
  },
  "dueDate": "2026-10-02"
}

recipientCompletionEnabled sul piano decide se chi apre la room può spuntare le attività del proprio lato. Il valore predefinito è true ed è l'unico vincolo: l'API non chiede mai l'indirizzo di un destinatario per completare un'attività. Chi ha spuntato cosa viene registrato con la certezza consentita dalla modalità di accesso della room.

Etichettare le room

Le etichette valgono per tutto lo spazio di lavoro: creale una volta e riusale. Passa labelIds in POST /rooms per etichettare una room al momento della creazione, oppure in PATCH /rooms/{roomId} per sostituire l'intero insieme; un array vuoto rimuove tutte le etichette e omettere il campo le lascia invariate. Una room ne porta al massimo cinque, per struttura e non per impostazione. Leggendo una room vengono restituite le sue etichette.

{
  "labelIds": [
    "{labelId}"
  ]
}

Sapere che cosa è successo

Interroga /room-views per vedere gli ingressi in tutto lo spazio di lavoro, quindi leggi analytics, attività e indirizzi raccolti di una singola room. Per continuare, passa il nextCursor di una pagina come cursor; un cursore non emesso da questa API restituisce 400 invece di ripartire dall'inizio, così chi interroga non ripete il lavoro. Usa since per restringere l'intervallo dell'attività e cursor per scorrerne le pagine. /room-views è una finestra, non un archivio: senza since ottieni gli ultimi 30 giorni, mentre le richieste oltre 90 giorni indietro vengono rifiutate. La finestra applicata torna come since; inviala insieme a cursor per continuare a sfogliare lo stesso insieme.

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.

Richiesto:crm:read
POST/companies

Trova un’azienda per nome senza distinzione tra maiuscole e minuscole o la crea. Un dominio esplicito arricchisce soltanto il record.

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

Cerca contatti per indirizzo e-mail e restituisce le corrispondenze con l’azienda associata.

Richiesto:crm:read
POST/contacts

Trova o crea un contatto per e-mail e lo collega facoltativamente a un’azienda.

Richiesto:crm:write

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/hooks

Iscriversi a un evento. Richiede un URL HTTPS di destinazione e un tipo di evento. Restituisce un ID abbonamento.

Solo Zapier OAuth

DELETE/hooks/{id}

Annullare l'iscrizione a un evento tramite ID abbonamento.

Solo Zapier OAuth

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/views

Elencare le 100 visualizzazioni di documenti più recenti. Le sessioni bot sono escluse.

Richiesto:analytics:read
GET/decisions

Elencare le decisioni recenti sulle proposte (accettate, rifiutate, modifiche richieste).

Richiesto:analytics:read
GET/emails

Elencare le recenti acquisizioni di e-mail da contenuti protetti.

Richiesto:analytics:read

Gestione degli errori

Ogni errore restituisce un oggetto JSON con un campo error che descrive cosa non ha funzionato. La maggior parte delle risposte include anche un campo code per la gestione programmatica, come PLAN_LIMIT_REACHED, FEATURE_NOT_AVAILABLE, ROOM_NOT_ACTIVE, TAB_NOT_EMPTY, 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: alla credenziale manca uno scope richiesto, è stato raggiunto un limite del piano, il piano non include un’opzione necessaria, 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 forniti non corrispondono, la stanza è archiviata, oppure le schede della stanza non consentono la modifica
413Payload troppo grande: il corpo della richiesta o il file supera il limite di questo endpoint
429Troppe richieste: la chiave o l’IP client ha superato il limite corrente; riprova dopo l’intervallo Retry-After
500Errore del server: riprova la richiesta

Limiti di frequenza

Le chiavi manuali dello spazio e le connessioni OAuth Zapier hanno limiti per credenziale: 600 letture ogni 5 minuti, 120 scritture al minuto, 60 richieste a /room-views al minuto e 20 caricamenti all’ora. Considerando tutte le credenziali, ogni spazio è limitato a 1.200 letture ogni 5 minuti, 240 scritture al minuto, 120 richieste a /room-views al minuto e 40 caricamenti all’ora. Le autenticazioni Bearer non riuscite e le autenticazioni client OAuth non valide sono limitate separatamente a 60 tentativi ogni 5 minuti per IP client. Massimo 50 abbonamenti webhook attivi per team.

Questa API è attualmente utilizzata dalla nostra integrazione Zapier. Ulteriori piattaforme di integrazione potrebbero essere supportate in futuro.