Compre junto
Lista, minera dos pedidos, cria à mão, ativa, desativa e apaga os combos de Compre junto exibidos na página do produto.
O Compre junto mostra, na página de um produto (a âncora), um ou dois produtos que costumam ser comprados com ele, com um desconto se o cliente levar o conjunto. Cada combo é uma âncora mais 1 ou 2 companheiros. As rotas exigem o privilégio manage_catalog. Para o bloco aparecer na vitrine, o recurso também precisa estar ligado nas configurações da loja, e ao menos 2 itens do combo precisam estar visíveis e com estoque.
Todo combo criado vira um kit ativo de slug fbt-<id do combo>, com o desconto percentual definido nas configurações de Compre junto da loja (padrão 5%). É esse kit que o carrinho usa para aplicar o preço.
/api/v1/admin/fbtAdminLista os combos
Do maior lift para o menor, 50 por página. A resposta não traz o total: para saber se há mais páginas, peça a seguinte até vir uma lista vazia.
Parâmetros de consulta
pageintegerpadrão: 1/api/v1/admin/fbt/mineAdminMinera combos dos pedidos
Recalcula os combos mineráveis a partir dos pedidos bem-sucedidos dos últimos 180 dias. Um par vira combo quando aparece em pelo menos 3 pedidos e em pelo menos 1% dos pedidos que têm a âncora, com os dois produtos do mesmo seller. São no máximo 2 companheiros por âncora, escolhidos pelo lift. Combos criados à mão e combos desativados nunca são alterados; combos minerados ativos que saíram do corte são removidos. Sem pedidos suficientes, nada é criado. A chamada espera o fim da mineração, com limite de 60 segundos. Sem corpo.
/api/v1/admin/fbt/manualAdminCria um combo à mão
Cria o combo e o torna ativo. Se já existir um combo com a mesma âncora e os mesmos companheiros, ele é reativado em vez de duplicado.
Corpo da requisição (JSON)
anchor_product_iduuidobrigatóriocompanion_idsarrayobrigatório/api/v1/admin/fbt/{id}/statusAdminAtiva ou desativa um combo
Um combo desativado deixa de aparecer na vitrine e fica protegido contra a mineração.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição (JSON)
statusstringobrigatórioactivedisabled/api/v1/admin/fbt/{id}AdminApaga um combo
Apaga o combo. Combos minerados apagados podem voltar na próxima mineração, a menos que você os desative em vez de apagar. O kit fbt-... gerado para o combo não é apagado.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
# criar à mão
curl -X POST "$BASE_URL/api/v1/admin/fbt/manual" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"anchor_product_id":"c3f92551-9dda-4fc7-b518-353d1c4e4035","companion_ids":["c4e16aa8-59ba-45f0-aaff-d87549ced120"]}'
# desativar
curl -X PUT "$BASE_URL/api/v1/admin/fbt/$COMBO/status" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"status":"disabled"}'Resposta
{
"combos": [
{
"id": "11b6f790-c5c2-4f31-94ab-c88c6ecf3bc2",
"anchor_product_id": "d3602023-101d-4f7d-8ef5-52abd5c7eaaf",
"anchor_product_name": "Notebook Essencial Bege 02156",
"companion_ids": ["12658adf-5a62-43c3-8310-73176df91202"],
"companion_names": ["Óculos Deluxe Preto 02710"],
"support_count": 3,
"lift": 2294.25,
"status": "active",
"source": "mined",
"adds_count": 0
}
]
}{ "id": "c676155b-ddcf-4f62-916c-9cc698654033" }{ "mined": true }{ "ok": true }Campos de cada combo
iduuidanchor_product_iduuidanchor_product_namestringcompanion_idsarraycompanion_namesarraysupport_countinteger0 nos combos manuais.liftnumber0 nos combos manuais.statusstringactivedisabledsourcestringminedmanualadds_countintegerErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo que não é JSON | {"error":"invalid request body","detail":"..."} |
| 400 | Sem anchor_product_id | {"error":"failed to create combo","detail":"anchor_product_id required"} |
| 400 | Nenhum companheiro distinto | {"error":"failed to create combo","detail":"at least one distinct companion_id required"} |
| 400 | Âncora não existe | {"error":"failed to create combo","detail":"anchor product not found"} |
| 400 | status diferente de active e disabled | {"error":"failed to set status","detail":"invalid status"} |
| 401 | Token ausente ou expirado | {"error":"invalid or expired token"} |
| 403 | Falta manage_catalog | {"error":"insufficient privileges","privilege_required_any":["manage_catalog"]} |
| 500 | Falha na mineração | {"error":"mining failed","detail":"..."} |