Iniciar checkout
Abre uma sessão de checkout a partir de um carrinho e lê o resumo da sessão com as opções de frete e pagamento.
O checkout é o caminho entre um carrinho cheio e um pedido. Ele roda numa sessão: um registro temporário que guarda o endereço, o frete, a forma de pagamento e os descontos do cliente, e recalcula o total a cada passo. Você abre a sessão com o id de um carrinho e depois a vai preenchendo (passos do checkout).
O carrinho em si é criado e alterado pela loja ou pelo app do cliente (visitantes são identificados pelo cabeçalho X-Session-ID; clientes logados, pelo JWT). É dele que sai o cart_id que você usa aqui.
Abrir a sessão
/api/storefront/checkoutClienteAbrir uma sessão de checkout a partir de um carrinho
Vale para cliente logado e para visitante. Cliente logado: o carrinho precisa ser dele. Visitante: o carrinho precisa ter sido criado com o mesmo X-Session-ID desta chamada, e o corpo precisa trazer guest_email.
Corpo da requisição
cart_iduuidobrigatórioguest_emailstringguest_namestringguest_phonestringCabeçalhos
AuthorizationstringBearer <jwt> do cliente. Para visitante, omita.X-Session-IDstringX-API-Keystringsfk_... com o escopo storefront:write. Token de app: Authorization: Bearer vat_... com write_orders.Ler o resumo
/api/storefront/checkout/{sessionId}ClienteLer o resumo da sessão com opções de frete e pagamento
Devolve a sessão, as linhas do carrinho e as opções que o cliente pode escolher agora. Use depois de cada passo para mostrar o total atualizado.
Parâmetros de caminho
sessionIduuidobrigatórioid da resposta do POST).Exemplo de requisição
curl -X POST "$BASE_URL/api/storefront/checkout" \
-H "X-Session-ID: $VISITOR_ID" \
-H "Content-Type: application/json" \
-d '{"cart_id":"1654b5de-3e96-44a5-bd77-2eaa82ccabf2","guest_email":"maria@example.com","guest_name":"Maria Souza","guest_phone":"11999990000"}'
curl "$BASE_URL/api/storefront/checkout/$SESSION_ID" -H "X-Session-ID: $VISITOR_ID"Resposta
{
"id": "bcc7b882-448e-4b50-b870-41521b747889",
"cart_id": "1654b5de-3e96-44a5-bd77-2eaa82ccabf2",
"user_id": "",
"is_guest": true,
"guest_email": "maria@example.com",
"guest_name": "Maria Souza",
"guest_phone": "11999990000",
"step": "address",
"shipping_address": null,
"billing_address": null,
"shipping_method_id": null,
"shipping_cost": 0,
"payment_method": null,
"subtotal": 30000,
"discount": 7500,
"catalog_discount": 7500,
"b2b_discount": 0,
"state_discount": 0,
"pix_discount": 0,
"tax": 0,
"tax_included": false,
"total": 22500,
"coupon_code": null,
"free_shipping": false,
"gift_cert_amount": 0,
"cpf": "",
"document_type": "",
"notes": "",
"created_at": "2026-10-11T21:20:06.765516Z",
"updated_at": "2026-10-11T21:20:06.765516Z"
}{
"session": { "id": "bcc7b882-448e-4b50-b870-41521b747889", "step": "address", "total": 22500 },
"items": [
{
"line_id": "42a06d8b-e97d-403a-899b-b76bf3bd0c73",
"product_id": "22fbd12a-1b6e-41ea-a84f-4d9cf06c8766",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"name": "Camisa do Flamengo Masculina I 26 Adidas",
"sku": "FLA-I-26",
"unit_price": 30000,
"list_price": 44990,
"quantity": 1,
"total": 30000
}
],
"available_shipping": [
{ "id": "50000000-0000-0000-0000-000000000001", "name": "Entrega Padrão", "code": "standard", "cost": 1000, "estimated_days": 10, "free_shipping": false }
],
"available_payment": [
{ "id": "02000000-0000-0000-0000-000000000001", "name": "PIX", "code": "pix" },
{ "id": "1efe55b0-983b-4ff5-9892-d734986454cc", "name": "Cartão de Crédito", "code": "credit_card" }
]
}Campos da sessão
iduuidcart_iduuiduser_idstringis_guestbooleantrue para visitante.stepstringaddressshippingpaymentreviewaddress, depois shipping, payment e review.shipping_addressobject|nullbilling_addressobject|nullshipping_method_iduuid|nullshipping_costintegerpayment_methodstring|nullsubtotalintegerdiscountintegercatalog_discountintegerb2b_discountintegerstate_discountinteger0 até o endereço ser informado.pix_discountintegertaxintegertax_included é false.tax_includedbooleantrue quando os preços da loja já incluem imposto.totalintegercoupon_codestring|nullgift_cert_amountintegercpfstringdocument_type diz qual: cpf ou cnpj.free_shippingbooleantrue se um cupom concedeu frete grátis. auto_free_shipping indica frete grátis por promoção automática.promised_delivery_datestringYYYY-MM-DD), calculada ao escolher o frete, quando a loja usa janelas de entrega.available_shippingarrayid, name, code, cost (centavos), estimated_days, free_shipping, e service_code quando é um serviço de transportadora (PAC, SEDEX...).available_paymentarrayid, name, code. Use o code no passo de pagamento.Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo inválido | {"error": "invalid request body"} |
| 400 | Visitante sem guest_email | {"error": "guest_email is required for guest checkout"} |
| 400 | Outra regra de negócio recusada | {"error": "<mensagem>"} |
| 403 | Chave sfk_ ou token vat_ sem o escopo (storefront:write ou write_orders) | {"error": "missing_scope", "required": "..."} |
| 403 | Carrinho vinculado a outro cliente registrado | {"error": "you do not have permission to checkout this cart"} |
| 403 | Loja com compra de visitante desligada | {"error": "guest checkout is not enabled"} |
| 404 | Carrinho inexistente ou que não é seu (também para X-Session-ID diferente) | {"error": "cart not found"} |
| 404 | GET de sessão que não existe ou é de outra pessoa | {"error": "checkout session not found"} |