POSTCriar banner
Cria um banner gráfico ou de texto, com janela de datas e segmentação.
Cria um banner para o carrossel da vitrine. Um banner gráfico exige nome e imagem; um banner de texto (type T) dispensa a imagem. A janela de exibição (starts_at, ends_at) e os filtros de página, categoria, canal e dispositivo decidem onde e quando ele aparece.
/api/v1/admin/bannersAdminCria um banner da vitrine
Rota ligada ao módulo banners: com o módulo desligado a resposta é 403. Leitura exige manage_content ou view_content; escrita exige manage_content.
Corpo da requisição
namestringobrigatórioNome do banner (HTML é removido).
image_urlstringImagem. Obrigatória em banner gráfico. Aceita URL
https:// pública ou um caminho /uploads/... da própria loja; outros esquemas e endereços de rede interna são recusados.mobile_image_urlstringArte para celular, com as mesmas regras de
image_url.link_urlstringDestino do clique, mesmas regras de URL.
alt_textstringTexto alternativo.
statusstringpadrão: activeactiveinactivescheduledhiddenEstado do banner. Omitido =
active. Só active é exibido; scheduled fica guardado como rascunho e não liga sozinho.starts_atstringInício da exibição (RFC 3339).
ends_atstringFim da exibição (RFC 3339). Não pode ser anterior a
starts_at.usergroup_idsstringIds de grupos de clientes separados por vírgula. Vazio = todos.
target_pagesarraySlugs de páginas onde exibir. Vazio = em todas.
target_categoriesarrayIds de categorias onde exibir. Vazio = em todas.
channelsarraysitevenddor_appclient_appCanais permitidos. Se enviado, precisa ter ao menos um código válido (veja Canais de exibição). Omitido = todos os canais.
devicesarraymobiletabletdesktopDispositivos permitidos. Omitido = todos.
positionintegerpadrão: 0Ordem no carrossel.
typestringpadrão: GGTG gráfico (padrão) ou T texto. Banner de texto dispensa imagem.targetstringpadrão: TTBT mesma janela (padrão) ou B nova janela.descriptionstringCorpo HTML do banner de texto (sanitizado).
overlay_titlestringTítulo sobre a imagem.
overlay_subtitlestringSubtítulo sobre a imagem.
overlay_button_textstringTexto do botão.
overlay_button_urlstringDestino do botão.
overlay_text_colorstringCor do texto (hexadecimal).
overlay_button_colorstringCor do botão (hexadecimal).
overlay_positionstringleftcenterrightPosição horizontal do texto.
vendor_iduuidAtribui o banner a um seller. Omita para banner da loja.
descriptionsobjectNome e descrição por idioma, com chave no código do idioma. Idiomas omitidos herdam
name.created_atstringData de criação (RFC 3339). Omitida = momento da chamada.
Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/admin/banners" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Black Friday 2026",
"image_url": "https://cdn.minhaloja.com.br/banners/bf-2026.png",
"alt_text": "Ofertas de Black Friday",
"status": "scheduled",
"starts_at": "2026-11-27T00:00:00Z",
"ends_at": "2026-11-30T23:59:59Z",
"channels": [
"site"
],
"devices": [
"mobile",
"desktop"
]
}'Resposta
201Banner criado
json
{
"id": "d76f2753-a934-44a7-881f-146aa7438c7b",
"name": "Black Friday 2026",
"image_url": "https://cdn.minhaloja.com.br/banners/bf-2026.png",
"alt_text": "Ofertas de Black Friday",
"position": 0,
"status": "scheduled",
"usergroup_ids": "",
"starts_at": "2026-11-27T00:00:00Z",
"ends_at": "2026-11-30T23:59:59Z",
"target_pages": [],
"target_categories": [],
"created_at": "2026-10-11T21:04:55.045564Z",
"overlay_position": "left",
"type": "G",
"target": "T",
"description": "",
"channels": [
"site"
],
"devices": [
"mobile",
"desktop"
],
"banner_id": "d76f2753-a934-44a7-881f-146aa7438c7b",
"banner": "Black Friday 2026",
"image_path": "https://cdn.minhaloja.com.br/banners/bf-2026.png"
}Campos da resposta
iduuidIdentificador do banner.
namestringNome interno do banner (texto puro).
image_urlstringImagem principal. Vazia em banner de texto.
mobile_image_urlstringArte própria para celular. Ausente quando não há; a vitrine então recorta a imagem principal.
link_urlstringDestino do clique. Ausente quando o banner não tem link.
alt_textstringTexto alternativo da imagem.
positionintegerOrdem no carrossel. Menor aparece primeiro.
statusstringactive, inactive, scheduled ou hidden.usergroup_idsstringGrupos de clientes que veem o banner (ids separados por vírgula). Vazio significa todos.
starts_atstringInício da exibição, RFC 3339. Ausente = sem início.
ends_atstringFim da exibição, RFC 3339. Ausente = sem fim.
target_pagesarraySlugs das páginas onde o banner aparece. Lista vazia = em todas.
target_categoriesarrayIds de categorias onde o banner aparece. Lista vazia = em todas.
vendor_iduuidSeller dono do banner. Ausente em banner da loja.
overlay_titlestringTítulo sobreposto à imagem.
overlay_subtitlestringSubtítulo sobreposto.
overlay_button_textstringTexto do botão sobreposto.
overlay_button_urlstringDestino do botão sobreposto.
overlay_text_colorstringCor do texto sobreposto (hexadecimal).
overlay_button_colorstringCor do botão sobreposto (hexadecimal).
overlay_positionstringleftcenterrightPosição horizontal do texto.
typestringG banner gráfico (imagem) ou T banner de texto.targetstringT abre no mesmo lugar, B abre em nova janela.descriptionstringCorpo HTML do banner de texto.
channelsarrayCanais em que o banner aparece.
null = todos.devicesarrayDispositivos em que o banner aparece.
null = todos.created_atstringCriação, RFC 3339.
Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O administrador não tem o privilégio exigido. | {"error":"insufficient privileges","required":"manage_content"} |
| 400 | Corpo inválido, ou falta name/image_url num banner gráfico. | {"error":"name and image_url are required"} |
| 400 | Dado inválido: status, canal ou dispositivo desconhecido, URL não http(s) ou apontando para rede interna, janela de datas invertida. | {"error":"invalid input","detail":"invalid_channel: unknown channel \"tv\""} |