AD, tecnicamente: como funciona e como integrar
Tudo o que uma campanha precisa está funcionando: contas, campanhas, criativos, zonas, o motor de veiculação, o painel e os relatórios. Esta página é gerada a partir do mesmo código que veicula os anúncios — cada limite, macro, evento e rota abaixo é lido do fonte a cada build, nunca digitado à mão.
O que é o AD e para quem é
O AD é um servidor de anúncios direto: sem leilão e sem caixa-preta. Um publisher vende o espaço publicitário de um site que já opera; um anunciante escolhe as zonas exatas, define a segmentação e lança. Uma mesma conta pode ter qualquer um dos dois papéis — ou os dois.
Anunciantes
Crie uma campanha, adicione criativos, passe pela revisão, compre um espaço em uma zona da vitrine e veja impressões e cliques chegarem aos relatórios.
Publishers
Cadastre um site, defina zonas com tamanho, modelo de venda e preço, cole uma etiqueta e fique com 80% de cada venda. Veicular seus próprios anúncios nas suas próprias zonas é grátis.
Os dois ao mesmo tempo
Uma conta de anunciante vira publisher no momento em que cadastra um site; nada é duplicado. O painel mostra as abas de cada papel que você tiver.
Como entrar
Entre em forhosting.com e escolha “Gerenciar meu AD” no menu da sua conta. O painel abre com uma sessão curta — uma credencial que expira em minutos (nunca mais de 60) e não deixa nenhuma chave permanente no navegador. Quando expirar, abra de novo pelo mesmo menu.
Para integrações, crie uma chave de API no painel (Perfil) ou com POST /tenants/:id/keys. Dois escopos: tenant (acesso completo à sua própria conta) e read (somente leitura, para painéis e bots). A chave é mostrada uma única vez; se for perdida, crie outra e revogue a antiga.
Nossa equipe pode abrir seu painel “como cliente” para ajudá-lo: essa sessão dura no máximo 15 minutos e leva o nome de quem a abriu. A casa nunca opera a sua conta com uma chave permanente.
Campanhas e segmentação
A campanha é o contêiner: nome, datas, orçamentos opcionais e a segmentação compartilhada pelos seus criativos. Nasce como draft; você a coloca active, paused ou ended quando terminar. Só são veiculados os criativos ativos de uma campanha ativa — pausar a campanha interrompe a entrega na hora.
| Critério | Como funciona |
|---|---|
| País, região, cidade | Uma lista de países; opcionalmente uma região e uma cidade. A cidade exige sua região; a região exige seu país. Se a localização do visitante for desconhecida e a campanha pedir geo, o anúncio não é veiculado — nunca é veiculado por acidente. |
| Idioma do navegador | Uma lista de códigos de idioma (até 30) informados pelo navegador do visitante — que não precisa ser o do site. Um visitante cujo idioma não esteja na lista não é atendido, então deixe uma campanha sem idiomas: ela recolhe todos os demais. |
| Dispositivo | any, mobile ou desktop. |
| Sistema operacional | Uma lista entre: iPhone, iPad, iPod, Windows, Android, BlackBerry, Ubuntu, Linux, CrOs, Mac OS X. |
| Referrer | A página de onde o visitante veio precisa conter o texto que você definir (sem diferenciar maiúsculas). |
| Datas | Início e fim da campanha. Cada criativo também pode ter suas próprias datas; a janela efetiva é a interseção das duas. |
| Limite de frequência | Por criativo: no máximo N impressões por visitante, contadas em um cookie próprio que dura 3 dias. |
| Limites rígidos | Por criativo: impressões totais, impressões por dia e cliques totais. Ao atingir um limite o criativo para de ser veiculado em menos de 5 minutos. |
Entre as campanhas elegíveis o motor não sorteia ao acaso: ele alterna. Veicula uma, depois a outra, e só quando estão empatadas o peso que você deu a cada criativo desempata — mostrar dez vezes seguidas a mesma campanha ao mesmo visitante não vende nada. Os turnos são contados por visitante e por zona, no próprio navegador do visitante; com os cookies bloqueados, o motor volta ao sorteio ponderado. Um criativo com limite de entrega também tem pacing: a cada 5 minutos seu peso é reajustado para que o orçamento se distribua pelos dias da campanha em vez de queimar de manhã. O pacing só freia — nunca inventa tráfego.
Um criativo só é veiculado em uma zona onde tenha um pedido pago (veja “Comprar espaço”). Campanha, criativo, zona e pedido aparecem no painel (Campanhas, Criativos, Comprar espaço).
Criativos: seis tipos, uma etiqueta
Todo criativo tem uma URL de clique, um tamanho fixo opcional e um peso. Os limites desta tabela são os que a API aplica no upload — são lidos do código, não escritos aqui.
| Tipo | O que você envia | Limites |
|---|---|---|
image · imagem | Um arquivo: PNG, JPEG, GIF, WebP, AVIF. | Até 2 MB e 2000×1800 px. Se o criativo declarar um tamanho fixo, o arquivo precisa medir exatamente isso. |
text · link de texto | Um título e um corpo opcional, sem arquivo. | Renderizado como um link no estilo da própria zona. |
html5 · HTML5 | Um ZIP com index.html na raiz (ou dentro de uma única pasta), ou um único arquivo HTML. | ZIP de até 10 MB. Veiculado em um iframe com política de conteúdo estrita: sem requisições a outras origens. |
video · vídeo | Um arquivo: MP4, WebM. Pôster e botão de som opcionais. | Até 30 MB. Toca sem som e com autoplay no nosso player, e os relatórios recebem um evento start e um end por exibição — mais um evento debug que nunca conta como nenhum dos dois, para quando você estiver conferindo uma peça. |
vignette · intersticial | Uma imagem (mesmas regras de image) ou um vídeo. | Exibido como camada em tela cheia. A zona decide quando aparece — em um link, depois de N navegações ou quando o visitante faz o gesto de sair — e a impressão conta quando a camada abre. |
script · script | Seu próprio HTML/JS com as macros abaixo, mais até 5 imagens. | Só em zonas que aceitem o formato script. É código de terceiro rodando na página do publisher, então a revisão manual é a única barreira — nunca é pulada. |
O contrato HTML5
Seu index.html é carregado em um iframe com o destino do clique na query como clickTag. Leia-o e use-o como href da sua área clicável — essa URL é assinada e conta o clique; um link escrito à mão não conta.
// index.html — the click goes where the engine says
var clickTag = new URLSearchParams(location.search).get("clickTag");
document.getElementById("ad").href = clickTag;
Se o criativo precisar crescer, informe à página sua altura real com postMessage. A etiqueta também informa ao criativo a largura do espaço ao carregar e a cada redimensionamento, e envia visible na primeira vez que o espaço entra na tela — o momento de iniciar uma animação. Alturas de até 10000 px são aplicadas.
// creative → page: ask for the real height (applied up to 10000 px)
parent.postMessage({ fh: "resize", nh: document.documentElement.scrollHeight }, "*");
// page → creative: { fh: "size" | "visible" }
window.addEventListener("message", function (ev) {
if (ev.data && ev.data.fh === "visible") { /* start your animation */ }
});
Um criativo mínimo que faz as duas coisas, pronto para enviar como está: baixe o ZIP de exemplo
Macros dos criativos script
Em um criativo script o motor substitui estes marcadores ao publicar a zona. Um template do painel é a mesma coisa com marcadores extras que você preenche em um formulário.
| Macro | Substituído por |
|---|---|
[CLICKTAG] · [TRACKLINK] | A URL assinada do clique — use como href. Sem ela o clique não é contado. |
[LINK] | A URL de destino crua, para código que precise dela sem o rastreador. |
[TARGET] | _blank ou _self, conforme o criativo. |
[ID] | O id do criativo. |
[TITLE] · [TITOLO] | O título do criativo (escapado como HTML). |
[IMG0] … [IMG4] | A URL de cada imagem enviada, na ordem. |
[TIMESTAMP] · [RANDOM] | Um carimbo de tempo e um número aleatório, fixados ao publicar a zona — para quebrar o cache dos seus próprios pixels. |
[CLICKTAG:<id>] · [TRACKLINK:<id>] | A URL assinada do clique de um destino nomeado, para que um criativo com dois botões conte cada um separadamente. |
Vários destinos em um mesmo criativo
Um criativo pode levar até 8 destinos nomeados além da sua URL de clique principal — um botão da App Store e um do Google Play na mesma peça, por exemplo. Cada um tem um id de até 20 caracteres minúsculos; main é reservado para a URL principal.
Em um criativo HTML5 eles chegam na query como clickTag_<id>, ao lado do clickTag de sempre; em um criativo script você escreve [CLICKTAG:<id>]. Todos passam pelo rastreador de cliques, então somam no total e se detalham por botão nos relatórios.
Tracking de terceiros e consentimento
Qualquer criativo pode levar um código de tracking (um pixel ou script de um fornecedor de medição). Ele é emitido depois do anúncio com cada src convertido em data-src, de modo que nada carrega até a etiqueta permitir.
Se você informar o id IAB TCF v2 do fornecedor, o código só carrega após o consentimento do visitante para esse fornecedor, com ${GDPR} e ${GDPR_CONSENT_n} preenchidos. A etiqueta espera até 10 segundos pelo gestor de consentimento do site; sem id de fornecedor o código carrega como um elemento comum.
Revisão manual
Todo criativo nasce en_revision e é revisado por uma pessoa antes de poder ser veiculado. Aprovado, você o coloca active ou paused; rejeitado, você vê o motivo e pode corrigir e reenviar. Nada de um criativo sem revisão — nem o markup, nem o script, nem o código de tracking — chega a um visitante.
Alterar a URL de clique, o conteúdo ou o arquivo de um criativo aprovado o devolve à revisão: o que foi aprovado é o que é veiculado, nunca outra coisa.
Comprar espaço
A vitrine lista todas as zonas à venda: site, tamanho, formatos aceitos, modelo de venda e o preço definido pelo publisher. Você escolhe uma zona, um criativo de um formato que a zona aceite, um valor e uma data de início. A cotação e a cobrança usam a mesma fórmula:
| Modelo | Você paga por | Você recebe |
|---|---|---|
cpm | mil impressões | impressões = valor × 1000 / preço |
cpc | clique | cliques = valor / preço |
cpd | dia | dias = valor / preço |
O pedido mínimo é $5; a cotação recusa qualquer valor abaixo. Um pedido é uma compra pré-paga de volume — o dinheiro se move uma vez, na compra. Envie uma idempotencyKey e uma requisição repetida devolve o mesmo pedido em vez de criar outro.
Como se paga
| Via | Como funciona |
|---|---|
| Saldo da conta | O pedido é pago na mesma chamada com o seu saldo For Hosting. Se o saldo não bastar, o pedido fica pendente e a resposta aponta para recarregar; você pode tentar o pagamento de novo depois. |
| Manual | O pedido é criado pendente; nossa equipe o marca como pago ao receber o pagamento fora do painel. Não veicula até lá. |
| Anúncios da casa | Seu próprio criativo na sua própria zona: o pedido nasce pago a custo zero. Mesmo registro, sem dinheiro. |
Quando um pedido é marcado como pago, 80% do seu preço final é creditado ao publisher da zona — sobre o pedido inteiro, não rateado pela entrega. A zona é republicada imediatamente e seu criativo começa a veicular no minuto seguinte.
Sites, zonas, etiqueta e pagamentos
Sites
Cadastre um site pelo domínio (Seja um publisher). Ele nasce pendente e se verifica sozinho: publique o token que damos em /.well-known/fh-ad-site-verification.txt ou na home, peça a verificação e o site se ativa por conta própria — sem fila e sem que ninguém daqui precise olhar antes. Um domínio sem verificação não pode receber repasse. Retirar um site inicia uma quarentena de 90 dias sobre o domínio: ninguém mais pode cadastrá-lo enquanto isso e herdar seu histórico.
Zonas
A zona é o espaço vendável: um nome, um tamanho em pixels (ou -1 para largura adaptável), os formatos que aceita, um modelo de venda com seu preço e se está à venda na vitrine. Você pode definir um criativo de reserva próprio que veicula quando nenhum outro é elegível — ele ignora segmentação e limites.
Dois comportamentos opcionais rodam no navegador do visitante: a atualização automática (uma nova requisição a cada N segundos, mínimo 5; uma aba oculta nunca atualiza, e um espaço que volta vazio mantém o anúncio anterior) e o repasse de parâmetros (a query da página viaja com o clique até o destino do anunciante).
Como o intersticial é disparado
O overlay é uma propriedade da zona, não do site: não é preciso colar nada para ele — a tag constrói o que precisa — e você muda o ritmo no painel onde compra. Quatro modos:
| Modo | Quando aparece | Ajuste |
|---|---|---|
enlace | O visitante clica em um link que corresponde ao seletor da zona. | Um seletor CSS — por padrão p a, nav a, h2 a. |
navegacion | Depois de N navegações do mesmo visitante. Contam os carregamentos de página e também as navegações internas, então a mesma etiqueta funciona em um site clássico e em um aplicativo de página única sem que ninguém escreva uma linha. | Um calendário escalonado, por exemplo [3,5,10,20]: dispara na 3ª navegação, depois deixa passar 5, depois 10, depois 20, e repete o último. Até 20 passos, cada um entre 1 e 500. |
salida | O visitante faz o gesto de abandonar a aba. Com ponteiro fino é o mouse subindo para a barra de endereços; no celular é o botão voltar, ou retornar depois de um tempo fora — nunca uma rolagem, que seria uma emboscada. | Minutos de silêncio entre duas camadas para o mesmo visitante, até 10080. |
popunder | O primeiro clique do visitante em um link real abre o destino dele em uma nova aba, e a aba que ele deixa para trás carrega o anúncio — só quando ele já está olhando para outro lugar, e é cancelado se ele voltar. | Um calendário escalonado, uma pausa em minutos, ou os dois — um dos dois é obrigatório. E um destino: uma página nossa com o anúncio dentro, ou uma URL específica. |
Um ritmo fixo cansa o visitante no dia 30 tanto quanto no dia 1 — é para isso que serve o calendário escalonado: cobra a primeira impressão cedo e depois sai de cena. A contagem fica no próprio navegador do visitante; se o armazenamento estiver bloqueado, ela passa a contar na memória em vez de quebrar.
Quando os anúncios são pedidos — o seu site vem primeiro
Os anúncios não podem deixar o seu site lento, e o ajuste fica aqui, não no seu HTML. Cada site escolhe quando a etiqueta pede o primeiro anúncio:
| Modo | Quando aparece |
|---|---|
carga-ocioso | Padrão. A página termina de carregar e então a etiqueta espera uma folga em que o navegador não tenha nada a fazer — com um teto de 2000 ms para que, em uma aba ocupada, os anúncios apareçam do mesmo jeito. |
carga | Assim que a página terminar de carregar. |
retraso | Uma espera fixa depois do carregamento, entre 100 e 15000 ms. |
inmediato | O quanto antes, disputando a rede com o seu próprio conteúdo. Só se você souber por que quer isso. |
E enquanto o anúncio está a caminho o espaço não fica em branco: a etiqueta pinta um marcador de lugar e aprende a altura — a primeira visita reserva um tamanho prudente e, a partir da segunda, o espaço reservado é o exato, então a página não pula quando o anúncio chega. Esse pulo é o que o Google mede como layout shift, e é o motivo habitual de uma rede de anúncios custar a nota de um site.
A etiqueta
Cole onde o anúncio deve aparecer — ou deixe a zona dizer onde fica e pule esta etapa inteira (veja «Onde sai o anúncio», mais abaixo). O id da zona vem do painel (Sites e zonas). A mesma tag serve todos os formatos que a zona aceita; uma zona intersticial usa a tag padrão também.
Padrão (um div e um script, assíncrona):
<div data-fh-ad="zon_XXXXXXXXXXXXXXXXXXXXXXXX"></div>
<script src="https://api.ad.forhosting.com/ad-tag.js" async></script>
Legada, para CMS que não executam scripts assíncronos:
<script src="https://api.ad.forhosting.com/ad-serve?zone=zon_XXXXXXXXXXXXXXXXXXXXXXXX&mode=js"></script>
Link de texto: uma URL que conta a impressão e redireciona ao anunciante:
https://api.ad.forhosting.com/ad-serve?zone=zon_XXXXXXXXXXXXXXXXXXXXXXXX&mode=link
A etiqueta se atualiza sozinha: sua URL não leva versão e nunca muda, então uma melhoria nossa chega a todos os sites em cerca de 60 minutos e ninguém edita nenhum template (hoje serve v11, no cabeçalho x-tag-version). Espera sua página terminar de carregar antes de pedir qualquer coisa, então os anúncios nunca competem com o seu conteúdo. Suas únicas marcas na sua página são o atributo data-fh-ad e o id do overlay — verificados contra as listas comuns de bloqueio, com zero coincidências. Os limites de frequência usam um cookie próprio.
Se a mesma posição se repete ao longo de uma página — “a cada N mensagens” em um fórum, por exemplo —, a etiqueta pede todas as suas cópias em uma única requisição (até 10), e o limite de frequência avança dentro desse lote, então um mesmo criativo não pode preencher todos os espaços da página. Se o nosso lado não entender o lote, a etiqueta volta a pedir um espaço de cada vez em vez de deixar a página vazia. Repetir uma zona é declarado conosco: como regra, uma zona por posição, porque a zona é o que um relatório agrupa.
Onde sai o anúncio — sem mexer no seu tema
Uma zona pode declarar onde fica: um seletor CSS (até 300 caracteres) e uma posição em relação ao que esse seletor encontrar. O espaço é criado pela tag, então mover um anúncio custa uma mudança no painel e não uma edição do seu tema.
| Posição | Onde fica o espaço |
|---|---|
despues | Logo depois do elemento encontrado. É o padrão. |
antes | Logo antes dele. |
dentro-inicio | Dentro dele, como primeiro filho. |
dentro-fin | Dentro dele, como último filho. |
Dois números opcionais governam a repetição: um coloca o espaço a cada N ocorrências (até 50) e um teto limita quantos espaços são criados — 4 por omissão quando há repetição, 20 no máximo. Sempre há teto: um seletor solto como p casa centenas de vezes num artigo longo, e esse limite não pode depender de quem configura lembrar de colocá-lo.
Duas coisas que vale saber. Um div data-fh-ad que você mesmo coloque no tema manda: a tag não vai criar um segundo espaço para essa zona, então dá para migrar de um método ao outro sem pagar duas impressões por uma. E um seletor que não casa não dá erro — a página fica perfeita sem o anúncio e o painel continua verde. Confira a colocação num navegador, no desktop e no celular: um seletor pode existir no artigo e não na home, ou medir 1360 px no desktop e 0 no telefone.
WordPress: nada para colar
Se o seu site é WordPress há um plugin, forhosting-ad. Instale e ele se apresenta sozinho: publica um desafio no seu próprio domínio, nós lemos, e a credencial é entregue uma única vez. Você não digita nenhuma chave, nenhum id nem nenhum token — e provar que controla o domínio não é o mesmo que ter sido convidado: nada é emitido até que o site seja aprovado.
A partir daí as zonas são geridas pelo painel, colocação incluída. O plugin ainda pede ao cache de páginas que o seu site usar que limpe as páginas cujo HTML mudou — reconhece os habituais e pede a cada um do seu jeito. Uma página em cache é o motivo mais comum de a tag estar no seu HTML e o anúncio continuar não aparecendo, e isso não se vê pela linha de comando: a cópia velha só é servida a um navegador de verdade.
Há um segundo plugin, forhosting-ad-updater, que recebe um pacote e o instala. Isso é, por desenho, um canal de execução remota, então só o instalamos em sites nossos; no seu, as atualizações chegam pelo canal próprio do WordPress e você decide quando aplicá-las.
Pagamentos
Seus 80% de cada pedido pago se acumulam no painel (Pagamentos). Quando o acumulado chega a $10, solicite o pagamento com o método do seu perfil (paypal, bank, other); nossa equipe paga fora do painel e registra a referência.
Estados: accrued → requested → processing → paid; um desembolso que falha volta para você com o motivo, para que solicite de novo com os dados corrigidos.
Relatórios
Impressões, cliques e início/fim de vídeo são contados na borda, a cada requisição. Antes de contar, o tráfego é filtrado: rastreadores conhecidos pelo user agent, redes de data center, requisições com pontuação de bot muito baixa e qualquer IP que repita a mesma requisição em menos de 2 segundos. Uma requisição filtrada recebe o anúncio ou o redirecionamento do mesmo jeito — o que se protege é o contador.
A cada 5 minutos as contagens são consolidadas em linhas diárias por criativo, zona e host do referenciador. O dia em curso pode atrasar até esse tempo; os dias fechados nunca mudam.
O painel (Relatórios) mostra totais e uma série diária, o CTR (cliques ÷ impressões × 100) e o eCPM (valor entregue × 1000 ÷ impressões), para o lado anunciante ou o lado publisher, e um ranking agrupado por qualquer uma de seis dimensões:
| Agrupar por | O que você obtém |
|---|---|
creative | Uma linha por criativo. |
campaign | Uma linha por campanha. |
zone | Uma linha por zona. |
site | Uma linha por site, somando suas zonas. |
refHost | Uma linha por host da página de onde veio a impressão — só o host, nunca a URL. |
link | Uma linha por destino nomeado: em qual dos seus botões foi clicado. Linhas desse tipo trazem cliques e nenhuma impressão, então leia-as como um detalhamento, nunca como um total. |
Qualquer uma dessas visões também pode ser filtrada por campanha, criativo, zona, host do referenciador ou destino, e os mesmos números estão disponíveis pela API.
Antes de qualquer contagem, o tráfego passa pelo filtro de bots, que a casa opera em um de três modos: block (o padrão: as requisições filtradas recebem o anúncio do mesmo jeito, só não contam), log (contam e ficam registradas à parte, para medir antes de decidir) e off.
Referência da API
URL base https://api.ad.forhosting.com. Envie sua chave como token Bearer; corpos e respostas são JSON. Toda resposta tem a forma {"success":true,"data":…} ou {"success":false,"error":{"code","message"}} com o status HTTP correspondente.
curl https://api.ad.forhosting.com/me \
-H "Authorization: Bearer ads_ten_…"
Escopos das credenciais
| Escopo | O que pode fazer |
|---|---|
session | O que o painel usa: sua própria conta, acesso completo, expira em minutos. Emitido pelo portal ao abrir o painel. |
tenant | Sua própria conta, acesso completo, permanente. Para as suas integrações. |
read | Sua própria conta, somente leitura. Para painéis e bots que não devem alterar nada. |
system | A casa: qualquer conta (com um tenantId explícito), revisões, verificação de sites, pagamentos manuais e desembolsos. A equipe usa uma sessão system que também expira. |
Uma credencial tenant, read ou session opera sempre a sua própria conta — um tenantId enviado pelo cliente é ignorado. Um id que pertence a outro devolve 404, não 403: a API nunca confirma que ele existe.
Rotas
Todas as rotas que o serviço anuncia, com o escopo que o roteador exige — derivado do próprio roteador a cada build.
| Método | Rota | Escopo |
|---|---|---|
| GET | / | pública |
| GET | /ad-serve | pública |
| GET | /ad-click | pública |
| GET | /ad-video-event | pública |
| GET | /ad-a/* | pública |
| GET | /ad-p/* | pública |
| GET | /ad-pu/* | pública |
| GET | /ad-preview/* | pública |
| GET | /ad-tag.js | pública |
| GET | /wp/:plugin.json | pública |
| GET | /wp/:plugin.zip | pública |
| POST | /wp/enroll | pública |
| POST | /wp/enroll/:id/verify | pública |
| POST | /wp/enroll/:id/updater-secret | pública |
| GET | /wp/enroll/:id | pública |
| GET | /wp/altas | system |
| POST | /wp/altas/:id/approve | system |
| POST | /wp/altas/:id/reject | system |
| POST | /wp/altas/:id/reopen | system |
| POST | /wp/altas/:id/adoptar | system |
| POST | /wp/altas/:id/updater-secret | system |
| GET | /wp/preauth | system |
| POST | /wp/preauth | system |
| DELETE | /wp/preauth | system |
| POST | /tenants | system |
| GET | /tenants | system |
| GET | /tenants/:id | qualquer |
| PATCH | /tenants/:id | escrita |
| POST | /tenants/:id/sessions | system |
| POST | /sessions/staff | system |
| DELETE | /sessions/self | qualquer |
| DELETE | /sessions/:id | system |
| GET | /me | qualquer |
| POST | /tenants/:id/keys | escrita / system |
| GET | /tenants/:id/keys | leitura / system |
| DELETE | /tenants/:id/keys/:keyId | escrita / system |
| GET | /me/payout-profile | leitura |
| PUT | /me/payout-profile | escrita |
| POST | /campaigns | escrita |
| GET | /campaigns | leitura |
| GET | /campaigns/:id | leitura |
| PATCH | /campaigns/:id | escrita |
| DELETE | /campaigns/:id | escrita |
| POST | /campaigns/:id/duplicate | escrita |
| POST | /creatives | escrita |
| GET | /creatives | leitura |
| GET | /creatives/:id | leitura |
| PATCH | /creatives/:id | escrita |
| DELETE | /creatives/:id | escrita |
| PUT | /creatives/:id/asset | escrita |
| POST | /creatives/:id/duplicate | escrita |
| POST | /creatives/bulk | escrita |
| GET | /moderation/queue | system |
| GET | /moderation/preview-url/:id | qualquer |
| POST | /creatives/:id/approve | system |
| POST | /creatives/:id/reject | system |
| POST | /creatives/:id/emergency-block | system |
| POST | /sites | escrita |
| GET | /sites | leitura |
| GET | /sites/pending | system |
| GET | /sites/:id | leitura |
| PATCH | /sites/:id | escrita |
| DELETE | /sites/:id | escrita |
| POST | /sites/:id/verify | escrita |
| POST | /zones | escrita |
| GET | /zones | leitura |
| GET | /zones/:id | leitura |
| PATCH | /zones/:id | escrita |
| DELETE | /zones/:id | escrita |
| GET | /zones/:id/tag | leitura |
| GET | /zones/:id/quote | qualquer |
| POST | /zones/:id/publish | system |
| GET | /marketplace | qualquer |
| POST | /checkout | escrita |
| GET | /orders | leitura |
| GET | /orders/:id | leitura |
| GET | /orders/pending | system |
| POST | /orders/:id/pay | escrita |
| POST | /orders/:id/mark-paid | system |
| GET | /payouts | leitura |
| GET | /payouts/pending | system |
| POST | /payouts/:id/request | escrita |
| POST | /payouts/:id/status | system |
| POST | /payouts/:id/mark-paid | system |
| GET | /stats | leitura |
| GET | /stats/top | leitura |
| GET | /settings | qualquer |
| PUT | /settings | system |
| GET | /templates | qualquer |
| POST | /templates | escrita |
| PATCH | /templates/:id | escrita |
| DELETE | /templates/:id | escrita |
| POST | /templates/:id/render | qualquer |
| GET | /geo/countries | qualquer |
| GET | /geo/regions | qualquer |
pública: sem credencial — o caminho de veiculação · qualquer: qualquer credencial válida, na sua própria conta · leitura: tenant, session ou read · escrita: tenant ou session (read é recusado) · system: só a casa
Erros que vale conhecer: 401 unauthorized (credencial ausente ou expirada), 403 forbidden (o escopo não pode fazer isso), 404 not_found, 400 bad_request com o motivo na mensagem, 409 conflict (uma transição de estado não permitida), 402 insufficient_balance ao pagar um pedido e 503 payments_disabled se as vendas estiverem pausadas.
Abra seu painel
Entre em forhosting.com e escolha “Gerenciar meu AD” no menu da sua conta. Publishers cadastram um site e pegam sua etiqueta; anunciantes criam uma campanha e compram um espaço.
Perguntas técnicas
Posso rodar uma campanha real hoje?
Sim — de ponta a ponta: crie a campanha e o criativo no painel, passe a revisão, compre um espaço, e a etiqueta veicula com tracking. Nos seus próprios sites ativa na hora e grátis.
Onde pego a etiqueta?
Painel → Sites e zonas → obter etiqueta. Cada zona tem a sua; a variante padrão é um div e um script.
Por que meu criativo não veiculou na hora?
Todo criativo passa por uma revisão manual rápida antes de veicular — isso protege os sites onde seu anúncio aparece. Rotação e limites também valem: um criativo com teto ou pacing pula pedidos de propósito, e uma zona alterada leva até um minuto para atualizar na borda.