Pular para o conteúdo

Um público inteiro, seja qual for a origem dele

GET
/v1/t/{tenantID}/publicos/{id}
curl --request GET \
--url https://dash.owiew.com/v1/t/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/publicos/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>'

O cabeçalho comum mais os blocos que AQUELA origem tem.

Desenhe pela PRESENÇA de cada bloco, nunca pelo valor de origem. Um montado traz briefing, sugestao, redes e termos; um semelhante traz lista, qualidade, exportacoes e termos. Uma origem nova não deve quebrar quem só sabia das duas.

Só a declaração existe no banco. A proposta é recalculada a cada leitura, a partir do repertório vigente — a mesma requisição pode devolver outro ranking amanhã sem ninguém ter editado nada. É de propósito: uma sugestão gravada continuaria recomendando o que o catálogo já desaprendeu, e sem sintoma nenhum, porque a linha estaria lá, íntegra, apenas velha.

Se você guarda esta resposta, não trate a diferença entre duas leituras como mudança do cliente: compare publico, briefing e lista, que são as partes declaradas.

Nenhum modelo de linguagem participa disto. As regras são determinísticas e o texto livre do briefing entra apenas como palavra-chave para ordenar os termos.

Continua sem nenhum contato, nem resumido. Os resumos só saem pela exportação, que exige publico.exportar e não está nesta especificação.

Exige a permissão publico.read.

tenantID
required
string format: uuid

O cliente. Vem SEMPRE do caminho — nunca de cabeçalho, nunca de cookie. Ele é conferido contra o token: um identificador que não bata com o do token devolve 403, e não uma resposta vazia.

id
required
string format: uuid

O recurso. Um identificador que exista, mas pertença a outro cliente, responde 404 — não 403, e não uma resposta vazia.

OK

Media typeapplication/json

Um público, seja qual for a origem dele.

Só publico vem sempre. Os outros oito blocos dependem da origem, e a ausência de um deles é a resposta certa e não uma falha: desenhe pela presença, nunca pelo valor de origem.

Nada além de publico, briefing e lista existe no banco. sugestao, redes e termos são recalculados a cada leitura: a mesma requisição pode devolver outro ranking amanhã, sem ninguém ter editado nada. Guardar esta resposta e comparar com a de ontem como se fosse mudança do cliente produz alerta falso.

object
publico

Identidade e ORIGEM de um público. É a única parte da resposta que as duas origens sempre trazem.

object
id
string format: uuid
nome
string
origem

De onde ele veio. montado saiu do questionário de briefing; semelhante saiu de um CSV de clientes importado.

Ela não decide sozinha o que a resposta traz. Quem integra deve desenhar pela PRESENÇA de cada bloco — uma origem nova aqui não deve quebrar um cliente que só sabia das duas.

string
Allowed values: montado semelhante
criado_em
string format: date-time
briefing

O que o cliente DECLAROU sobre o próprio negócio. É declaração de gente: nenhuma API descobre que a pousada atende num raio de 40 km, e nada aqui pode ser reconstruído depois a partir das plataformas.

object
id
string format: uuid
nome
string
mercado
string
natureza
string
tangibilidade
string
ticket

A faixa (t1–t6), não o valor.

string
regiao

Só os campos da abrangência escolhida vêm preenchidos; os outros vêm vazios ou null.

object
abrangencia
string
ufs

Siglas, quando estados.

Array<string>
municipios

Quando cidades.

Array<string>
centro

Quando raio.

string
raio_km

Em quilômetros, quando raio.

integer
paises

ISO de 2 letras, quando internacional.

Array<string>
eh_local

CALCULADO, não declarado: raio, ou cidades com no máximo três municípios. É o que faz rede de alcance largo cair no ranking.

boolean
descricao
string
nicho
string
diferenciais

Texto livre. Nenhum modelo de linguagem o lê: ele entra só como palavra-chave para ordenar os termos sugeridos.

string
ajuste

A DISCORDÂNCIA do cliente com a proposta — a única parte dela que é persistida. Discordância é declaração; recomendação é cálculo.

object
idade_minima

0 = não ajustado.

integer
idade_maxima

0 = não ajustado.

integer
genero

Vazio = não ajustado.

string
classes
Array<string>
observacao
string
vazio

CALCULADO: nenhum dos cinco acima foi preenchido.

boolean
criado_por

O sujeito do token verificado de quem criou. Nunca vem do corpo da requisição.

string
criado_em
string format: date-time
atualizado_em
string format: date-time
sugestao

O recorte proposto, já com o ajuste do cliente aplicado. Só em origem: montado.

object
idade_minima
integer
idade_maxima
integer
genero

equilibrado na proposta original. O gênero NÃO é presumido a partir da categoria do produto — recortar por ele é escolha do cliente, e o motivo genero_nao_presumido diz isso na tela.

string
classes
Array<string>
papel_de_decisao

Quem decide a compra. Só vem em b2b e ambos; em B2C é null. Sem vocabulário fechado declarado — ver a dívida da entrega de 2026-09-28.

Array<string>
ciclo_minimo_dias

Em DIAS.

integer
ciclo_maximo_dias

Em DIAS. É o que define a janela de atribuição honesta: medir uma venda de ciclo de 45 dias numa janela de 7 faz o canal parecer ruim quando ele não é.

integer
objetivo
string
Allowed values: alcance video trafego lead conversao
ajustado

O cliente corrigiu algo da proposta original.

boolean
motivos

Por que este recorte, eixo por eixo.

Array<object>
object
codigo

Código fechado, traduzido na tela. É CÓDIGO e não frase: a frase muda, e uma frase gravada em 2026 continuaria aparecendo depois de o texto ter sido reescrito. Código desconhecido deve ser exibido CRU, nunca omitido — a linha que some leva junto a informação de que ela existia.

string
eixo

O eixo do briefing que originou o motivo (ticket, mercado, tangibilidade, natureza). Pode vir vazio: há motivos sem eixo, como genero_nao_presumido e custo_acima_da_mediana.

string
redes

As dez redes, ordenadas por nota decrescente e desempatadas por id. Vêm sempre todas, inclusive as que não servem — saber que uma rede foi considerada e reprovada é informação; ela sumir da lista não é. Só em origem: montado.

Array<object>
object
id
string
plataforma
string
nota

Serve para ORDENAR, e só. Não é previsão de resultado, nem probabilidade, nem score de confiança. A diferença entre 78 e 74 não significa nada fora da ordem.

integer
<= 100
favoravel

O que pesou a favor. Pode vir vazio.

Array<object>
object
codigo

Código fechado, traduzido na tela. É CÓDIGO e não frase: a frase muda, e uma frase gravada em 2026 continuaria aparecendo depois de o texto ter sido reescrito. Código desconhecido deve ser exibido CRU, nunca omitido — a linha que some leva junto a informação de que ela existia.

string
eixo

O eixo do briefing que originou o motivo (ticket, mercado, tangibilidade, natureza). Pode vir vazio: há motivos sem eixo, como genero_nao_presumido e custo_acima_da_mediana.

string
ressalvas

O que pesou contra. A rede em PRIMEIRO lugar também costuma trazer ressalvas, e isso não é defeito — primeira colocada sem nenhuma ressalva é sinal de repertório pobre, não de rede perfeita.

Array<object>
object
codigo

Código fechado, traduzido na tela. É CÓDIGO e não frase: a frase muda, e uma frase gravada em 2026 continuaria aparecendo depois de o texto ter sido reescrito. Código desconhecido deve ser exibido CRU, nunca omitido — a linha que some leva junto a informação de que ela existia.

string
eixo

O eixo do briefing que originou o motivo (ticket, mercado, tangibilidade, natureza). Pode vir vazio: há motivos sem eixo, como genero_nao_presumido e custo_acima_da_mediana.

string
termos

Termos de segmentação para procurar no Gerenciador de cada plataforma.

Vêm nas DUAS origens. Num público montado eles saem do briefing; num semelhante eles são os termos de segmentação de PÚBLICO SEMELHANTE — o que procurar no Gerenciador depois de subir o arquivo. Um import que só entrega download é um download, e não um público.

Array<object>
object
id
string
eixo
string
Allowed values: interesse comportamento demografia cargo busca semelhante
sementes

Mapa plataforma → texto a digitar na busca de segmentação dela.

São TEXTOS, nunca identificadores de interesse. Resolver o id que a Meta ou o Google usa exige a API de busca de segmentação de cada uma, que não é chamada aqui — e inventar um id seria a pior coisa que este produto poderia fazer.

Plataforma AUSENTE do mapa significa que não há equivalente honesto lá. A ausência é informação: ela não é preenchida com string vazia.

object
key
additional properties
string
sinonimos

Palavras que, citadas pelo cliente, fazem este termo subir. Usadas só para ordenar.

Array<string>
lista

O cabeçalho da base que originou um público semelhante. Nenhum contato vem aqui, nem resumido.

A lista é a unidade de BASE LEGAL e de RETENÇÃO: base_legal, retencao_dias e expira_em valem para todos os contatos dela, e é por isso que apagar o público apaga os contatos junto.

object
id
string format: uuid
nome
string
base_legal

Escolhida ANTES do primeiro byte subir. Base legal escolhida depois do upload é justificativa, não fundamento.

string
Allowed values: consentimento contrato legitimo_interesse
retencao_dias

Prazo declarado, em dias. O piso de 1 existe para que zero não vire, por engano de tela, uma lista que nunca vence.

integer
>= 1 <= 730
expira_em

Quando a lista deve ser apagada. É GRAVADO, não derivado da leitura — quem apaga é uma rotina de retenção, e ela não deve reimplementar a regra de prazo.

Mudar retencao_dias não move este campo sozinho. Prorrogar é escrever os dois, e isso é decisão consciente em vez de efeito colateral.

string format: date-time
criado_por

O sujeito do token verificado de quem subiu a lista. Nunca vem do corpo. Numa tabela com base legal declarada, ‘quem subiu isto’ é a primeira pergunta de qualquer apuração.

string
criado_em
string format: date-time
qualidade

O que a importação encontrou no arquivo. São contagens de LINHA, e toda decisão sobre a base sai daqui.

object
linhas_lidas

Total de linhas do arquivo original.

integer
aproveitadas

Linhas que viraram contato único. NÃO É ALCANCE — ver o cabeçalho deste arquivo.

integer
duplicadas

Descartadas por repetir a chave. Proporção alta quase sempre denuncia exportação bagunçada de CRM, não base ruim.

integer
sem_identificador

Linhas sem e-mail nem telefone. Proporção alta quase sempre revela COLUNA MAPEADA ERRADA — nome e cidade sozinhos não casam ninguém em plataforma nenhuma.

integer
com_email
integer
com_telefone
integer
com_nome
integer
avisos

Códigos, não frases — frase gravada envelhece junto com o texto que a substituiu.

Dois avisos da MESMA faixa podem sair juntos: entre 100 e 999 aproveitadas, serve_so_na_meta e acima_do_minimo_abaixo_do_recomendado vêm os dois. Uma interface que espere um só mostra metade do diagnóstico.

Array<string>
Allowed values: mapeamento_provavelmente_errado abaixo_do_minimo_de_todas serve_so_na_meta acima_do_minimo_abaixo_do_recomendado muita_duplicada so_email so_telefone
exportacoes

Uma entrada por plataforma com formato de exportação implementado, em ordem fixa: meta, google, tiktok. Só em origem: semelhante.

Array<object>
object
plataforma
string
Allowed values: meta google tiktok
minimo

O piso publicado da plataforma, comparado contra aproveitadas.

integer
aproveitadas

Repete qualidade.aproveitadas, para a comparação ficar lado a lado.

integer
serve

aproveitadas >= minimo.

boolean
pode_exportar

É UX, não controle. Ele existe para a tela não desenhar um botão que vai responder 403, e é calculado contra o token DESTA requisição. Quem decide o download é o servidor, que exige publico.exportar na própria rota de exportação — o endereço é digitável, e é o tipo de coisa que alguém manda num chat.

Só em origem: semelhante: um público montado não tem arquivo para exportar, e pedir a exportação dele responde 409 ORIGEM_INCOMPATIVEL — nunca 404 (o público existe e está na tela de quem pediu) e nunca 400 (a requisição está inteiramente correta).

boolean

Example

{
"publico": {
"origem": "montado"
},
"sugestao": {
"objetivo": "alcance"
},
"termos": [
{
"eixo": "interesse"
}
],
"lista": {
"base_legal": "consentimento"
},
"qualidade": {
"avisos": [
"mapeamento_provavelmente_errado"
]
},
"exportacoes": [
{
"plataforma": "meta"
}
]
}

Token ausente, malformado ou vencido.

Media typeapplication/json
object
error
object
code

Código estável, seguro para comparar.

string
message

Texto para pessoa. Pode mudar entre versões — não decida nada a partir dele.

string
trace_id

Identificador da ocorrência. Cite-o ao pedir suporte.

string

Example generated

{
"error": {
"code": "example",
"message": "example",
"trace_id": "example"
}
}

O token é válido, e o escopo não. Ou ele foi emitido para outro cliente, ou o papel não inclui a permissão da rota. NÃO é 404 de propósito: esconder um erro de escopo atrás de ‘não encontrado’ faz quem integra procurar o problema no lugar errado.

Media typeapplication/json
object
error
object
code

Código estável, seguro para comparar.

string
message

Texto para pessoa. Pode mudar entre versões — não decida nada a partir dele.

string
trace_id

Identificador da ocorrência. Cite-o ao pedir suporte.

string

Example generated

{
"error": {
"code": "example",
"message": "example",
"trace_id": "example"
}
}