Roteiro de demo completa
Este roteiro segue a jornada de Venda aprovada chamada por chamada, do primeiro passo ao último. Cada etapa está marcada com quem a implementa:
Levfone — já
implementado e ao vivo em api.sandbox.levfone.com. Pode ser executado de
verdade, agora, pelo console Swagger.
PDV Parceiro — contrato, ainda não implementado por ninguém. É o que o PDV Parceiro precisa construir. Mostrado aqui como referência do que a Levfone vai enviar e do que espera receber de volta — não pode ser executado hoje.
Interno — não é uma chamada de API. Acontece dentro do PDV, dentro da Levfone, ou é uma ação do vendedor.
Não. A Levfone implementa e já expõe ao vivo os 4 endpoints da Sales
Authorization API (oauth/token, sales/authorize, sales/{id}/confirm,
sales/{id}/cancel) — isso é o que este projeto entrega. Os 8 endpoints da
Partner PDV API são especificados, com OpenAPI completo e exemplos, mas
implementados pelo PDV Parceiro, não pela Levfone — é trabalho do time do
parceiro, ainda não existe em nenhum ambiente. Uma demonstração 100% ao vivo,
ponta a ponta, só é possível depois que o parceiro subir essas 8 rotas em um
sandbox próprio.
O que dá pra fazer hoje: rodar ao vivo as chamadas que são da Levfone, e narrar as chamadas do parceiro mostrando exatamente o request que a Levfone vai enviar e o response que espera receber — o contrato que a reunião serve para validar.
Antes de começar
| Campo | Valor |
|---|---|
| Sandbox Levfone | https://api.sandbox.levfone.com/v1 |
| client_id / client_secret | sandbox, enviados separadamente |
| taxId do cliente de demo | 52184793006 |
| storeId | 0421 |
| planId | PL-CTRL-25 |
| IMEI do aparelho de demo | 356938035643809 |
| Proposta pré-aprovada | smartphone R$1.299 + capinha R$49,90 + película R$29,90 + garantia estendida R$199 = R$1.577,80 |
1. Vendedor inicia o atendimento
InternoO vendedor faz login no PDV Parceiro. Nenhuma chamada à Levfone ainda.
2. Levfone identifica o vendedor
PDV Parceiro · POST /sellers/session
{ "username": "vendedor.1234", "password": "••••••••" }
{
"success": true,
"message": "",
"timestamp": "2026-08-01T14:00:00.000Z",
"data": {
"sellerId": "SL-8891",
"sellerName": "Carlos Pereira",
"taxId": "98765432100",
"storeId": "0421",
"storeName": "Loja Shopping Center Norte",
"storeCnpj": "12345678000199",
"storeAddress": { "street": "Av. Paulista, 1000", "city": "São Paulo", "state": "SP", "zipCode": "01310100" },
"role": "SELLER",
"accessToken": "...",
"expiresAt": "2026-08-01T22:00:00.000Z"
},
"error": null
}
storeId volta aqui e é obrigatório em toda chamada seguinte de catálogo, estoque e venda.
3. Levfone lista os planos da loja
PDV Parceiro · GET /plans?storeId=0421
{ "success": true, "message": "", "timestamp": "...", "data": { "plans": [
{ "planId": "PL-CTRL-25", "name": "Controle 25GB", "monthlyPrice": { "amount": 8990, "currency": "BRL" } }
] }, "error": null }
4. Vendedor seleciona o plano
Interno5. Levfone lista os smartphones elegíveis ao plano
PDV Parceiro · GET /products?storeId=0421&planId=PL-CTRL-25
{ "success": true, "message": "", "timestamp": "...", "data": { "products": [
{ "sku": "SKU-9912", "productType": "SMARTPHONE", "name": "Smartphone 128GB", "brand": "Marca", "model": "Modelo X", "storage": "128GB", "price": { "amount": 129900, "currency": "BRL" }, "stock": 4 }
], "pagination": { "page": 1, "pageSize": 50, "totalItems": 1, "totalPages": 1 } } }
6. Vendedor seleciona o aparelho
Interno7. Levfone lista as garantias/seguros aplicáveis ao SKU
PDV Parceiro · GET /services?storeId=0421&sku=SKU-9912
{ "success": true, "message": "", "timestamp": "...", "data": { "services": [
{ "serviceId": "SV-EW12", "name": "Garantia Estendida 12 meses", "type": "EXTENDED_WARRANTY", "price": { "amount": 19900, "currency": "BRL" } }
] }, "error": null }
8. Vendedor lê o IMEI do aparelho físico
Interno9. Levfone resolve o IMEI para produto e disponibilidade
PDV Parceiro · GET /imei/validate?storeId=0421&imei=356938035643809
{ "success": true, "message": "", "timestamp": "...", "data": {
"imeiValid": true, "inStock": true, "sku": "SKU-9912",
"name": "Smartphone 128GB", "brand": "Marca", "model": "Modelo X", "storage": "128GB"
}, "error": null }
Não vinculante — não reserva nada. Serve só pra Levfone saber qual produto está sendo financiado antes do carrinho existir (ADR-007).
10. Levfone faz a pré-análise e a análise de crédito
InternoAcontece dentro da Levfone (Plataforma), não é uma chamada do Connect. No sandbox de demo, esse resultado — a proposta aprovada — já está pré-carregado (seed), pra pular direto pra parte que importa hoje: a autorização.
11. Vendedor monta o carrinho e escolhe "Levfone" como pagamento
Interno12. PDV pede a autorização — o passo que trava tudo
Levfone · POST /sales/authorize — execute isto ao vivo no console
{
"clientName": "Mariana Alves",
"clientTaxId": "52184793006",
"clientPhoneNumber": "11900000000",
"sellerId": "SL-8891",
"sellerTaxId": "98765432100",
"sellerName": "Carlos Pereira",
"storeId": "0421",
"planId": "PL-CTRL-25",
"imei": "356938035643809",
"items": [
{ "sku": "SKU-9912", "productType": "SMARTPHONE", "name": "Smartphone 128GB", "quantity": 1, "unitPrice": { "amount": 129900, "currency": "BRL" }, "totalPrice": { "amount": 129900, "currency": "BRL" } },
{ "sku": "SKU-CASE-01", "productType": "CASE", "name": "Capinha", "quantity": 1, "unitPrice": { "amount": 4990, "currency": "BRL" }, "totalPrice": { "amount": 4990, "currency": "BRL" } },
{ "sku": "SKU-FILM-01", "productType": "SCREEN_PROTECTOR", "name": "Película", "quantity": 1, "unitPrice": { "amount": 2990, "currency": "BRL" }, "totalPrice": { "amount": 2990, "currency": "BRL" } }
],
"services": [
{ "serviceId": "SV-EW12", "type": "EXTENDED_WARRANTY", "name": "Garantia estendida", "price": { "amount": 19900, "currency": "BRL" } }
],
"totals": {
"productsTotal": { "amount": 137880, "currency": "BRL" },
"servicesTotal": { "amount": 19900, "currency": "BRL" },
"grandTotal": { "amount": 157780, "currency": "BRL" }
}
}
{
"success": true,
"message": "Venda autorizada.",
"data": {
"authorized": true,
"authorizationId": "auth_...",
"status": "AUTHORIZED",
"expiresAt": "...",
"message": "Venda autorizada. Conclua o faturamento."
},
"error": null
}
O PDV Parceiro só pode faturar depois de authorized: true. Guarde o authorizationId — é usado no passo 14.
Vale mostrar aqui também uma recusa, trocando um valor (ex. clientPhoneNumber diferente do da proposta) — volta HTTP 200, authorized: false, declineReason. Ver Business Rules e Catálogo de erros para a lista completa de motivos de recusa.
13. PDV fatura a venda e emite a NF-e
Interno (dentro do sistema do parceiro)
14. PDV confirma o faturamento
Levfone · POST /sales/{authorizationId}/confirm — execute isto ao vivo
{
"saleNumber": "PDV-000123",
"invoiceNumber": "NF-000456",
"nfeAccessKey": "35260800000000000000550010000004561000000012",
"invoicedAt": "2026-08-01T14:10:00.000Z"
}
{
"success": true,
"message": "Faturamento registrado.",
"data": { "authorizationId": "auth_...", "status": "CONFIRMED", "contractId": "..." },
"error": null
}
Esse é o passo que formaliza o crediário de verdade — cria o contrato e as parcelas no sistema da Levfone. Este endpoint é recomendado, não obrigatório (ver passo 15 para o caminho alternativo).
15. Levfone confirma por consulta (fallback, se o parceiro não implementar o passo 14)
PDV Parceiro · POST /sales/search
{ "taxId": "52184793006" }
{ "success": true, "message": "", "timestamp": "...", "data": { "sales": [
{ "status": "ACTIVE", "saleNumber": "PDV-000123", "invoiceNumber": "NF-000456", "nfeAccessKey": "35260800000000000000550010000004561000000012", "saleDate": "2026-08-01T14:10:00.000Z", "cancellationDate": null }
] }, "error": null }
Se o parceiro não implementar confirm, a Levfone recorre a polling deste endpoint até ver status: ACTIVE. Confirmação ativa é preferível — reduz o volume de polling e a janela em que o crédito fica comprometido sem a Levfone saber o desfecho.
Cancelamento e troca (fora do caminho feliz)
Se quiser mostrar também esse ramo: POST /sales/{authorizationId}/cancel
Levfone — também
ao vivo — é chamado pelo PDV quando o vendedor cancela a venda no próprio
sistema. A Levfone confirma via POST /sales/search
PDV Parceiro
antes de dar baixa no financiamento. Detalhes e o mecanismo de troca
(reason: EXCHANGE) em Fluxos e Fluxos — Troca.
Depois da reunião
O que o parceiro leva para implementar: os 8 endpoints da Partner PDV API, contra o OpenAPI completo ou a coleção Postman. Assim que tiverem um sandbox próprio no ar, a jornada acima passa a rodar ponta a ponta de verdade — hoje o que é demonstrável ao vivo é a metade que a Levfone já construiu.