Skip to main content

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 externalId e contractId
  • 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 um POST 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.
WebhookURLQuando usar
Novo dealPOST /v1/webhooks/hubspot/new-dealDeal novo fechado no HubSpot
ExpansãoPOST /v1/webhooks/hubspot/expansionUpsell/cross-sell em contrato existente

Autenticação

Todas as requisições precisam incluir o header X-API-KEY com uma chave que tenha a role contracts:write:
curl -X POST https://api.useaira.com/v1/webhooks/hubspot/new-deal \
  -H "X-API-KEY: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ ... }'
CódigoSignificado
204 No ContentWebhook processado com sucesso
400 Bad RequestPayload inválido ou regra de negócio violada
401 UnauthorizedAPI key ausente ou inválida
403 ForbiddenChave sem role contracts:write ou integração desabilitada no tenant
404 Not FoundContrato 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

{
  "customer": {
    "externalId": "hubspot_deal_12345",
    "name": "Empresa Exemplo Ltda",
    "customFields": {
      "segment": "enterprise"
    }
  },
  "paymentAccount": {
    "businessName": "Empresa Exemplo Ltda",
    "taxId": "12345678000190",
    "taxIdType": "cnpj",
    "emails": ["financeiro@empresaexemplo.com"]
  },
  "contract": {
    "startDate": "2026-05-01",
    "endDate": "2027-04-30",
    "rateAdjustmentIndex": "ipca",
    "customFields": {
      "sales_owner": "maria@useaira.com"
    }
  },
  "products": [
    {
      "productId": "7f3a5d2c-...-uuid",
      "revenueTraceability": [
        {
          "proposal": "PROP-2026-0042",
          "effectiveDate": "2026-05"
        }
      ]
    }
  ]
}

Campos

CampoTipoObrigatórioDescrição
customer.externalIdstringsimIdentificador único do cliente no HubSpot — usado para vincular e deduplicar
customer.namestringsimNome do cliente (razão social ou nome fantasia)
customer.customFieldsobjectnãoCampos customizados livres (chave → valor)
paymentAccount.businessNamestringsimRazão social da conta de pagamento
paymentAccount.taxIdstringsimCNPJ ou CPF (apenas dígitos)
paymentAccount.taxIdType"cnpj" | "cpf"simTipo do documento fiscal
paymentAccount.emailsstring[]nãoEmails para envio de cobranças e notas fiscais
contract.startDatedate (YYYY-MM-DD)simData de início do contrato
contract.endDatedate | nullnãoData de término (null para contratos sem fim definido)
contract.rateAdjustmentIndexenum | nullnãonone, igpm, ipca, other ou null
contract.customFieldsobjectnãoCampos customizados do contrato
productsarraysimLista de produtos contratados (mínimo 1)
products[].productIduuidsimUUID do produto já cadastrado na Aira
products[].revenueTraceabilityarraynãoRastreabilidade de receita (requer módulo habilitado)
products[].revenueTraceability[].proposalstringsim (se enviada)Identificador da proposta comercial
products[].revenueTraceability[].effectiveDatestring (YYYY-MM)sim (se enviada)Mês de vigência, no formato AAAA-MM

Comportamento

  • Cliente com externalId já existente é reutilizado. Conta de pagamento com taxId já 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 revenueTraceability sã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

{
  "contractId": "a1b2c3d4-...-uuid",
  "customerExternalId": "hubspot_deal_12345",
  "products": [
    {
      "productId": "9e8d7c6b-...-uuid",
      "revenueTraceability": [
        {
          "proposal": "PROP-2026-0088",
          "effectiveDate": "2026-07"
        }
      ]
    }
  ]
}

Campos

CampoTipoObrigatórioDescrição
contractIduuidsimID do contrato existente na Aira
customerExternalIdstringsimexternalId do cliente — deve pertencer ao contrato informado
productsarraysimLista de produtos a adicionar (mínimo 1)
products[].productIduuidsimUUID do produto já cadastrado na Aira
products[].revenueTraceabilityarraynãoRastreabilidade de receita (requer módulo habilitado)
products[].revenueTraceability[].proposalstringsim (se enviada)Identificador da proposta
products[].revenueTraceability[].effectiveDatestring (YYYY-MM)sim (se enviada)Mês de vigência

Comportamento

  • Valida que o contractId existe e que o customerExternalId pertence ao cliente daquele contrato (caso contrário retorna 400 ou 404).
  • 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

1

Habilitar a integração

Entre em contato com o suporte (contato@useaira.com) para ativar a integração HubSpot no seu tenant.
2

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

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

Mapear produtos

Cada productId enviado no webhook precisa corresponder a um produto cadastrado na Aira. Mantenha uma tabela de mapeamento atualizada no seu workflow entre produtos do HubSpot e UUIDs da Aira.

Erros comuns

ErroCausa provável
403 — HubSpot integration is not enabledIntegração não ativada no tenant — contate o suporte
403 — API key sem permissãoChave não tem a role contracts:write
404 — contract not foundcontractId inexistente na Aira (expansão)
404 — customer not foundcustomerExternalId não encontrado na Aira (expansão)
400 — customer does not belong to contractCliente e contrato informados não correspondem ao mesmo deal
Produto não aparece no contratoproductId não está mapeado para um plano ativo

Próximos passos