Feito para inspirar confiançaCriptografia TLSEm conformidade com o GDPRGoogle CloudPagamentos segurosVisão geral de segurança

Referência da API

O HummingDeck expõe uma API REST para parceiros de integração e plataformas de automação. Os endpoints autenticam-se com um Bearer token e devolvem respostas JSON.

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

Autenticação

Cada pedido à API leva um Bearer token no cabeçalho Authorization. São aceites dois tipos de credencial, e comportam-se de forma diferente.

Método

Bearer token

Formato do cabeçalho

Authorization: Bearer {access_token}

Tipos de credencial

Token de API do espaço de trabalho

Authorization: Bearer hd_api_...

Emitido pelo proprietário do espaço de trabalho em Definições do espaço, Integrações, HummingDeck API. Disponível para espaços selecionados durante um piloto privado. O token é mostrado uma única vez ao ser criado e não pode ser recuperado depois. Expira um ano após a criação e fica ligado de forma permanente ao espaço para o qual foi emitido, pelo que um pedido não pode escolher nem alterar o seu espaço de trabalho.

Criar um token quando já existe um substitui-o, e o anterior deixa de funcionar de imediato. O proprietário pode desativar um token a qualquer momento. Para esse token é definitivo: crie um novo em vez de contar com a reposição.

Os endpoints de subscrição de webhooks não estão disponíveis para tokens de API do espaço de trabalho.

Zapier OAuth

Authorization: Bearer {access_token}

Emitido através do fluxo de autorização OAuth quando um espaço de trabalho liga a integração Zapier. Os tokens de acesso expiram ao fim de 30 dias. Use o token de atualização, válido 90 dias, para obter um novo sem voltar a autorizar.

É a única credencial que pode criar ou eliminar subscrições de webhooks.

Quando um pedido devolve 401

Um pedido é rejeitado com 401 quando o token é desconhecido ou inválido, expirou, foi desativado, pertence a um espaço de trabalho cujo acesso à API foi desligado, ou foi emitido por alguém que já não é proprietário desse espaço.

Teste sua conexão

Verifique se seu token é válido e consulte o perfil do usuário autenticado.

GET/meRetorna o nome, o e-mail e as informações de equipe do usuário atual.

Documentos

Envie, pesquise e gerencie documentos (PDFs, apresentações, propostas e outros arquivos).

POST/decksEnviar um novo documento. Envie como multipart/form-data com um campo file (PDF, PPTX, DOCX, XLSX, HTML) e um campo title. O limite de upload pela API é de 30 MB.
GET/decks?title={query}Pesquisar documentos por título. Não diferencia maiúsculas de minúsculas; retorna até 20 resultados.

Campos da resposta

FieldTypeDescription
idstringID do documento
titlestringTítulo do documento
fileTypestringTipo de arquivo (pdf, pptx, docx, html)
pageCountnumberNúmero de páginas
thumbnailUrlstringURL da imagem em miniatura
createdAtstringCarimbo de data/hora ISO 8601

Links de compartilhamento

Crie links rastreáveis para documentos. Um link pessoal pode localizar ou criar seu contato e sua empresa na mesma requisição.

POST/sharesCria um link pessoal ou anônimo. Links pessoais podem localizar ou criar registros de conta automaticamente.

Campos da requisição

FieldTypeDescription
deckIdstringobrigatórioID do documento a ser compartilhado
recipientNamestringopcionalNome do destinatário para um link pessoal
recipientEmailstringopcionalE-mail do destinatário para um link pessoal
contactIdUUIDopcionalContato existente no espaço de trabalho autenticado
companyIdUUIDopcionalEmpresa existente. Não pode ser usado com companyName
companyNamestringopcionalEmpresa a localizar pelo nome ou criar
companyDomainstringopcionalDomínio armazenado para enriquecimento quando companyName é informado. Nunca seleciona uma empresa
typestringopcionalO padrão é personal com campos de destinatário ou conta, caso contrário anonymous

Crie o link e os registros da conta juntos

Envie os dados do destinatário e da empresa diretamente para /shares. O HummingDeck localiza registros correspondentes, cria os que faltam, associa-os ao link e informa o que foi criado. Defina type explicitamente como anonymous para não criar registros da conta.

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

Campos da resposta

FieldTypeDescription
idstringID do compartilhamento
slugstringSlug do compartilhamento (usado na URL)
shareUrlstringURL rastreável completa
typestring"personal" ou "anonymous"
recipientNamestringNome do destinatário (se pessoal)
recipientEmailstringE-mail do destinatário (se pessoal)
contactobject | nullContato associado ao link pessoal
contactCreatedbooleantrue se esta requisição criou o contato
companyobject | nullEmpresa associada ao link pessoal
companyCreatedbooleantrue se esta requisição criou a empresa
createdAtstringCarimbo de data/hora ISO 8601

Salas

Consulte a estrutura de uma sala e crie links de público rastreáveis. Disponível apenas com tokens de API do espaço de trabalho; as credenciais OAuth do Zapier são rejeitadas.

GET/rooms/{roomId}Retorna metadados, abas, itens e a quantidade de links ativos e totais da sala.
POST/rooms/{roomId}/linksCria um link aberto com atribuição para uma sala ativa.

Criar um link aberto para a sala

Informe pelo menos um destes campos: recipientName, recipientEmail, contactId, companyId ou companyName. Nome e e-mail localizam ou criam um contato; os campos de empresa localizam ou criam uma empresa. Qualquer pessoa com a URL pode acessar um link aberto.

{
  "accessMode": "open",
  "recipientName": "Ada Lovelace",
  "recipientEmail": "ada@analytical.example",
  "companyName": "Analytical Engines"
}

Empresas e contatos

Localize registros de conta existentes ou crie novos com correspondência determinística. Nomes de empresas e e-mails de contatos são comparados sem diferenciar maiúsculas de minúsculas.

GET/companies?name={name}&domain={domain}Pesquisa empresas pelo nome exato e por um domínio opcional.
POST/companiesLocaliza uma empresa pelo nome sem diferenciar maiúsculas de minúsculas ou a cria. Um domínio explícito apenas enriquece o registro.
GET/contacts?email={query}Pesquisa contatos por endereço de e-mail e retorna as correspondências com a empresa associada.
POST/contactsLocaliza ou cria um contato pelo e-mail e o associa opcionalmente a uma empresa.

Requisição POST /companies

FieldTypeDescription
namestringobrigatórioNome da empresa
domainstringopcionalDomínio usado para enriquecer a empresa. Nunca é usado para localizar uma empresa existente

Requisição POST /contacts

FieldTypeDescription
namestringcondicionalNome completo. Obrigatório se firstName não for informado
firstNamestringcondicionalNome. Obrigatório se name não for informado
lastNamestringopcionalSobrenome
emailstringobrigatórioEndereço de e-mail usado para correspondência única
titlestringopcionalCargo
companyIdUUIDopcionalEmpresa existente no espaço de trabalho autenticado
companyNamestringopcionalNome da empresa a localizar ou criar
companyDomainstringopcionalDomínio opcional de enriquecimento usado com companyName. Não é uma chave de correspondência

Resposta da empresa

FieldTypeDescription
company.idUUIDID da empresa
company.namestringNome da empresa
company.domainstring | nullDomínio normalizado da empresa
createdbooleantrue se a requisição POST criou a empresa

Resposta do contato

FieldTypeDescription
contact.idUUIDID do contato
contact.firstNamestringNome
contact.lastNamestringSobrenome
contact.emailstringEndereço de e-mail normalizado
contact.titlestring | nullCargo
contact.companyIdUUID | nullID da empresa associada
contact.companyNamestring | nullNome da empresa associada
createdbooleantrue se a requisição POST criou o contato
companyobject | nullEmpresa resolvida, quando disponível
companyCreatedbooleantrue se esta requisição criou a empresa

Webhooks

Assine eventos em tempo real por meio de REST Hooks. Quando um evento ocorre, o HummingDeck envia uma requisição POST para sua URL HTTPS registrada com o payload do evento. As entregas com falha são repetidas até 3 vezes (com intervalos de 1 s, 5 s e 30 s). As subscrições de webhooks são geridas pela integração Zapier e não estão disponíveis para tokens de API do espaço de trabalho.

POST/hooksAssinar um evento. Requer uma URL HTTPS de destino e um tipo de evento. Retorna um ID de assinatura.
DELETE/hooks/{id}Cancelar a assinatura de um evento pelo ID de assinatura.

Tipos de eventos

EventDescription
view.createdUma pessoa real visualizou um documento compartilhado. O tráfego de bots (scanners de segurança de e-mail, crawlers) é filtrado automaticamente.
decision.madeUm prospect respondeu a uma proposta: aceita, recusada ou com alterações solicitadas.
email_capturedUm visitante inseriu seu endereço de e-mail para acessar conteúdo restrito.

Exemplos de 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"
  }
}

Visualizações e eventos

Endpoints de polling para recuperar dados de engajamento recentes. Eles retornam os mesmos dados que os webhooks entregam em tempo real. Use-os para preenchimento retroativo, testes ou como alternativa.

GET/viewsListar as 100 visualizações de documentos mais recentes. Sessões de bots são excluídas.
GET/decisionsListar decisões recentes sobre propostas (aceitas, recusadas, alterações solicitadas).
GET/emailsListar capturas de e-mail recentes de conteúdo restrito.

Tratamento de erros

Cada erro devolve um objeto JSON com um campo error que descreve o que correu mal. Algumas respostas incluem ainda um campo code para tratamento programático, como PLAN_LIMIT_REACHED, INVALID_FORMAT ou FILE_TOO_LARGE. Os códigos de estado HTTP seguem as convenções habituais.

StatusMeaning
400Requisição inválida: parâmetros ausentes ou inválidos
401Não autorizado: Bearer token inválido ou expirado
403Proibido: limite do plano atingido, ou este tipo de credencial não é permitido neste endpoint
404Não encontrado: o recurso não existe ou não pertence à sua equipe
409Conflito: os identificadores de contato, e-mail e empresa informados não correspondem
500Erro do servidor: repita a requisição

Limites de taxa

Máximo de 50 assinaturas de webhook ativas por equipe. As requisições de API não têm limite de taxa, mas o uso excessivo pode ser limitado.

Esta API é atualmente utilizada pela nossa integração com o Zapier. Plataformas de integração adicionais poderão ser suportadas no futuro.