Atualizar uma venda
const url = 'https://dattacrm.com.br/api/v1/sales/0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"status":"paid","value":1,"currency":"example","productId":"example","productName":"example","paymentType":"example","adId":"example","occurredAt":"2026-10-19T12:00:00.000Z","buyer":{"name":"example","email":"example","phone":"example"},"utm":{"source":"example","medium":"example","campaign":"example","term":"example","content":"example"},"mirror":{"grossValue":1,"buyerTaxes":1,"installmentFee":1,"processingFee":1,"streamingFee":1,"otherFees":1,"producerNetValue":1,"coproducerValue":1,"affiliateValue":1,"affiliateName":"example","offerCode":"example","offerName":"example","couponCode":"example","installments":1,"payoutCurrency":"example","approvedAt":"2026-10-19T12:00:00.000Z"},"addTags":["example"],"removeTags":["example"]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://dattacrm.com.br/api/v1/sales/0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "status": "paid", "value": 1, "currency": "example", "productId": "example", "productName": "example", "paymentType": "example", "adId": "example", "occurredAt": "2026-10-19T12:00:00.000Z", "buyer": { "name": "example", "email": "example", "phone": "example" }, "utm": { "source": "example", "medium": "example", "campaign": "example", "term": "example", "content": "example" }, "mirror": { "grossValue": 1, "buyerTaxes": 1, "installmentFee": 1, "processingFee": 1, "streamingFee": 1, "otherFees": 1, "producerNetValue": 1, "coproducerValue": 1, "affiliateValue": 1, "affiliateName": "example", "offerCode": "example", "offerName": "example", "couponCode": "example", "installments": 1, "payoutCurrency": "example", "approvedAt": "2026-10-19T12:00:00.000Z" }, "addTags": [ "example" ], "removeTags": [ "example" ] }'Altera campos de uma venda da conta (de qualquer origem, inclusive de um gateway integrado) pelo identificador do CRM: status, valor, moeda, produto, forma de pagamento, anúncio (adId), data, comprador, UTMs e espelho do gateway. As tags mudam por addTags (acrescenta) e removeTags (tira), como no update_lead; tags não existe no PATCH e responde 400. Só os campos enviados mudam; o resto fica como está, e o payload original guardado na venda nunca é substituído. O PATCH é uma correção: os campos enviados valem sempre, sem a guarda de ordem dos eventos. Quando o status muda, a mudança é registrada como evento outro; reenviar o mesmo status, ou alterar só outros campos, não grava evento. Na mudança de status saem os eventos sale.<status> (webhooks e automações); alterar os outros campos não gera evento. Só a venda paga conta no limite do plano: passar uma venda para paga acima dele responde 409 plan_limit e nada é gravado. Responde 404 quando a venda não existe ou pertence a outra conta e 400 quando o corpo não tem nenhum campo.
Authorizations
Seção intitulada “Authorizations ”Parameters
Seção intitulada “ Parameters ”Path Parameters
Seção intitulada “Path Parameters ”Identificador da venda no CRM.
Example
0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6fIdentificador da venda no CRM.
Request Body required
Seção intitulada “Request Body required ”Campos da venda a alterar. O que não vem no corpo não muda (buyer, utm e mirror chave a chave; as tags mudam por addTags e removeTags). gateway e transactionId não entram: identificam a venda. Exige pelo menos um campo.
object
Situação da venda: paid (paga), pending (aguardando pagamento), refunded (reembolsada), chargeback, canceled (cancelada) ou abandoned (carrinho abandonado).
Valor da venda, na moeda de currency (zero a 9999999999.99).
Moeda da venda: código ISO de 3 letras (ex.: BRL, USD).
Identificador do produto (até 200 caracteres).
Nome do produto (até 200 caracteres).
Forma de pagamento, ex.: pix, credit_card, boleto (até 60 caracteres).
Identificador do anúncio que gerou a venda (até 200 caracteres).
Data da venda (do pedido), em ISO 8601 com fuso.
Example
2026-10-19T12:00:00.000ZComprador. Com e-mail ou telefone, a venda se liga ao lead (criado se não existir); a venda nova sem os dois fica sem lead, e a existente mantém o comprador gravado.
object
Nome do comprador (até 120 caracteres).
E-mail do comprador; cria ou encontra o lead por ele. Formato inválido é gravado como chegou.
Telefone do comprador, em qualquer formato (até 64 caracteres); cria ou encontra o lead por ele. Fora de 8 a 15 dígitos é gravado como veio e não encontra o lead de ninguém.
UTMs da venda. Na venda nova sem UTM, valem as do lead do comprador; na existente, só as enviadas mudam.
object
Utm_source.
Utm_medium.
Utm_campaign.
Utm_term.
Utm_content.
Espelho do painel do gateway (opcional): taxas, líquido do produtor, comissões, oferta, cupom e parcelas. Só as chaves enviadas mudam; as outras ficam como estão.
object
Valor bruto cobrado do comprador (zero a 9999999999.99).
Impostos pagos pelo comprador (zero a 9999999999.99).
Juros do parcelamento (zero a 9999999999.99).
Taxa de processamento do gateway (zero a 9999999999.99).
Taxa de streaming ou entrega (zero a 9999999999.99).
Outras taxas (zero a 9999999999.99).
Valor líquido do produtor (zero a 9999999999.99).
Comissão do coprodutor (zero a 9999999999.99).
Comissão do afiliado (zero a 9999999999.99).
Nome do afiliado (até 200 caracteres).
Código da oferta no gateway (até 200 caracteres).
Nome da oferta (até 200 caracteres).
Cupom de desconto usado (até 200 caracteres).
Número de parcelas (0 a 1000).
Moeda do repasse ao produtor (código ISO de 3 letras).
Quando o pagamento foi aprovado, em ISO 8601.
Example
2026-10-19T12:00:00.000ZTags a acrescentar à venda, pelo nome (até 30). Tag nova entra no catálogo de tags de venda. Tag automática é ignorada: o CRM a põe e tira pela regra dela.
Tags a remover da venda, pelo nome (até 30), sem diferenciar maiúsculas. Tag que a venda não tem e tag automática são ignoradas.
Responses
Seção intitulada “ Responses ”Sucesso.
object
A venda depois da alteração.
object
Venda (de um gateway ou registrada pela API) no formato público.
object
Identificador da venda no CRM.
Origem da venda: api para as registradas pela API, ou o gateway (hotmart, kiwify…).
Identificador da transação no gateway (ou no seu sistema).
Situação: paid, pending, refunded, chargeback, canceled ou abandoned. other aparece só em venda de gateway com status desconhecido.
Valor da venda, na moeda de currency.
Moeda da venda (código ISO de 3 letras, ex.: BRL).
Identificador do produto, ou null.
Nome do produto, ou null.
Forma de pagamento (pix, cartão, boleto…), ou null.
Comprador, como veio na venda.
object
Nome do comprador, ou null.
E-mail do comprador, ou null.
Telefone do comprador, ou null.
Tags da venda, pelo nome (catálogo de tags de venda, separado do das tags de lead). Veja list_sale_tags.
UTMs da venda; sem UTM na venda, valem as do lead.
object
Utm_source.
Utm_medium.
Utm_campaign.
Utm_term.
Utm_content.
Espelho do painel do gateway: taxas, líquido do produtor, comissões, oferta e parcelas.
object
Valor bruto cobrado do comprador, ou null.
Impostos pagos pelo comprador, ou null.
Juros do parcelamento, ou null.
Taxa de processamento do gateway, ou null.
Taxa de streaming ou entrega, ou null.
Outras taxas, ou null.
Valor líquido do produtor, ou null.
Comissão do coprodutor, ou null.
Comissão do afiliado, ou null.
Nome do afiliado, ou null.
Código da oferta no gateway, ou null.
Nome da oferta, ou null.
Cupom de desconto usado, ou null.
Moeda do repasse ao produtor, ou null.
Quando a venda entrou no CRM.
Quando a venda foi alterada pela última vez.
Example
{ "data": { "sale": { "id": "0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f", "status": "paid", "leadId": "0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f", "occurredAt": "2026-10-19T12:00:00.000Z", "mirror": { "approvedAt": "2026-10-19T12:00:00.000Z" }, "createdAt": "2026-10-19T12:00:00.000Z", "updatedAt": "2026-10-19T12:00:00.000Z" } }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Máximo de requisições por janela de 60 segundos para esta chave.
Requisições restantes na janela atual.
Fim da janela atual, em milissegundos desde a época Unix (epoch ms).
Dados inválidos na requisição (validation_error), lead novo sem lista (list_required), campo que mudou de lugar (field_moved) ou chave enviada na URL (api_key_in_url).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Chave ausente, inválida (invalid_api_key), vencida (api_key_expired) ou revogada (api_key_revoked).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
A chave é somente leitura e a operação grava dados (insufficient_scope).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Recurso não encontrado (not_found).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Conflito com o estado atual (conflict), contato oculto, cujo negócio não muda (lead_hidden), ou limite do plano atingido (plan_limit).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
O corpo da requisição passa de 256 KB (payload_too_large).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Limite de requisições atingido (rate_limited). Aguarde Retry-After segundos.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Máximo de requisições por janela de 60 segundos para esta chave.
Requisições restantes na janela atual.
Fim da janela atual, em milissegundos desde a época Unix (epoch ms).
Segundos até poder tentar de novo.
Erro interno (internal_error). Informe o requestId ao suporte.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
O CRM está em modo somente leitura durante uma migração (maintenance). Tente de novo depois de Retry-After segundos.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Segundos até poder tentar de novo.