Registrar uma venda
const url = 'https://dattacrm.com.br/api/v1/sales';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"gateway":"api","transactionId":"example","status":"paid","value":1,"currency":"example","productId":"example","productName":"example","paymentType":"example","adId":"example","occurredAt":"2026-10-19T12:00:00.000Z","tags":["example"],"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"}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://dattacrm.com.br/api/v1/sales \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "gateway": "api", "transactionId": "example", "status": "paid", "value": 1, "currency": "example", "productId": "example", "productName": "example", "paymentType": "example", "adId": "example", "occurredAt": "2026-10-19T12:00:00.000Z", "tags": [ "example" ], "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" } }'Registra uma venda de qualquer gateway, como o webhook de entrada faz. A venda é única por gateway + transactionId: se ainda não existe, é criada (201, created); se existe, é atualizada só com os campos enviados (200, updated), e o resto fica como está (comprador e lead, produto, data, UTMs, espelho, tags), então basta enviar transactionId, status e value para mudar a situação. O comprador (buyer) cria ou encontra o lead pelo e-mail ou telefone; telefone sem dígitos válidos e sem e-mail responde 400. As tags enviadas são somadas às que a venda já tem (nunca removem), sem gerar eventos. Cada gravação vira um evento da venda. Um status de precedência menor que o atual, no mesmo instante, fica registrado como evento e não muda a venda (chargeback > refunded > canceled > paid > pending > abandoned > other). O anúncio que gerou a venda vai em adId. Na venda nova ou na mudança de status saem os eventos sale.created e sale.<status> (webhooks e automações); reenviar o mesmo status não gera evento. Só a venda paga conta no limite do plano: acima dele, a venda paga nova (ou a que passaria a paga) responde 409 plan_limit e nada é gravado.
Authorizations
Seção intitulada “Authorizations ”Request Body required
Seção intitulada “Request Body required ”Dados da venda a registrar.
object
Origem da venda (1 a 40 caracteres). A venda é única por gateway + transactionId na conta. Informar o nome de um gateway integrado (ex.: hotmart) endereça as vendas dele nesta conta. Padrão: api.
Identificador da transação no gateway ou no seu sistema (1 a 200 caracteres).
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). Sem ela, a venda nova fica em BRL e a existente mantém a moeda atual.
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.000ZTags a acrescentar à venda, pelo nome (até 30, cada uma com 1 a 40 caracteres). Só soma: nunca remove as tags que a venda já tem. Tag automática é ignorada: o CRM a põe e tira pela regra dela. Tag nova entra no catálogo de tags de venda. Sem eventos nem automações.
Comprador. 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.000ZResponses
Seção intitulada “ Responses ”A venda já existia e foi atualizada (result: updated).
object
A venda gravada, o que aconteceu com ela e o lead do comprador.
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.
created quando a venda é nova (HTTP 201); updated quando já existia (HTTP 200).
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" }, "result": "created", "leadId": "0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f" }}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).
Venda criada (result: created).
object
A venda gravada, o que aconteceu com ela e o lead do comprador.
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.
created quando a venda é nova (HTTP 201); updated quando já existia (HTTP 200).
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" }, "result": "created", "leadId": "0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f" }}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.
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.