Download OpenAPI specification:Download
API implementada pelo PDV Parceiro e consumida pela Levfone.
Esta especificação define os endpoints que o PDV Parceiro implementa e que a Levfone consome durante a jornada de financiamento de smartphones no varejo.
O fluxo inverso — a autorização de venda que o PDV Parceiro consome da Levfone —
está especificado em levfone-authorization-api.v1.yaml.
Money).X-Request-Id e X-Correlation-Id.Autenticação máquina-a-máquina entre Levfone e PDV Parceiro,
via OAuth 2.0 client_credentials (RFC 6749 §4.4).
Este token identifica a Levfone como aplicação, não o vendedor.
A identifica ção do vendedor é feita em POST /sellers/session.
| grant_type required | string Value: "client_credentials" |
| client_id required | string |
| client_secret required | string <password> |
| scope | string |
| access_token required | string |
| token_type required | string Value: "Bearer" |
| expires_in required | integer |
| scope | string |
{- "access_token": "string",
- "token_type": "Bearer",
- "expires_in": 3600,
- "scope": "string"
}A Levfone capta CPF e senha na tela de login da Plataforma e encaminha para o PDV Parceiro autenticar — o PDV Parceiro é a fonte da verdade sobre credenciais de vendedor, a Levfone não mantém senha própria.
200O resultado da autenticação vai no campo data.status, não no código HTTP
— mesmo padrão da Sales Authorization API (ver RN-07 em
levfone-authorization-api.v1.yaml). Um 401 nesta chamada significa que
o token sistema-a-sistema da Levfone (POST /oauth/token) é que é
inválido ou expirado — não que o CPF/senha do vendedor está errado.
O storeId (dentro de data.session, presente apenas quando
status: AUTHORIZED) é obrigatório em todas as chamadas subsequentes
de catálogo, estoque e vendas.
Nota de segurança. Nesta versão a credencial do vendedor trafega pela Levfone (credential passthrough). A Levfone não persiste a senha em nenhuma hipótese — o campo é
writeOnly, nunca é logado e é descartado imediatamente após o encaminhamento. O caminho recomendado para a v2 é OIDC Authorization Code + PKCE hospedado pelo PDV Parceiro, eliminando o trânsito da senha. Ver ADR-001.Recomendamos que a mensagem exibida ao vendedor seja igual para
INVALID_PASSWORDeUSER_NOT_FOUND(ex. "CPF ou senha incorretos") — ostatusjá deixa os dois distinguíveis para log e suporte, sem expor ao usuário final se o CPF existe ou não no cadastro.
| X-Request-Id required | string <uuid> UUID v4 único por requisição. |
| X-Correlation-Id required | string <uuid> UUID v4 que agrupa todas as chamadas de uma mesma jornada de venda. |
| cpf required | string^[0-9]{11}$ CPF do vendedor, sem máscara. |
| password required | string <password> |
| success required | boolean |
| message required | string Mensagem apta a ser exibida ao vendedor. Vazia em sucesso silencioso. |
| timestamp required | string <date-time> |
| requestId | string <uuid> |
object | |
Error (object) or null |
{- "cpf": "string",
- "password": "pa$$word"
}{- "success": true,
- "message": "",
- "timestamp": "2026-08-04T14:00:00.000Z",
- "data": {
- "authorized": true,
- "status": "AUTHORIZED",
- "message": "",
- "session": {
- "sellerId": "SL-8891",
- "sellerName": "Carlos Pereira",
- "cpf": "98765432100",
- "storeId": "0421",
- "storeName": "Loja Shopping Center Norte",
- "storeCnpj": "12345678000199",
- "storeAddress": {
- "street": "Av. Paulista, 1000",
- "city": "São Paulo",
- "state": "SP",
- "zipCode": "01310100"
}, - "isManager": false,
- "jobTitle": "Vendedor",
- "accessToken": "sess_...",
- "expiresAt": "2026-08-04T22:00:00.000Z"
}
}, - "error": null
}A Levfone consulta este endpoint uma vez por dia para manter seu próprio cadastro de vendedores e gerentes sincronizado.
Retorna apenas funcionários ativos. Um funcionário desligado ou inativado simplesmente deixa de aparecer na lista no dia seguinte — a Levfone detecta a saída pela ausência na sincronização, não é necessário nenhum evento ou campo explícito de desligamento.
| page | integer >= 1 Default: 1 |
| pageSize | integer [ 1 .. 200 ] Default: 50 |
| X-Request-Id required | string <uuid> UUID v4 único por requisição. |
| X-Correlation-Id required | string <uuid> UUID v4 que agrupa todas as chamadas de uma mesma jornada de venda. |
| success required | boolean |
| message required | string Mensagem apta a ser exibida ao vendedor. Vazia em sucesso silencioso. |
| timestamp required | string <date-time> |
| requestId | string <uuid> |
object | |
Error (object) or null |
{- "success": true,
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
- "data": {
- "employees": [
- {
- "cpf": "string",
- "name": "string",
- "phone": "11988887777",
- "email": "user@example.com",
- "storeId": "string",
- "isManager": true,
- "jobTitle": "Vendedor"
}
], - "pagination": {
- "page": 0,
- "pageSize": 0,
- "totalItems": 0,
- "totalPages": 0
}
}, - "error": {
- "code": "store_not_found",
- "legacyCode": "LF0042",
- "message": "string",
- "details": [
- {
- "field": "string",
- "issue": "string"
}
],
}
}A Levfone consulta este endpoint para manter seu próprio cadastro de lojas parceiras sincronizado — nome, endereço e CNPJ de cada loja.
| page | integer >= 1 Default: 1 |
| pageSize | integer [ 1 .. 200 ] Default: 50 |
| X-Request-Id required | string <uuid> UUID v4 único por requisição. |
| X-Correlation-Id required | string <uuid> UUID v4 que agrupa todas as chamadas de uma mesma jornada de venda. |
| success required | boolean |
| message required | string Mensagem apta a ser exibida ao vendedor. Vazia em sucesso silencioso. |
| timestamp required | string <date-time> |
| requestId | string <uuid> |
object | |
Error (object) or null |
{- "success": true,
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
- "data": {
- "stores": [
- {
- "storeId": "string",
- "name": "Loja Shopping Center Norte",
- "cnpj": "string",
- "address": {
- "street": "Av. Paulista, 1000, Sala 12",
- "city": "São Paulo",
- "state": "SP",
- "zipCode": "01310100"
}
}
], - "pagination": {
- "page": 0,
- "pageSize": 0,
- "totalItems": 0,
- "totalPages": 0
}
}, - "error": {
- "code": "store_not_found",
- "legacyCode": "LF0042",
- "message": "string",
- "details": [
- {
- "field": "string",
- "issue": "string"
}
],
}
}A Levfone consulta este endpoint uma vez por dia e guarda o
resultado em cache próprio — não é chamado por transação. Não inclua
aqui nada que mude durante o dia (ex. estoque); isso fica em
GET /products/barcode e GET /stock, consultados em tempo real.
| storeId required | string <= 64 characters Identificador da loja, obtido em |
| X-Request-Id required | string <uuid> UUID v4 único por requisição. |
| X-Correlation-Id required | string <uuid> UUID v4 que agrupa todas as chamadas de uma mesma jornada de venda. |