Recuperar carrinho abandonado
Consulta e restaura o carrinho de quem saiu sem comprar, a partir do link enviado por e-mail pela campanha de recuperação.
Um carrinho abandonado é um carrinho com itens cujo dono saiu sem fechar o pedido. A plataforma detecta esses carrinhos e, se a loja tem uma campanha de recuperação ligada, envia ao comprador um e-mail com um link que carrega um token de recuperação. Estas duas rotas são o que a página desse link usa: uma mostra o que havia no carrinho e a outra o reconstrói no carrinho atual do comprador.
O token é a única prova de acesso: quem tem o link vê os itens, sem login. O token tem prazo de validade; depois dele a API o recusa.
- O comprador abre o link do e-mail
A página da loja recebe o token e chama
GET /recover-cart/{token}para mostrar "você deixou estes itens". - Restaura o carrinho
Se o comprador confirma, a página chama
POST /cart/restore-from-recoverycom o mesmo token. Os itens voltam ao carrinho do visitante (ou da conta, se logado), já com os preços e o estoque de hoje. - Segue para o checkout
O restante é o fluxo normal: calcular e iniciar o checkout. O carrinho abandonado só é marcado como recuperado quando um pedido é criado.
Consultar um carrinho abandonado
/api/v1/storefront/recover-cart/{token}PúblicaConsulta um carrinho abandonado pelo token de recuperação
Devolve o conteúdo do carrinho abandonado como ele estava. Não altera nada: nem cria carrinho, nem marca o abandono como recuperado.
Parâmetros de caminho
tokenstringobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/storefront/recover-cart/$RECOVERY_TOKEN"Resposta
{
"message": "cart recovered",
"cart_id": "9c2d1f1e-3b4a-4c5d-8e6f-7a8b9c0d1e2f",
"items": [
{
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"name": "Notebook Slim Rosa 02373",
"sku": "SD-002373",
"image_url": "/uploads/.../notebook.png",
"unit_price": 11500,
"quantity": 2,
"total": 23000
}
],
"cart_total_cents": 23000,
"item_count": 2
}Campos da resposta
messagestringcart recovered. Texto fixo em inglês.cart_iduuiditemsarrayproduct_id, variation_id, vendor_id, name, sku, image_url, unit_price (centavos), quantity e total (centavos).cart_total_centsintegeritem_countintegerRestaurar o carrinho
/api/v1/storefront/cart/restore-from-recoveryAutenticadaReconstrói o carrinho atual a partir de um carrinho abandonado
Reconstrói o carrinho do comprador a partir do abandono, em uma única chamada. Cada item passa pelas mesmas regras de POST /cart/bulk: o preço é o do catálogo de hoje e itens sem estoque ou fora de linha não entram, mas vão para failed sem derrubar os demais. A configuração de variações e opções de cada item é preservada.
Se o token veio de um e-mail de campanha que prometia um cupom de desconto, esse cupom é gravado no carrinho automaticamente quando pelo menos um item voltou, e o código é devolvido em discount_code.
Cabeçalhos
AuthorizationstringBearer <token> do cliente logado, para restaurar na conta.X-Session-IDstringCorpo da requisição
tokenstringobrigatórioExemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/cart/restore-from-recovery" \
-H "X-Session-ID: $SESSION_ID" \
-H "Content-Type: application/json" \
-d '{
"token": "9f2b7c1e4d8a4b6f"
}'Resposta
{
"restored": true,
"added": [
{
"line_id": "64ddde83-28ce-4bba-86e5-ba9ebf1ba500",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"name": "Notebook Slim Rosa 02373",
"unit_price": 11500,
"quantity": 2,
"total": 23000
}
],
"failed": [],
"cart": { "id": "01ff5b45-566b-4b98-94a1-23a648c9ea23", "subtotal": 23000, "total": 23000 },
"discount_code": "VOLTE10"
}Campos da resposta
restoredbooleantrue numa resposta 200, mesmo que added esteja vazio. Confira added e failed.addedarrayfailedarrayproduct_id e reason.cartobjectdiscount_codestringErros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Token inválido, expirado ou carrinho já recuperado (GET) | {"error":"invalid or expired recovery token","detail":"invalid or expired recovery token"} |
| 400 | Sem token de login e sem X-Session-ID (POST) | {"error":"session_id or authentication required"} |
| 400 | token vazio no corpo (POST) | {"error":"token is required"} |
| 400 | O abandono não tem itens (POST) | {"error":"recovery snapshot has no items"} |
| 404 | Token que não existe ou expirou (POST) | {"error":"invalid or expired recovery token"} |
| 503 | A loja não tem a recuperação de carrinho disponível | {"error":"cart recovery not available"} |
Repare que o mesmo token inválido gera 400 na consulta (GET) e 404 na restauração (POST).