VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/Moderação de produtos e sellers

Fila de moderação

Lista os produtos que aguardam moderação e aprova ou recusa um produto por vez, com o motivo enviado ao seller.

Use a fila para revisar o que os sellers cadastraram. Por padrão ela mostra só os produtos que aguardam (status = R), do mais novo para o mais antigo. Cada decisão acontece por produto: aprovar publica, recusar devolve ao seller com um motivo. O módulo product-moderation precisa estar ligado.

Listar a fila

GET/api/v1/admin/moderation/queueAdmin

Lista os produtos em moderação

Parâmetros de consulta

statusstringpadrão: pending
pendingapprovedrejectedallADHRX
Filtro de moderação. pending = R; approved = tudo que não é R nem X; rejected = X; all = sem filtro. Também aceita uma letra de status de produto. Um valor desconhecido não filtra (volta tudo).
searchstring
Parte do nome do produto ou da razão social do seller, sem diferenciar maiúsculas.
pageintegerpadrão: 1
Página, a partir de 1.
limitintegerpadrão: 20
Itens por página, de 1 a 100. Fora disso volta a 20.

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/admin/moderation/queue?status=pending&limit=20" \
  -H "Authorization: Bearer $TOKEN"

Resposta

200Produtos da fila
json
{
  "products": [
    {
      "id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6",
      "vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
      "vendor_name": "Loja Seller Teste",
      "vendor_slug": "loja-seller-teste",
      "category_id": "ae6f8f8b-7cbe-4725-84fa-247cce138143",
      "name": "Caderno Vintage Vermelho",
      "slug": "caderno-vintage-vermelho",
      "sku": "SD-004018",
      "price": 4990,
      "cost_price": 2500,
      "quantity": 77,
      "status": "R",
      "intended_status": "A",
      "approval_status": "pending",
      "created_at": "2026-10-09T14:01:22Z",
      "updated_at": "2026-10-09T14:01:22Z"
    }
  ],
  "total": 1,
  "page": 1,
  "per_page": 20,
  "total_pages": 1
}

Campos da resposta

productsarray
Produtos da página, ou null quando não há nenhum. É o produto completo do catálogo, com os campos de moderação abaixo.
products[].iduuid
Id do produto.
products[].vendor_iduuid
Seller dono. Ausente em produto da própria loja.
products[].vendor_namestring
Razão social do seller. Vazio em produto da própria loja.
products[].vendor_slugstring
Slug do seller, para montar o link de pré-visualização.
products[].priceinteger
Preço em centavos (4990 = R$ 49,90).
products[].statusstring
ADHRX
Status atual em letra.
products[].intended_statusstring
Status que o produto assume quando for aprovado.
products[].approval_statusstring
Rótulo derivado do status (pending, approved, rejected).
products[].rejected_reasonstring
Motivo da última recusa. Some depois de uma aprovação.
products[].moderated_atstring
Quando foi moderado pela última vez (RFC 3339).
products[].moderated_byuuid
Administrador que moderou.
totalinteger
Total que casa com o filtro, em todas as páginas.
pageinteger
Página devolvida.
per_pageinteger
Itens por página aplicados.
total_pagesinteger
Número de páginas (mínimo 1).

Aprovar um produto

Leva o produto ao status guardado em intended_status, apaga o motivo de recusa anterior e registra quem aprovou. Como efeitos: avisa o seller, reindexa a busca da loja e tenta ligar o produto ao catálogo mestre (por SKU).

POST/api/v1/admin/moderation/{id}/approveAdmin

Aprova um produto em moderação

Parâmetros de caminho

iduuidobrigatório
Id do produto.

Não há corpo.

200Produto aprovado
json
{ "message": "product approved", "product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6" }

Recusar um produto

Grava status = X e o motivo, que o seller vê no banner de recusa da edição do produto.

POST/api/v1/admin/moderation/{id}/rejectAdmin

Recusa um produto com motivo

Parâmetros de caminho

iduuidobrigatório
Id do produto.

Corpo da requisição

reasonstringobrigatório
Motivo da recusa. Aceita também os nomes rejected_reason e notes; vale o primeiro não vazio nessa ordem: reason, rejected_reason, notes.
200Produto recusado
json
{ "message": "product rejected", "product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6" }

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/admin/moderation/d8a6c5e7-8e44-4055-a0e2-49014f5d17f6/reject" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reason": "Foto sem fundo branco e descrição incompleta."}'

Erros

StatusQuandoCorpo de exemplo
400Recusa sem motivo.{"error":"rejected_reason is required"}
400Corpo da recusa não é JSON.{"error":"invalid request body","detail":"..."}
400A loja exige dados de frete e o produto físico a ser ativado está sem peso e dimensões positivos.{"error":"physical_shipping_data_required","detail":"fill positive shipping data (weight, length, width, height) before activating this physical product; save it as disabled while incomplete"}
500Produto não existe, ou id não é UUID.{"error":"failed to approve product","detail":"product not found: 0000..."}
401 / 403Sem token, módulo desligado ou sem manage_products/manage_catalog.{"error":"module_disabled","module":"product-moderation"}
Recusar derruba produto que está no ar

A recusa não confere o status atual. Chamar reject em um produto ativo o tira do ar (X) na hora. Se a ideia é só revisar a fila, filtre status=pending e use os ids que ela devolveu.

Aprovar de novo é seguro

Aprovar um produto que já está ativo apenas regrava intended_status como status e o reindexa. Não gera duplicidade, mas dispara de novo o aviso ao seller.

Veja também

  • Aprovar e recusar em lote
  • Visão geral da moderação
  • Formato de erros
Anterior
Moderação de produtos e sellers
Próxima
Moderação em lote
Nesta página
  • Listar a fila
  • Exemplo de requisição
  • Resposta
  • Aprovar um produto
  • Recusar um produto
  • Exemplo de requisição
  • Erros
  • Veja também