curl --request PUT \
--url https://api.wegly.com.br/integrations/external/deals/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Implementação completa CRM",
"measurement_consent": "DENIED"
}
'import requests
url = "https://api.wegly.com.br/integrations/external/deals/{id}"
payload = {
"title": "Implementação completa CRM",
"measurement_consent": "DENIED"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({title: 'Implementação completa CRM', measurement_consent: 'DENIED'})
};
fetch('https://api.wegly.com.br/integrations/external/deals/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wegly.com.br/integrations/external/deals/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Implementação completa CRM',
'measurement_consent' => 'DENIED'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wegly.com.br/integrations/external/deals/{id}"
payload := strings.NewReader("{\n \"title\": \"Implementação completa CRM\",\n \"measurement_consent\": \"DENIED\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.wegly.com.br/integrations/external/deals/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Implementação completa CRM\",\n \"measurement_consent\": \"DENIED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wegly.com.br/integrations/external/deals/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Implementação completa CRM\",\n \"measurement_consent\": \"DENIED\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"code": 123,
"title": "<string>",
"measurement_consent": "GRANTED",
"quality_rating": 123,
"quality_reason": "<string>",
"status": 1,
"lost_reason_description": "<string>",
"won_reason_description": "<string>"
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Atualização de oportunidade
Atualiza campos da oportunidade. O campo lead_source não é aceito; use crm_lead_source_id. Conflitos entre organization_id e organization são rejeitados. Pessoas marcadas com delete: true em persons_id são removidas; organization_id: null remove a organização. marketing corrige a aquisição atual (omitidos são preservados e null limpa o valor) e crm_lead_source_id: null remove a origem. custom_fields, quando enviado com itens, substitui todas as respostas. tags são acrescentadas às existentes. value é ignorado quando a oportunidade negocia por produtos ou por proposta. status não preenche won_date/lost_date automaticamente e gera o webhook deal.updated, não deal.won/deal.lost. Consentimento top-level, alias legado e URL são validados antes de qualquer mutação; divergência retorna 400 sem atualizar a oportunidade ou associações.
O campo title é obrigatório. Retorna um resumo da atualização; consulte GET para obter as associações atualizadas. organization_id: null remove a organização; persons_id com delete: true remove participantes.
curl --request PUT \
--url https://api.wegly.com.br/integrations/external/deals/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Implementação completa CRM",
"measurement_consent": "DENIED"
}
'import requests
url = "https://api.wegly.com.br/integrations/external/deals/{id}"
payload = {
"title": "Implementação completa CRM",
"measurement_consent": "DENIED"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({title: 'Implementação completa CRM', measurement_consent: 'DENIED'})
};
fetch('https://api.wegly.com.br/integrations/external/deals/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wegly.com.br/integrations/external/deals/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Implementação completa CRM',
'measurement_consent' => 'DENIED'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wegly.com.br/integrations/external/deals/{id}"
payload := strings.NewReader("{\n \"title\": \"Implementação completa CRM\",\n \"measurement_consent\": \"DENIED\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.wegly.com.br/integrations/external/deals/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Implementação completa CRM\",\n \"measurement_consent\": \"DENIED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wegly.com.br/integrations/external/deals/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Implementação completa CRM\",\n \"measurement_consent\": \"DENIED\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"code": 123,
"title": "<string>",
"measurement_consent": "GRANTED",
"quality_rating": 123,
"quality_reason": "<string>",
"status": 1,
"lost_reason_description": "<string>",
"won_reason_description": "<string>"
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Authorizations
Chave de integração com prefixo wegly_, enviada em Authorization: Bearer . Não é JWT. A chave deve estar ativa, não excluída e dentro da validade. Com allowed_domain, Origin (ou Referer na ausência de Origin) precisa informar o hostname permitido. A empresa e as permissões são obtidas pela chave.
Path Parameters
UUID do registro.
Body
O PUT exige title. Os demais campos são opcionais; campos omitidos são preservados. Use as rotas de seguidores para alterar seguidores.
1 - 150Usuário ativo da empresa. Um responsável inativo retorna 400; a substituição pelo master vale apenas na criação.
1, 2, 3, 4, 5 Valor monetário. Ignorado quando a oportunidade negocia por produtos ou por proposta.
0 = privado (responsável e supervisores), 1 = equipe/responsável, 2 = público.
0, 1, 2 1 = frio, 2 = morno, 3 = quente.
1, 2, 3 Lista de operações de associação ou remoção de participantes. delete: true remove a pessoa da oportunidade; omita ou envie false para adicionar.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Quando enviado com itens, substitui todas as respostas do registro; reenvie o conjunto completo.
Show child attributes
Show child attributes
Quando omitido, preserva o valor efetivo atual.
GRANTED, DENIED, UNSPECIFIED Rastreio de marketing. Todos os valores são sanitizados (trim) e campos vazios são ignorados. utm_* são normalizados para wegly_* equivalentes quando estes não forem enviados. utm_term vira utm_search_term se o campo específico não for enviado. url_conversion tem seus parâmetros extraídos automaticamente (wegly_code, wegly_source, wegly_campaign, wegly_ad_set, wegly_content, wegly_displayed_on, wegly_conversion_tool, utm_*, gclid, fbclid). Em POST e PUT, measurement_consent na URL também é extraído. Valor desconhecido, duplicado divergente ou presente em URL malformada vira UNSPECIFIED; divergência com o body retorna 400. Sem GRANTED, obref é removido da query e o fragmento inteiro da URL completa é descartado; a URL integral nunca é registrada em logs. O alias isolado, um objeto vazio ou somente campos nulos/em branco não constituem aquisição e não criam snapshot/log. Quando wegly_code referencia um tracker válido e não há crm_lead_source_id, a origem do registro é a do tracker. No PUT, os campos enviados corrigem a aquisição atual: omitidos são preservados e null limpa o valor. Quando não há tracker nem origem explícita, wegly_source ou utm_source busca/cria a origem automaticamente.
Show child attributes
Show child attributes
Origem existente. null remove a origem do registro e da aquisição atual.
1 = aberta, 2 = ganha, 3 = perdida.
1, 2, 3 Data-base opcional entre 1980-01-01 e 2100-12-31, aceita somente na requisição que muda o status para ganho (status = 2 em uma oportunidade ainda não ganha). Se omitida, a API fixa a data civil do ganho para a proposta principal que possuir prazos.
IDs de tags existentes. São acrescentadas às tags atuais.
Response
Oportunidade atualizada.
Retorno enxuto da atualização de oportunidade.
Consentimento para mensuração: GRANTED autoriza, DENIED recusa e UNSPECIFIED registra que não houve decisão informada. Em respostas de registros históricos sem valor canônico oficial, a API usa a decisão oficial do snapshot ativo mais recente; snapshots sem decisão não a sombreiam e a ausência de ambos resulta em UNSPECIFIED, sem backfill.
GRANTED, DENIED, UNSPECIFIED 1 = aberta, 2 = ganha, 3 = perdida.
1, 2, 3 