Pular para o conteúdo principal

Alteração de Negociação

Descrição: Informações atualizadas de uma Negociação quando editada dentro da plataforma Merx. Este payload é enviado pelo servidor Merx ao endpoint cadastrado no webhook quando uma negociação é alterada.

Payload Recebido​

Payload recebido pelo seu servidor
{
"commitment_id": "7ee50d8f-9ec9-4668-a03f-e424993eb886",
"commitment_friendly_id": "240228D0DW3OOV",
"commitment_fixed_amount": 125.0,
"commitment_status": "OPEN",
"price": 100.0,
"cooperative_id": "8c2db7cc-1020-4423-98cc-02e829299e40",
"issuer_id": "4b5e9d45-da34-460f-98b9-bbd92f847c3b",
"issuer_name": "Usucom Cpfcinco",
"cooperative_name": "Cooperativa Exemplo",
"owner_id": "8c2db7cc-1020-4423-98cc-02e829299e40",
"owner_name": "Cooperativa Exemplo",
"description": "202020",
"payday": "2024-12-15",
"type": "COMPRA",
"status": "OPEN",
"unit_of_measurement": {
"id": "7af33d9f-baaf-4e90-a44e-b3a5307d4989",
"code": "Sc",
"enabled": false,
"removed": false
},
"price_unit_of_measurement": {
"id": "7af33d9f-baaf-4e90-a44e-b3a5307d4989",
"code": "Sc",
"enabled": false,
"removed": false
},
"delivery_place": {
"id": "e0b2ad8f-209d-4690-aff6-87d2e24438d8",
"place": "Cariri",
"enabled": false,
"removed": false
},
"created_at": 1.734102E9,
"updated_at": 1.734102E9,
"fixed_amount_measurement_reference": 125.0,
"delivered_amount": 125.0,
"total_price_commitment": 12500.0,
"original_amount": 125.0,
"shipping_detail_id": "a1215ba9-80bf-4f60-8abb-fa1b7342daeb",
"committed_id": "b2f1c9e4-7d3a-4e58-9f21-6c8d0a5b7e33",
"producer_id": "b2f1c9e4-7d3a-4e58-9f21-6c8d0a5b7e33",
"initial_delivery_date": 1734048000000,
"end_delivery_date": 1734048000000,
"friendly_id": "240228D0DW3OOV",
"erp_commitment_id": "ERP-REF-12345",
"wallets": [
{
"id": "fc0a1c0f-6d12-46c7-9249-6f6f855c9ef2",
"name": "Carteira Automação"
}
],
"wallet_id": "fc0a1c0f-6d12-46c7-9249-6f6f855c9ef2",
"harvest": {
"id": "7279dcf4-9b1c-49f5-bd16-660fc7711060",
"name": "2022/2023"
},
"shipping_detail": {
"description": "Frete por conta do comprador",
"shipping": {
"id": "9f5f9649-5814-470c-bac9-a871b41ad348",
"name": "CIF"
},
"city": "Goiânia",
"state": "GO",
"price": 0.0
},
"modality": {
"id": "e546a0b5-f32e-4787-a5ca-9104664c1ba5",
"name": "Disponível"
},
"product": {
"id": "3281a9df-8312-4483-968b-479e793ef960",
"name": "Soja",
"enabled": false,
"removed": false
},
"currency": {
"id": "882bdbf7-922d-4f94-8deb-b3b24433d63d",
"code": "BRL",
"enabled": false,
"removed": false
},
"payment_type": "DINHEIRO"
}

As chaves nulas não são entregues. Antes de sair, o corpo é desserializado e reserializado pela API de integração, que omite campos sem valor — inclusive dentro de objetos aninhados e de itens de lista. Ou seja: campo ausente significa "sem valor", e o seu parser não deve exigir a presença de nenhuma chave opcional.

Formatos de número e data neste payload. payday chega como string yyyy-MM-dd. created_at e updated_at são epoch em segundos, emitidos em notação científica (1.7341020001234567E9) — a reserialização os converte para ponto flutuante. A fração de segundo sobrevive; a forma curta 1.734102E9 só aparece quando a fração é exatamente zero, que é exceção. initial_delivery_date e end_delivery_date são epoch em milissegundos, inteiros. Valores decimais também passam por ponto flutuante e perdem a escala original (125.00 chega como 125.0).

Campos do payload​

A coluna Presença diz quando esperar cada campo. Onde está Nunca, o campo existe no contrato mas a plataforma não o preenche hoje — a chave simplesmente não chega.

CampoDescriçãoTipoPresença
commitment_idIdentificador da negociaçãoUUIDSempre
commitment_friendly_idCódigo amigável da negociaçãoStringSempre
commitment_fixed_amountVolume fixadoNumberSempre
total_contractual_pendingTotal contratual pendenteIntegerNunca
commitment_statusSituação da negociação — mesma origem de statusStringSempre
pricePreço por unidade de medidaNumberSempre
cooperative_idIdentificador da cooperativaUUIDSempre
issuer_idIdentificador de quem emitiuStringSempre
issuer_nameNome de quem emitiuStringQuando disponível
issuer_emailE-mail de quem emitiuStringNunca
cooperative_nameNome da cooperativaStringQuando disponível
owner_idPreenchido com o identificador da cooperativa — igual a cooperative_idUUIDSempre
owner_nameNome da cooperativa — mesma origem de cooperative_nameStringQuando disponível
descriptionDescrição da negociaçãoStringQuando preenchida
paydayData de pagamento — string yyyy-MM-ddStringQuando preenchida
typeTipo da negociaçãoStringSempre
statusSituação — mesma origem de commitment_statusStringSempre
unit_of_measurementUnidade de medida do volume — só id e code são preenchidosObjectSempre
price_unit_of_measurementUnidade de medida do preço — só id e code são preenchidosObjectSempre
delivery_placeLocal de entrega — place depende de consulta ao cadastroObjectSempre
removedIndica remoção lógicaBooleanNunca
created_atCriação — epoch em segundos, notação científicaNumberSempre
updated_atÚltima atualização — epoch em segundos, notação científicaNumberSempre
commitment_amountVolume negociadoNumberNunca
fixed_amount_measurement_referenceVolume fixado na unidade de referênciaNumberSempre
delivered_amountVolume entregueNumberSempre
total_price_commitmentValor total da negociaçãoNumberSempre
original_amountVolume original da negociaçãoNumberSempre
shipping_detail_idIdentificador do detalhe de freteUUIDSempre
order_friendly_idCódigo amigável da ordemStringNunca
committed_atData em que foi negociadaNumberNunca
committed_idIdentificador do produtor — mesma origem de producer_idUUIDSempre
producer_idIdentificador do produtor — mesma origem de committed_idUUIDSempre
commitment_user_nameNome do usuário que negociouStringNunca
initial_delivery_dateData inicial de entrega — epoch em milissegundosNumberQuando preenchida
end_delivery_dateData final de entrega — epoch em milissegundosNumberQuando preenchida
parent_idIdentificador da negociação de origemUUIDNunca
friendly_idCódigo amigável — mesma origem de commitment_friendly_idStringSempre
committed_company_nameNome da empresa que negociouStringNunca
erp_commitment_idReferência externa no ERP do clienteStringQuando preenchida
walletsCarteiras vinculadas — só id e name são preenchidosArrayQuando há carteira
wallet_idIdentificador da carteiraUUIDQuando há carteira
harvestSafra — só id e name são preenchidosObjectSempre
shipping_detailFrete (description, shipping, city, state, price)ObjectQuando há frete
modalityModalidade — só id e name são preenchidosObjectSempre
productProduto — só id e name são preenchidosObjectSempre
currencyMoeda — só id e code são preenchidosObjectSempre
buyerCompradorStringNunca
sellerVendedorStringNunca
payment_typeTipo de pagamento: DINHEIRO ou TROCAEnumSempre

Objetos podem chegar vazios. harvest, modality e currency são sempre enviados, mas o conteúdo depende da referência existir. Sem safra ou modalidade associada, harvest e modality chegam como {}. Já currency nunca chega vazio: os campos enabled e removed dele são booleanos primitivos, que a omissão de nulos não suprime, então sem moeda associada ele chega como {"enabled": false, "removed": false}.

Três campos repetem o mesmo dado. commitment_status e status vêm da mesma coluna; commitment_friendly_id e friendly_id também; e committed_id e producer_id recebem ambos o identificador do produtor. Não trate como informações distintas.

enabled e removed dentro dos objetos aninhados chegam sempre com o valor false. Esse false é o padrão do tipo no serviço de origem, que não lê essas colunas do banco — não representa o estado real do cadastro, e não deve ser usado para decidir se um registro está ativo ou removido.

Entrega​

Este payload chega ao seu endpoint com os headers Content-Type: application/json, app-hash (identificador da cooperativa), event-type (o tipo do evento), Content-Hmac (assinatura sempre enviada, que não serve para validar a entrega — ver o Guia: Webhooks) e, se basic_authentication estiver configurado no webhook, Authorization: Basic <base64>.

O endpoint precisa responder 2xx em menos de 5 segundos. Responder 5xx devolve a mensagem à fila; responder 4xx encerra a entrega. Ver Guia: Webhooks — Requisitos do endpoint receptor.