Pular para o conteúdo

Contracts — external systems

Esta página detalha os contratos de integração com sistemas externos: payload shape, campos obrigatórios, autenticação, idempotência. A página API (Try It) cobre Bubble↔Backend; esta cobre Backend↔(HubSpot, Pagar.me, Omie).

HubSpot dispara webhook mínimo — só ID do deal + propriedade mudada. Backend faz call adicional pra obter dados completos.

1. Receber webhook com objectId do deal
2. Validar assinatura X-HubSpot-Signature-v3
3. GET https://api.hubspot.com/crm/v3/objects/deals/{objectId}?properties=...
4. Extrair campos necessários
5. Criar pedido na Blueprintt
[
{
"eventId": 1234567890,
"subscriptionId": 98765,
"portalId": 62515,
"appId": 123456,
"occurredAt": 1673981400000,
"subscriptionType": "deal.propertyChange",
"attemptNumber": 0,
"objectId": 67890,
"propertyName": "dealstage",
"propertyValue": "closedwon",
"changeSource": "CRM"
}
]
Campo BlueprinttCampo internoCampo HubSpotObrigatórioObservação
ID do dealhubspot_deal_idobjectId (do webhook)SimChave de idempotência
CNPJ/CPFcliente.cpf_cnpjA validar (propriedade customizada)SimP01 pendente
Nome / razão socialcliente.nomedealname ou customizadaSimA validar
E-mailcliente.emailA validarSimPode vir do contato associado
ID do eventoevento.idA validarSimP02 pendente
Nome do eventoevento.nomeA validarSim
Data do eventoevento.dataA validarSim
Valorpedido.valor_totalamountSimP04 — confirmar centavos vs reais
Vendedorvendedor.emailhubspot_owner_id → buscar e-mailNãoP05 — mapear por e-mail
Participantespedido.participantesA validarSimP03 pendente
Data fechamentopedido.criado_emclosedateSim
Header: X-HubSpot-Signature-v3
Algoritmo: HMAC-SHA256
String assinada: {method}{URI}{body}{timestamp}
Secret: HUBSPOT_WEBHOOK_SECRET
Janela: 5 minutos

Chave: eventId + objectId. Reentregas duplicadas detectadas e ignoradas.

Todos os webhooks Pagar.me seguem estrutura raiz comum.

{
"id": "hook_XXXXXXXXX",
"account": {
"id": "acc_XXXXXXXXX",
"name": "Nome da conta"
},
"type": "charge.paid",
"created_at": "2024-01-01T10:00:00Z",
"data": { ... }
}
Header: X-Hub-Signature
Algoritmo: HMAC-SHA256
Secret: PAGARME_WEBHOOK_SECRET
Retornar HTTP 200 imediato
Processar assíncrono
Campo BlueprinttCampo internoCampo Pagar.meTipoObservação
ID da cobrançacobranca.id_pagarmedata.idStringEx: ch_XXXXXXXXX
ID do pedidopedido.iddata.metadata.blueprintt_order_idStringP06 — backend envia no metadata ao criar cobrança
Statusdata.statusStringEsperado: paid
Valor pagocobranca.valor_pagodata.paid_amountIntegerEm centavos — dividir por 100
Meio de pagamentocobranca.meio_pagamentodata.payment_methodStringcredit_card · boleto · pix
Data pagamentocobranca.pago_emdata.paid_atISO 8601
CPF/CNPJ pagadordata.customer.documentStringConferência
Campo BlueprinttCampo internoCampo Pagar.meTipo
ID cobrançacobranca.id_pagarmedata.idString
ID pedidopedido.iddata.metadata.blueprintt_order_idString
Statusdata.statusString (esperado: canceled)
Valor canceladodata.canceled_amountInteger (centavos)
Data cancelamentodata.canceled_atISO 8601
Campo BlueprinttCampo internoCampo Pagar.meTipo
ID cobrançacobranca.id_pagarmedata.idString
ID pedidopedido.iddata.metadata.blueprintt_order_idString
Statusdata.statusString (esperado: failed)
CampoCampo Pagar.meObrigatórioObservação
ValoramountSimEm centavos
Meiopayment_methodSimcredit_card · boleto · pix
ID pedido internometadata.blueprintt_order_idSimCrítico — idempotência + rastreabilidade
IdempotencyHeader Idempotency-KeySimUUID único por pedido
Clientecustomer.name, customer.email, customer.documentSim

Todas as chamadas usam app_key + app_secret no corpo da requisição. Credenciais distintas por empresa faturadora (ADR-1: AABC only na Versão Atual).

{
"app_key": "{{OMIE_APP_KEY_AABC}}",
"app_secret": "{{OMIE_APP_SECRET_AABC}}",
"call": "NomeDoMetodo",
"param": [{ ... }]
}

Base URL: https://app.omie.com.br/api/v1/

Busca antes de criar (idempotência):

POST /geral/clientes/
call: ListarClientes
Filtrar por: cnpj_cpf

Campos enviados na criação:

Campo BlueprinttCampo OmieTipoObrigatórioFonte
Razão social / Nomerazao_socialStringSimCadastro Blueprintt
CNPJ ou CPFcnpj_cpfStringSimCadastro
E-mailemailStringSimCadastro
Tipo (PF/PJ)pessoa_fisicaStringSimS PF / N PJ
Telefonetelefone1_numeroStringNão
Endereçoendereco, cidade, estado, cepStringNão
Tipo atividadetagsArrayNãoA validar

Campos retornados (armazenar):

Campo OmieCampo Blueprintt
codigo_cliente_omiecliente.id_omie_aabc

Campos enviados:

Campo BlueprinttCampo OmieTipoObrigatórioFonte
Nome eventonomeStringSimEvento Blueprintt
Código projetocodigoStringSimP07 — formato a definir
DescriçãodescricaoStringNão

Campos retornados:

Campo OmieCampo Blueprintt
idevento.id_projeto_omie

Ordem de Serviço — IncluirOS / ListarOS / FaturarOS

Seção intitulada “Ordem de Serviço — IncluirOS / ListarOS / FaturarOS”

Busca antes de criar (duplicidade — regra OS duplicada em Domain · Policies):

POST /servicos/os/
call: ListarOS
Filtrar por: codigo_cliente_omie + id_projeto_omie
Status: ativo (aberto ou faturado)

Campos enviados:

Campo BlueprinttCampo OmieTipoObrigatórioFonte
Código clientecodigo_clienteIntegerSimRetornado em IncluirCliente
Código projetocodigo_projetoStringSimRetornado em IncluirProjeto
Tipo serviçocodigo_servicoStringSimP08 — cadastro cliente
Valor totalvalor_totalDecimalSimPedido venda
DiscriminaçãodescricaoStringSimParticipantes + detalhes evento
ObservaçõesobservacoesStringNãoEditável operador

Campos retornados:

Campo OmieCampo Blueprintt
numero_ospedido.numero_os_omie
codigo_ospedido.id_os_omie

Faturamento:

POST /servicos/os/
call: FaturarOS
Param: { codigo_os: pedido.id_os_omie }

Após faturamento, Omie emite NFS-e automaticamente.

Campo OmieCampo Blueprintt
numero_nfsepedido.numero_nf
link_nfsepedido.link_nf

P10 pendente — método exato (CancelarNFSe?) + campos necessários a confirmar com Omie.

#SistemaItemBloqueia
P01HubSpotPropriedade CNPJ/CPF no dealWebhook handler completo
P02HubSpotPropriedade evento/produtoWebhook handler
P03HubSpotLista participantesWebhook handler
P04HubSpotFormato amount (reais vs centavos)Mapeamento valor
P05HubSpotMapping owner → e-mail internoAtribuição vendedor
P06Pagar.memetadata.blueprintt_order_id round-tripIdempotência webhook
P07OmieFormato codigo projetoIncluirProjeto
P08OmieMapping tipos de serviço AABC/LNGIncluirOS
P09OmieLink NFS-e no retorno FaturarOS?Writeback Bubble
P10OmieMétodo cancelamento NFS-ecancel-nf endpoint

ADR-5 fechou HubSpot Fase 2 fora do escopo Versão Atual; P01-P05 ficam adormecidos. P06-P10 ativos.