Documentation Index
Fetch the complete documentation index at: https://docs.useaira.com/llms.txt
Use this file to discover all available pages before exploring further.
A integração com o HubSpot permite que seu time comercial mantenha o CRM como fonte de verdade dos dados de cliente e, ao fechar um deal, dispare automaticamente a criação do cliente, conta de pagamento e contrato correspondentes na Aira.
O que é possível
- Criar cliente, conta de pagamento e contrato na Aira a partir de um deal fechado no HubSpot
- Registrar expansões (novos produtos) em contratos já existentes
- Vincular registros entre os dois sistemas via
externalIdecontractId - Anexar rastreabilidade de receita (proposta + data efetiva) por produto, quando o módulo está habilitado
Como funciona
A integração é exposta via dois webhooks de entrada. O HubSpot (ou um sistema intermediário, como um workflow ou Zapier) faz umPOST para a Aira quando um deal é fechado ou expandido, e a Aira processa a chamada sincronamente, refletindo o efeito em clientes, contas de pagamento e contratos.
| Webhook | URL | Quando usar |
|---|---|---|
| Novo deal | POST /v1/webhooks/hubspot/new-deal | Deal novo fechado no HubSpot |
| Expansão | POST /v1/webhooks/hubspot/expansion | Upsell/cross-sell em contrato existente |
Autenticação
Todas as requisições precisam incluir o headerX-API-KEY com uma chave que tenha a role contracts:write:
| Código | Significado |
|---|---|
204 No Content | Webhook processado com sucesso |
400 Bad Request | Payload inválido ou regra de negócio violada |
401 Unauthorized | API key ausente ou inválida |
403 Forbidden | Chave sem role contracts:write ou integração desabilitada no tenant |
404 Not Found | Contrato ou cliente não encontrado (expansão) |
Cada chamada recebida é registrada no log de auditoria de webhooks, incluindo IP, user-agent, payload e código de resposta.
Webhook: Novo deal
POST /v1/webhooks/hubspot/new-deal
Cria um novo contrato na Aira a partir de um deal do HubSpot. Se o cliente (identificado por externalId) ainda não existir, ele é criado. Se a conta de pagamento (identificada por taxId) já existir para aquele cliente, ela é reutilizada — caso contrário, é criada.
Corpo da requisição
Campos
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
customer.externalId | string | sim | Identificador único do cliente no HubSpot — usado para vincular e deduplicar |
customer.name | string | sim | Nome do cliente (razão social ou nome fantasia) |
customer.customFields | object | não | Campos customizados livres (chave → valor) |
paymentAccount.businessName | string | sim | Razão social da conta de pagamento |
paymentAccount.taxId | string | sim | CNPJ ou CPF (apenas dígitos) |
paymentAccount.taxIdType | "cnpj" | "cpf" | sim | Tipo do documento fiscal |
paymentAccount.emails | string[] | não | Emails para envio de cobranças e notas fiscais |
contract.startDate | date (YYYY-MM-DD) | sim | Data de início do contrato |
contract.endDate | date | null | não | Data de término (null para contratos sem fim definido) |
contract.rateAdjustmentIndex | enum | null | não | none, igpm, ipca, other ou null |
contract.customFields | object | não | Campos customizados do contrato |
products | array | sim | Lista de produtos contratados (mínimo 1) |
products[].productId | uuid | sim | UUID do produto já cadastrado na Aira |
products[].revenueTraceability | array | não | Rastreabilidade de receita (requer módulo habilitado) |
products[].revenueTraceability[].proposal | string | sim (se enviada) | Identificador da proposta comercial |
products[].revenueTraceability[].effectiveDate | string (YYYY-MM) | sim (se enviada) | Mês de vigência, no formato AAAA-MM |
Comportamento
- Cliente com
externalIdjá existente é reutilizado. Conta de pagamento comtaxIdjá existente para o cliente também é reutilizada. - O contrato é criado com alocação de 100% para a conta de pagamento informada.
- Ciclo de faturamento padrão: mensal, ancorado no primeiro dia do mês.
- Para cada produto, uma instância do plano mapeado é criada no contrato.
- Se o módulo de rastreabilidade de receita estiver habilitado, os itens de
revenueTraceabilitysão persistidos.
Webhook: Expansão
POST /v1/webhooks/hubspot/expansion
Adiciona novos produtos (e, opcionalmente, rastreabilidade de receita) a um contrato já existente. Útil para registrar upsells, cross-sells e aumentos de escopo sem duplicar o contrato.
Corpo da requisição
Campos
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
contractId | uuid | sim | ID do contrato existente na Aira |
customerExternalId | string | sim | externalId do cliente — deve pertencer ao contrato informado |
products | array | sim | Lista de produtos a adicionar (mínimo 1) |
products[].productId | uuid | sim | UUID do produto já cadastrado na Aira |
products[].revenueTraceability | array | não | Rastreabilidade de receita (requer módulo habilitado) |
products[].revenueTraceability[].proposal | string | sim (se enviada) | Identificador da proposta |
products[].revenueTraceability[].effectiveDate | string (YYYY-MM) | sim (se enviada) | Mês de vigência |
Comportamento
- Valida que o
contractIdexiste e que ocustomerExternalIdpertence ao cliente daquele contrato (caso contrário retorna400ou404). - Para cada produto: se o plano correspondente ainda não está no contrato, uma nova instância é criada. Produtos já presentes são ignorados.
- Itens de rastreabilidade de receita são deduplicados pela combinação
contractId + productId + proposal + effectiveDate. Duplicatas são ignoradas silenciosamente.
A expansão não altera datas, alocação ou índice de reajuste do contrato original — apenas adiciona produtos e rastreabilidade de receita.
Configuração
Habilitar a integração
Entre em contato com o suporte (contato@useaira.com) para ativar a integração HubSpot no seu tenant.
Solicitar a API key
Solicite ao time da Aira uma API key com a role
contracts:write através do suporte (contato@useaira.com). Armazene o valor em local seguro.Configurar workflow no HubSpot
Crie um workflow que dispare um
POST para os endpoints da Aira quando um deal entrar no estágio desejado (ex: closed-won) ou quando uma expansão for registrada. Inclua o header X-API-KEY com a chave gerada.Erros comuns
| Erro | Causa provável |
|---|---|
403 — HubSpot integration is not enabled | Integração não ativada no tenant — contate o suporte |
403 — API key sem permissão | Chave não tem a role contracts:write |
404 — contract not found | contractId inexistente na Aira (expansão) |
404 — customer not found | customerExternalId não encontrado na Aira (expansão) |
400 — customer does not belong to contract | Cliente e contrato informados não correspondem ao mesmo deal |
| Produto não aparece no contrato | productId não está mapeado para um plano ativo |
Próximos passos
- Contratos — estrutura e ciclo de vida de contratos na Aira
- Clientes — modelo de clientes e uso do
externalId - Autenticação da API — como solicitar e usar API keys