Diseñado para generar confianzaCifrado TLSConforme al RGPDGoogle CloudPagos segurosVisión general de seguridad

Referencia de API

HummingDeck expone una API REST para socios de integración y plataformas de automatización. Los endpoints se autentican con un Bearer token y devuelven respuestas JSON.

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

Autenticación

Cada petición a la API lleva un Bearer token en la cabecera Authorization. Se aceptan dos tipos de credencial, y se comportan de forma distinta.

Método

Bearer token

Formato del encabezado

Authorization: Bearer {access_token}

Tipos de credencial

Token de API del espacio de trabajo

Authorization: Bearer hd_api_...

Lo emite el propietario del espacio de trabajo desde Configuración del espacio, Integraciones, HummingDeck API. Disponible para espacios seleccionados durante un piloto privado. El token se muestra una sola vez al crearlo y después no se puede recuperar. Caduca un año después de su creación y queda vinculado de forma permanente al espacio para el que se emitió, así que una petición no puede elegir ni cambiar su espacio de trabajo.

Crear un token cuando ya existe uno lo sustituye, y el anterior deja de funcionar de inmediato. El propietario puede desactivar un token en cualquier momento. Para ese token es definitivo: crea uno nuevo en lugar de esperar restaurarlo.

Los endpoints de suscripción a webhooks no están disponibles para los tokens de API del espacio de trabajo.

Zapier OAuth

Authorization: Bearer {access_token}

Se emite mediante el flujo de autorización OAuth cuando un espacio de trabajo conecta la integración de Zapier. Los tokens de acceso caducan a los 30 días. Usa el token de actualización, que dura 90 días, para obtener uno nuevo sin volver a autorizar.

Es la única credencial que puede crear o eliminar suscripciones a webhooks.

Cuando una petición devuelve 401

Una petición se rechaza con 401 cuando el token es desconocido o incorrecto, ha caducado, se ha desactivado, pertenece a un espacio de trabajo cuyo acceso a la API se ha desactivado, o lo emitió alguien que ya no es propietario de ese espacio.

Prueba tu conexión

Verifica que tu token es válido y consulta el perfil del usuario autenticado.

GET/meDevuelve el nombre, el correo electrónico y la información del equipo del usuario actual.

Documentos

Sube, busca y gestiona documentos (PDFs, presentaciones, propuestas y otros archivos).

POST/decksSube un nuevo documento. Envía como multipart/form-data con un campo file (PDF, PPTX, DOCX, XLSX, HTML) y un campo title. El límite de carga de la API es de 30 MB.
GET/decks?title={query}Busca documentos por título. No distingue mayúsculas de minúsculas; devuelve hasta 20 resultados.

Campos de respuesta

FieldTypeDescription
idstringID del documento
titlestringTítulo del documento
fileTypestringTipo de archivo (pdf, pptx, docx, html)
pageCountnumberNúmero de páginas
thumbnailUrlstringURL de la imagen en miniatura
createdAtstringMarca de tiempo ISO 8601

Enlaces de compartición

Crea enlaces rastreables para documentos. Un enlace personal puede resolver o crear su contacto y empresa en la misma solicitud.

POST/sharesCrea un enlace personal o anónimo. Los enlaces personales pueden buscar o crear registros de cuentas automáticamente.

Campos de la solicitud

FieldTypeDescription
deckIdstringobligatorioID del documento a compartir
recipientNamestringopcionalNombre del destinatario (para enlaces personales)
recipientEmailstringopcionalCorreo electrónico del destinatario (para enlaces personales)
contactIdUUIDopcionalContacto existente en el espacio de trabajo autenticado
companyIdUUIDopcionalEmpresa existente. No se puede combinar con companyName
companyNamestringopcionalEmpresa que se buscará por nombre o se creará
companyDomainstringopcionalDominio guardado para completar datos cuando se proporciona companyName. Nunca selecciona una empresa
typestringopcionalEl valor predeterminado es personal si hay campos de destinatario o cuenta; en caso contrario, anonymous

Crea el enlace y los registros de cuenta a la vez

Envía los datos del destinatario y de la empresa directamente a /shares. HummingDeck busca registros coincidentes, crea los que faltan, los vincula al enlace e indica cuáles se han creado. Define type como anonymous para omitir la creación de cuentas.

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

Campos de respuesta

FieldTypeDescription
idstringID del enlace de compartición
slugstringSlug del enlace (usado en la URL)
shareUrlstringURL rastreable completa
typestring"personal" o "anonymous"
recipientNamestringNombre del destinatario (si es personal)
recipientEmailstringCorreo del destinatario (si es personal)
contactobject | nullContacto resuelto y vinculado al enlace
contactCreatedbooleanIndica si esta solicitud ha creado el contacto
companyobject | nullEmpresa resuelta y vinculada al enlace
companyCreatedbooleanIndica si esta solicitud ha creado la empresa
createdAtstringMarca de tiempo ISO 8601

Salas

Consulta la estructura de una sala y crea enlaces de audiencia con seguimiento. Solo está disponible con tokens de API del espacio de trabajo; las credenciales OAuth de Zapier se rechazan.

GET/rooms/{roomId}Devuelve los metadatos, las pestañas, los elementos y el número de enlaces activos y totales.
POST/rooms/{roomId}/linksCrea un enlace abierto con atribución para una sala activa.

Crear un enlace abierto para una sala

Indica al menos uno de estos campos: recipientName, recipientEmail, contactId, companyId o companyName. El nombre o correo busca o crea un contacto; los campos de empresa buscan o crean una empresa. Un enlace abierto permite acceder a cualquiera que tenga la URL.

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

Empresas y contactos

Busca registros de cuenta existentes o créalos con coincidencias deterministas. Los nombres de empresa y los correos de contacto no distinguen mayúsculas de minúsculas.

GET/companies?name={name}&domain={domain}Busca hasta 10 empresas por nombre exacto, dominio o ambos.
POST/companiesBusca una empresa por nombre sin distinguir mayúsculas de minúsculas o la crea. Un dominio explícito solo completa el registro. El campo created identifica el resultado.
GET/contacts?email={query}Busca contactos por dirección de correo electrónico. Devuelve contactos coincidentes con su empresa asociada.
POST/contactsBusca un contacto por correo o lo crea, con una empresa existente o nueva opcional.

Solicitud POST /companies

FieldTypeDescription
namestringobligatorioNombre de la empresa
domainstringopcionalDominio de la empresa para completar datos. Nunca se usa para buscar una empresa existente

Solicitud POST /contacts

FieldTypeDescription
namestringcondicionalNombre completo. Usa este campo o firstName y lastName
firstNamestringcondicionalNombre cuando no se proporciona name
lastNamestringopcionalApellido cuando se usa firstName
emailstringobligatorioCorreo usado para buscar sin distinguir mayúsculas de minúsculas
titlestringopcionalCargo
companyIdUUIDopcionalEmpresa existente en el espacio de trabajo autenticado
companyNamestringopcionalEmpresa que se buscará o creará si no se proporciona companyId
companyDomainstringopcionalDominio opcional para completar datos con companyName. No se usa como criterio de búsqueda

Respuesta de empresa

FieldTypeDescription
company.idUUIDID de la empresa
company.namestringNombre de la empresa
company.domainstring | nullDominio normalizado de la empresa
createdbooleanIndica si esta solicitud ha creado la empresa

Respuesta de contacto

FieldTypeDescription
contact.idUUIDID del contacto
contact.firstNamestringNombre
contact.lastNamestringApellido
contact.emailstringDirección de correo electrónico
contact.titlestring | nullCargo
contact.companyIdUUID | nullID de la empresa asociada
contact.companyNamestring | nullNombre de la empresa asociada
createdbooleanIndica si esta solicitud ha creado el contacto
companyobject | nullEmpresa resuelta, si está disponible
companyCreatedbooleanIndica si esta solicitud ha creado la empresa

Webhooks

Suscríbete a eventos en tiempo real mediante REST Hooks. Cuando ocurre un evento, HummingDeck envía una solicitud POST a tu URL HTTPS registrada con el payload del evento. Las entregas fallidas se reintentan hasta 3 veces (a intervalos de 1 s, 5 s y 30 s). Las suscripciones a webhooks las gestiona la integración de Zapier y no están disponibles para los tokens de API del espacio de trabajo.

POST/hooksSuscribirse a un evento. Requiere una URL HTTPS de destino y un tipo de evento. Devuelve un ID de suscripción.
DELETE/hooks/{id}Cancelar la suscripción a un evento por ID de suscripción.

Tipos de eventos

EventDescription
view.createdUna persona real vio un documento compartido. El tráfico de bots (escáneres de seguridad de correo electrónico, rastreadores) se filtra automáticamente.
decision.madeUn prospecto respondió a una propuesta: aceptada, rechazada o con cambios solicitados.
email_capturedUn visitante introdujo su dirección de correo electrónico para acceder a contenido protegido.

Ejemplos 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"
  }
}

Vistas y eventos

Endpoints de sondeo para recuperar datos de interacción recientes. Devuelven los mismos datos que entregan los webhooks en tiempo real. Úsalos para rellenar histórico, hacer pruebas o como alternativa.

GET/viewsListar las 100 visualizaciones de documentos más recientes. Las sesiones de bots están excluidas.
GET/decisionsListar las decisiones recientes sobre propuestas (aceptadas, rechazadas, cambios solicitados).
GET/emailsListar las capturas de correo electrónico recientes de contenido protegido.

Manejo de errores

Cada error devuelve un objeto JSON con un campo error que describe qué ha fallado. Algunas respuestas incluyen además un campo code para el tratamiento programático, como PLAN_LIMIT_REACHED, INVALID_FORMAT o FILE_TOO_LARGE. Los códigos de estado HTTP siguen las convenciones habituales.

StatusMeaning
400Solicitud incorrecta: parámetros faltantes o inválidos
401No autorizado: Bearer token inválido o expirado
403Prohibido: se ha alcanzado el límite del plan, o este tipo de credencial no está permitido en este endpoint
404No encontrado: el recurso no existe o no pertenece a tu equipo
409Conflicto: los identificadores de contacto, correo y empresa no coinciden
500Error del servidor: reintenta la solicitud

Límites de velocidad

Máximo 50 suscripciones de webhook activas por equipo. Las solicitudes de API no tienen límite de velocidad, pero un uso excesivo puede ser limitado.

Esta API es utilizada actualmente por nuestra integración con Zapier. Es posible que en el futuro se admitan plataformas de integración adicionales.