VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/Conteúdo e características do produto

Produtos obrigatórios

Liga a um produto os itens que o acompanham, como pilhas ou garantia, e marca quais são obrigatórios.

Um produto obrigatório (required product) é um item que acompanha outro. Exemplo: o brinquedo que só funciona com pilhas, a impressora e o cartucho, o celular e a película. Você liga o brinquedo às pilhas e a vitrine mostra as pilhas na página do brinquedo. Cada ligação tem a marca is_mandatory: true quer dizer "sem isto o produto não funciona", false quer dizer "recomendado".

Diferença para a venda cruzada: a venda cruzada sugere alternativas ou complementos como vitrine de descoberta; o obrigatório descreve uma dependência do produto, e tem a marca de obrigatório.

Esta API só registra a ligação e a marca. A vitrine mostra a lista na página do produto, com aviso e selo nos obrigatórios; nenhuma rota de pedido recusa um pedido por falta do item.

Quatro operações. A relação é de um sentido: ligar A a B não liga B a A.

GET/api/v1/admin/products/{id}/required-productsAdmin

Lista os produtos obrigatórios de um produto

Exige o privilégio view_catalog ou manage_catalog. Devolve as ligações com os dados atuais do produto exigido, em ordem de criação. Produto exigido que foi excluído some da lista.

Path parameters

iduuidobrigatório
Id do produto que tem a dependência.
POST/api/v1/admin/products/{id}/required-productsAdmin

Adiciona um produto obrigatório

Exige o privilégio manage_catalog. Adiciona uma ligação, ou atualiza a marca is_mandatory se a ligação já existia. Devolve a lista completa.

Path parameters

iduuidobrigatório
Id do produto que tem a dependência.

Corpo da requisição

required_product_iduuidobrigatório
Id do produto exigido. Os dois produtos precisam existir e não podem ser o mesmo.
is_mandatorybooleanpadrão: false
true para obrigatório, false para recomendado.
PUT/api/v1/admin/products/{id}/required-productsAdmin

Substitui os produtos obrigatórios de um produto

Exige o privilégio manage_catalog. Apaga todas as ligações atuais e grava a lista enviada. Ligações do produto com ele mesmo são ignoradas. Lista vazia remove tudo. Se o produto {id} não existe, responde 500 sem apagar nada.

Path parameters

iduuidobrigatório
Id do produto que tem a dependência.

Corpo da requisição

required_productsarrayobrigatório

Lista completa de ligações.

required_product_iduuidobrigatório
Id do produto exigido.
is_mandatorybooleanpadrão: false
Obrigatório ou recomendado.
DELETE/api/v1/admin/products/{id}/required-products/{requiredId}Admin

Remove um produto obrigatório

Exige o privilégio manage_catalog. Remove só a ligação; nenhum dos dois produtos é alterado.

Path parameters

iduuidobrigatório
Id do produto que tem a dependência.
requiredIduuidobrigatório
Id do produto exigido a desligar.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/admin/products/74dd8f08-8b06-43a8-9a8b-3ef5e7478d52/required-products" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "required_product_id": "48e87591-5fb1-40da-b32e-edec3a8c596d", "is_mandatory": true }'

Resposta

200Lista de obrigatórios (GET, POST e PUT)
json
{
  "required_products": [
    {
      "product_id": "74dd8f08-8b06-43a8-9a8b-3ef5e7478d52",
      "required_product_id": "48e87591-5fb1-40da-b32e-edec3a8c596d",
      "is_mandatory": true,
      "created_at": "2026-10-11T20:54:10.152579Z",
      "required_product_name": "Mouse Gamer Titan",
      "required_product_slug": "mouse-gamer-titan",
      "required_product_price": 26239,
      "required_product_image": "/uploads/exemplo/mouse-titan.png",
      "required_product_quantity": 26,
      "required_product_status": "A"
    }
  ],
  "total": 1
}
200Ligação removida (DELETE)
json
{ "message": "required product removed" }

Response fields

required_productsarray
Ligações do produto.
required_products[].product_iduuid
O produto que tem a dependência.
required_products[].required_product_iduuid
O produto exigido.
required_products[].is_mandatoryboolean
Obrigatório (true) ou recomendado (false).
required_products[].created_atstring
Quando a ligação foi criada (RFC 3339).
required_products[].required_product_namestring
Nome atual do produto exigido.
required_products[].required_product_slugstring
Slug atual do produto exigido.
required_products[].required_product_priceinteger
Preço em centavos. Fica de fora da resposta quando é zero.
required_products[].required_product_imagestring
URL da imagem principal. Ausente quando o produto não tem imagem.
required_products[].required_product_quantityinteger
Estoque, arredondado para baixo. Ausente quando é zero.
required_products[].required_product_statusstring
Letra do status do produto exigido (A ativo). Veja os status na home de Produtos.
totalinteger
Quantidade de ligações.

Erros

StatusQuandoCorpo
400Corpo não é JSON válido{"error":"invalid request body","detail":"..."}
400POST sem required_product_id{"error":"required_product_id is required"}
401Sem credenciais ou token expirado{"error":"invalid or expired token"}
403Sem permissão (manage_catalog para gravar){"error":"insufficient privileges","required":"manage_catalog"}
404DELETE de uma ligação que não existe{"error":"failed to remove required product","detail":"required product association not found"}
500POST ligando o produto a ele mesmo{"error":"failed to add required product","detail":"cannot require a product to itself"}
500POST com um dos produtos inexistente ou excluído{"error":"failed to add required product","detail":"one or both products not found"}
500PUT em produto inexistente{"error":"failed to set required products","detail":"product not found"}
500PUT com required_product_id inexistente ou fora do formato UUID{"error":"failed to set required products","detail":"..."}
Os erros de negócio chegam como 500

Auto-referência e produto inexistente no POST voltam como 500 e não como 400/404. Leia o detail. No PUT com um id inválido no meio da lista, as ligações antigas já foram apagadas e as anteriores ao item inválido ficam gravadas: releia a lista com GET.

Veja também

  • Tags e vendas cruzadas
  • Consultar produto
  • Home da seção
Anterior
Tags e vendas cruzadas
Próxima
Preenchimento com IA
Nesta página
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também