Bem-vindo à API Juvo D2C
Documentação interativa para financiamento de dispositivos
🚀 O que é a API Juvo D2C?
A API Juvo D2C é uma solução completa para financiamento de dispositivos que permite aos parceiros integrar facilmente funcionalidades de crédito em suas aplicações. Com nossa API, você pode oferecer aos seus clientes opções de financiamento flexíveis e seguras.
📖 Como usar esta documentação
Esta documentação interativa permite que você:
- Explore endpoints: Navegue pela sidebar para ver todos os endpoints disponíveis
- Teste em tempo real: Use o playground à direita para fazer chamadas reais à API
- Veja exemplos: Cada endpoint inclui exemplos de request e response
- Alterne ambientes: Teste em diferentes ambientes (Dev, Homolog, Produção)
🌐 Ambientes disponíveis
Sandbox
Para testes e desenvolvimento
juvo-d2c-svc-bff.juvocredito-dev.com.br
Production
Ambiente de produção real
services.juvocredito.com.br
🎯 Próximos passos
1. Comece pela autenticação
Clique em "Authentications" na sidebar para obter seu token de acesso
2. Teste no playground
Use o painel lateral direito para fazer chamadas reais à API
3. Integre em sua aplicação
Use os exemplos de código para integrar em seu sistema
📋 Instruções da API
Protocolo de resposta e boas práticas de integração
🔄 Protocolo de Resposta Padronizado
Todas as respostas da API Juvo D2C seguem um protocolo padronizado chamado BFFResponseBase. Independente do status code HTTP retornado (200, 400, 500, etc.), a estrutura do payload JSON será sempre a mesma, garantindo consistência e facilidade de integração.
📊 Estrutura da Resposta
Toda resposta da API contém quatro propriedades principais:
{
"trackingId": string,
"isSuccess": boolean,
"errors": string[] | null,
"data": object | null
}
trackingId string
Identificador único para rastreamento da requisição. Este ID permite correlacionar logs, debugar problemas e acompanhar o ciclo de vida de cada operação.
- Formato UUID (ex: "f47ac10b-58cc-4372-a567-0e02b2c3d479")
- Único para cada requisição
- Útil para suporte técnico e auditoria
- Deve ser incluído em relatórios de erro
isSuccess boolean
Indica se a operação foi executada com sucesso. Use esta propriedade como primeiro ponto de verificação para determinar o resultado da chamada.
- true: Operação realizada com sucesso
- false: Erro durante a execução
errors string[] | null
Lista de mensagens de erro quando isSuccess = false. Será null ou vazio quando a operação for bem-sucedida.
- Contém mensagens descritivas dos erros ocorridos
- Pode conter múltiplas mensagens de validação
- Útil para exibir feedback detalhado ao usuário
data object | null
Contém os dados retornados pela operação quando isSuccess = true. Será null quando houver erro.
- Estrutura varia conforme o endpoint chamado
- Contém o resultado efetivo da operação
- Sempre tipado conforme documentação do endpoint
✅ Exemplo de Resposta de Sucesso
{
"trackingId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"isSuccess": true,
"errors": null,
"data": {
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"personId": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
"status": "APPROVED",
"amount": 5000.00
}
}
❌ Exemplo de Resposta de Erro
{
"trackingId": "b2c3d4e5-f6g7-8901-bcde-f23456789012",
"isSuccess": false,
"errors": [
"O campo 'fullName' é obrigatório",
"O campo 'email' deve ter um formato válido"
],
"data": null
}
💡 Boas Práticas de Integração
1. Sempre verifique isSuccess primeiro
const response = await fetch('/api/endpoint');
const result = await response.json();
// Sempre capture o trackingId para logs e suporte
console.log('TrackingId:', result.trackingId);
if (result.isSuccess) {
// Processar result.data
console.log('Dados:', result.data);
} else {
// Tratar erros em result.errors
console.error('Erros:', result.errors, 'TrackingId:', result.trackingId);
}
2. Não dependa apenas do status code HTTP
Mesmo com status 200, a operação pode ter falhado. Sempre use isSuccess para determinar o resultado.
3. Trate erros de forma amigável
Use as mensagens do array errors para fornecer feedback específico ao usuário final.
4. Validação de tipo
Sempre valide se data não é null antes de acessar suas propriedades.
5. Use trackingId para suporte
Sempre inclua o trackingId ao reportar problemas para o suporte técnico. Isso acelera significativamente o diagnóstico e resolução de issues.
POST /public/api/auth
Endpoint para autenticação de parceiros no sistema.
Request Body
{
"clientId": "82e38af0-ed1e-474e-8283-1d2f07a589e1",
"clientSecret": "your-client-secret"
}
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| clientId | string | Yes | UUID do cliente parceiro |
| clientSecret | string | Yes | Secret (base64) do cliente parceiro |
Response
{
"isSuccess": true,
"data": {
"token": "jwt-token-here",
"expiresAt": "2024-01-01T23:59:59Z"
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| token | string | Token JWT para autenticação em endpoints protegidos |
| expiresAt | string | Data e hora de expiração do token (ISO 8601) |
POST /public/api/auth/users
Autentica um usuário vinculado a um parceiro usando nome de usuário/CPF e senha. Retorna token JWT com contexto de parceiro.
Request Body
{
"userNameOrDocumentNumber": "user@example.com",
"password": "your-secure-password"
}
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| userNameOrDocumentNumber | string | Yes | Nome de usuário, email ou CPF do usuário |
| password | string | Yes | Senha do usuário |
Response
{
"trackingId": "f6g7h8i9-j0k1-2345-fghi-678901234567",
"isSuccess": true,
"data": {
"credentialId": "user-credential-id",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expirationDate": "2025-10-31T23:59:59Z"
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| credentialId | string | ID da credencial do usuário autenticado |
| token | string | Token JWT para autenticação em endpoints protegidos |
| expirationDate | string | Data e hora de expiração do token (ISO 8601) |
Use Cases
1. **Portais Web de Parceiros**: Login de usuários administradores do parceiro
2. **Aplicações Mobile**: Autenticação de usuários no aplicativo do parceiro
3. **Painéis Administrativos**: Acesso de gerentes e operadores do parceiro
4. **Gestão de Contas**: Usuários com permissões específicas por parceiro
POST /public/api/auth/apps
Autentica uma aplicação (não vinculada a parceiro) usando Client ID e Secret. Utilizado para integrações de sistema.
Request Body
{
"clientId": "application-client-id",
"clientSecret": "application-client-secret-base64"
}
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| clientId | string | Yes | Client ID da aplicação |
| clientSecret | string | Yes | Secret (base64) da aplicação |
Response
{
"trackingId": "i9j0k1l2-m3n4-5678-ijkl-901234567890",
"isSuccess": true,
"data": {
"credentialId": "application-credential-id",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expirationDate": "2025-10-31T23:59:59Z"
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| credentialId | string | ID da credencial da aplicação |
| token | string | Token JWT para autenticação em endpoints protegidos |
| expirationDate | string | Data e hora de expiração do token (ISO 8601) |
Use Cases
1. **Integrações M2M**: Comunicação entre sistemas sem contexto de usuário
2. **Serviços Internos**: Microserviços que precisam acessar a API
3. **Jobs e Processos**: Tarefas automatizadas do sistema
4. **APIs de Terceiros**: Integrações externas não vinculadas a parceiros
POST /public/api/auth/apps/partners
Autentica uma aplicação com permissões de parceiro. Permite que aplicações do sistema atuem em nome de parceiros para operações administrativas.
⚠️ IMPORTANTE: Header Obrigatório
Este endpoint requer um header obrigatório além do request body:
Required Headers
| Name | Type | Required | Description |
|---|---|---|---|
| juvo-partner-code | string | Yes | CNPJ do parceiro (identificação única). Deve ser enviado no header da requisição. |
Exemplo de Headers
Content-Type: application/json
juvo-partner-code: 12345678000190
Exemplo Completo de Requisição HTTP
POST /public/api/auth/apps/partners HTTP/1.1
Host: services.juvocredito.com.br
Content-Type: application/json
juvo-partner-code: 12345678000190
{
"clientId": "admin-application-client-id",
"clientSecret": "admin-application-secret-base64"
}
Request Body
{
"clientId": "admin-application-client-id",
"clientSecret": "admin-application-secret-base64"
}
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| clientId | string | Yes | Client ID da aplicação administrativa |
| clientSecret | string | Yes | Secret (base64) da aplicação administrativa |
Response
{
"trackingId": "l2m3n4o5-p6q7-8901-lmno-234567890123",
"isSuccess": true,
"data": {
"credentialId": "admin-app-credential-id",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expirationDate": "2025-10-31T23:59:59Z"
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| credentialId | string | ID da credencial da aplicação administrativa |
| token | string | Token JWT com permissões de parceiro |
| expirationDate | string | Data e hora de expiração do token (ISO 8601) |
Status Codes e Erros
Response (401) - Header Obrigatório Ausente
{
"trackingId": "n4o5p6q7-r8s9-0123-nopq-456789012345",
"isSuccess": false,
"errors": ["A chave juvo-partner-code não possui valor ou não foi enviada"]
}
Response (401) - Parceiro Não Encontrado
{
"trackingId": "o5p6q7r8-s9t0-2345-opqr-567890123456",
"isSuccess": false,
"errors": ["Não foi possível obter as informações do parceiro com as credenciais informadas."]
}
Use Cases
- Backoffice Juvo: Administração de operações de todos os parceiros
- Ferramentas Administrativas: Gestão centralizada de recursos
- Suporte Técnico: Operações de suporte com acesso elevado
- Migrações e Scripts: Execução de tarefas massivas no sistema
Security Considerations
⚠️ IMPORTANTE:
- Este endpoint concede permissões administrativas elevadas
- Deve ser usado apenas por aplicações internas confiáveis
- Credenciais devem ser armazenadas de forma segura (vaults)
- Auditoria de uso deve ser rigorosa
- Rotação de credenciais deve ser frequente
- Header obrigatório: O CNPJ do parceiro (juvo-partner-code) deve ser enviado no header da requisição. Este é usado para identificar qual parceiro a aplicação está representando.
⚠️ Regras de Autorização - Device Financings
Regras de Autorização para Endpoints de Device Financings
Todos os endpoints de Device Financings aceitam dois tipos de tokens de autenticação:
1. Token de Aplicação
Se você utilizar um token de aplicação (gerado via POST /public/api/auth/apps), é obrigatório incluir o header juvo-partner-code com o CNPJ do parceiro na requisição.
juvo-partner-code: 12345678000190
2. Token de Parceiro
Se você utilizar um token de parceiro (gerado via POST /public/api/auth ou POST /public/api/auth/apps/partners), não é necessário passar nenhum parâmetro adicional no cabeçalho. O contexto do parceiro já está incluído no próprio token.
Resumo
| Tipo de Token | Header Necessário | Valor do Header |
|---|---|---|
| Token de Aplicação | Sim | juvo-partner-code: <CNPJ> |
| Token de Parceiro | Não | - |
POST /public/api/device-financing/check-availabilities
Verificar disponibilidade de financiamento para dispositivos.
Required Headers
⚠️ Importante: Se você estiver usando um Token de Aplicação, é obrigatório incluir o header juvo-partner-code com o CNPJ do parceiro.
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Bearer token JWT |
| juvo-partner-code | string | Condicional | CNPJ do parceiro (obrigatório apenas se o token for de Aplicação) |
Request Body
{
"fullName": "João da Silva",
"personDocumentNumber": "12345678901",
"email": "joao.silva@email.com",
"phoneNumber": "+5511999999999",
"addressPostalCode": "01234-567",
"bestDayToPay": 15,
"birthdate": "1990-01-15T00:00:00Z",
"grossIncome": 5000.00
}
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| fullName | string | Yes | Nome completo do cliente |
| personDocumentNumber | string | Yes | CPF do cliente |
| string | Yes | Email válido do cliente | |
| phoneNumber | string | Yes | Número de telefone do cliente |
| addressPostalCode | string | Yes | CEP do endereço do cliente |
| bestDayToPay | number | Yes | Melhor dia do mês para pagamento (1-30) |
| birthdate | string | No | Data de nascimento (ISO 8601) |
| grossIncome | number | Yes | Renda bruta mensal |
Response
{
"isSuccess": true,
"data": {
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"personId": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
"operationId": "550e8400-e29b-41d4-a716-446655440000",
"redirectUrl": "https://redirect.example.com",
"proposition": {
"minOfferAmount": 1000.00,
"maxOfferAmount": 10000.00,
"offers": [
{
"offerId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"installmentQuantity": 12,
"rateInPercentage": 2.99,
"downPaymentMinimalPercentage": 10.0,
"minLoanAmount": 1000.00,
"maxLoanAmount": 5000.00
}
],
"releaseDateCandidate": "2025-11-15T00:00:00Z"
}
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| loanId | string | ID único do empréstimo gerado |
| personId | string | ID único da pessoa no sistema |
| operationId | string | ID único da operação de análise |
| redirectUrl | string | URL de redirecionamento para continuação do processo |
| proposition | object | Proposta de financiamento com opções disponíveis |
| proposition.minOfferAmount | number | Valor mínimo disponível para financiamento |
| proposition.maxOfferAmount | number | Valor máximo disponível para financiamento |
| proposition.offers | array | Lista de ofertas de financiamento disponíveis |
| proposition.offers[].offerId | string | ID único da oferta de financiamento |
| proposition.offers[].installmentQuantity | number | Quantidade de parcelas da oferta |
| proposition.offers[].rateInPercentage | number | Taxa de juros mensal em percentual |
| proposition.offers[].downPaymentMinimalPercentage | number | Percentual mínimo de entrada exigido |
| proposition.offers[].minLoanAmount | number | Valor mínimo para esta oferta específica |
| proposition.offers[].maxLoanAmount | number | Valor máximo para esta oferta específica |
| proposition.releaseDateCandidate | datetime | Data candidata para liberação do crédito |
Status Codes e Erros
Response (401) - Header Obrigatório Ausente (Token de Aplicação)
{
"trackingId": "e5f6g7h8-i9j0-1234-efgh-567890123457",
"isSuccess": false,
"errors": ["A chave juvo-partner-code não possui valor ou não foi enviada"]
}
POST /public/api/device-financing/choose-financial-data
Escolher dados financeiros para o financiamento.
Required Headers
⚠️ Importante: Se você estiver usando um Token de Aplicação, é obrigatório incluir o header juvo-partner-code com o CNPJ do parceiro.
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Bearer token JWT |
| juvo-partner-code | string | Condicional | CNPJ do parceiro (obrigatório apenas se o token for de Aplicação) |
Request Body
{
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"offerId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"loanAmount": 5000.00,
"downPayment": 500.00,
"deviceData": {
"brand": "Device Brand Name",
"model": "Device Model Code",
"deviceId": "IMEI or Unique Device Id",
"modelName": "Device Model Name",
"operationSystem": "Device OS"
},
"addressData": {
"street": "Rua das Flores",
"neighborhood": "Centro",
"addressNumber": "123",
"addressComplement": "Apto 45",
"city": "São Paulo"
}
}
Response
{
"isSuccess": true,
"data": {
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"personId": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
"financedAmount": 4500.00,
"downPaymentAmount": 500.00,
"formalizationDate": "2024-01-15T00:00:00Z",
"installmentQuantity": 12,
"installmentAmount": 425.50,
"rate": 2.99,
"creditOpeningFee": 89.90,
"financialOperationTaxAmount": 25.00,
"grossAmount": 5114.90,
"totalDueAmount": 5110.00,
"monthlyTotalEffectiveCost": 15.6,
"yearlyTotalEffectiveCost": 187.2,
"installments": [
{
"number": 1,
"dueDate": "2024-02-15T00:00:00Z",
"amount": 425.50,
"interestRateAmount": 13.43,
"principalAmount": 412.07
}
]
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| loanId | string | ID único do empréstimo |
| personId | string | ID único da pessoa no sistema |
| financedAmount | number | Valor financiado (valor total menos entrada) |
| downPaymentAmount | number | Valor da entrada paga |
| formalizationDate | string | Data de formalização do contrato (ISO 8601) |
| installmentQuantity | number | Quantidade total de parcelas |
| installmentAmount | number | Valor de cada parcela |
| rate | number | Taxa de juros mensal aplicada |
| creditOpeningFee | number | Taxa de abertura de crédito |
| financialOperationTaxAmount | number | Valor do IOF (Imposto sobre Operações Financeiras) |
| grossAmount | number | Valor bruto total da operação |
| totalDueAmount | number | Valor total devido (soma de todas as parcelas) |
| monthlyTotalEffectiveCost | number | Custo Efetivo Total mensal (CET) |
| yearlyTotalEffectiveCost | number | Custo Efetivo Total anual (CET) |
| installments | array | Lista detalhada de todas as parcelas |
| installments[].number | number | Número da parcela |
| installments[].dueDate | string | Data de vencimento da parcela (ISO 8601) |
| installments[].amount | number | Valor total da parcela |
| installments[].interestRateAmount | number | Valor dos juros na parcela |
| installments[].principalAmount | number | Valor do principal (amortização) na parcela |
PUT /public/api/device-financing/accept-loans
Aceitar o empréstimo de financiamento.
Required Headers
⚠️ Importante: Se você estiver usando um Token de Aplicação, é obrigatório incluir o header juvo-partner-code com o CNPJ do parceiro.
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Bearer token JWT |
| juvo-partner-code | string | Condicional | CNPJ do parceiro (obrigatório apenas se o token for de Aplicação) |
Request Body
{
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"notes": "Empréstimo aceito pelo cliente"
}
Response
{
"isSuccess": true,
"data": {
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"personId": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
"financedAmount": 4500.00,
"downPaymentAmount": 500.00,
"formalizationDate": "2024-01-15T00:00:00Z",
"installmentQuantity": 12,
"installmentAmount": 425.50,
"rate": 2.99,
"creditOpeningFee": 89.90,
"financialOperationTaxAmount": 25.00,
"grossAmount": 5114.90,
"totalDueAmount": 5110.00,
"monthlyTotalEffectiveCost": 15.6,
"yearlyTotalEffectiveCost": 187.2,
"ccbNumber": "CCB-12345678",
"signatureLink": "https://signature.example.com/sign-doc",
"installments": [
{
"number": 1,
"dueDate": "2024-02-15T00:00:00Z",
"amount": 425.50,
"interestRateAmount": 13.43,
"principalAmount": 412.07
}
]
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| loanId | string | ID único do empréstimo |
| personId | string | ID único da pessoa no sistema |
| ccbNumber | string | Número da Cédula de Crédito Bancário (CCB) |
| signatureLink | string | URL para assinatura digital do contrato |
| financedAmount | number | Valor financiado (valor total menos entrada) |
| downPaymentAmount | number | Valor da entrada paga |
| formalizationDate | string | Data de formalização do contrato (ISO 8601) |
| installmentQuantity | number | Quantidade total de parcelas |
| installmentAmount | number | Valor de cada parcela |
| rate | number | Taxa de juros mensal aplicada |
| installments | array | Lista detalhada de todas as parcelas |
| installments[].number | number | Número da parcela |
| installments[].dueDate | string | Data de vencimento da parcela (ISO 8601) |
| installments[].amount | number | Valor total da parcela |
| installments[].interestRateAmount | number | Valor dos juros na parcela |
| installments[].principalAmount | number | Valor do principal (amortização) na parcela |
PUT /public/api/device-financing/disburse-loans
Realizar o disbursement do empréstimo.
Required Headers
⚠️ Importante: Se você estiver usando um Token de Aplicação, é obrigatório incluir o header juvo-partner-code com o CNPJ do parceiro.
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Bearer token JWT |
| juvo-partner-code | string | Condicional | CNPJ do parceiro (obrigatório apenas se o token for de Aplicação) |
Request Body
{
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"downPaymentReceipt": "base64-encoded-file-or-url"
}
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| loanId | string | Yes | UUID do empréstimo |
| downPaymentReceipt | string | No | Comprovante de entrada (URL, base64 ou ID de transação) |
Response
{
"isSuccess": true,
"data": {
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"status": "DISBURSED"
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| loanId | string | ID único do empréstimo desembolsado |
| status | string | Status atual do empréstimo (DISBURSED = desembolsado) |
PUT /public/api/device-financing/cancel-loans
Cancelar o empréstimo de financiamento.
Required Headers
⚠️ Importante: Se você estiver usando um Token de Aplicação, é obrigatório incluir o header juvo-partner-code com o CNPJ do parceiro.
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Bearer token JWT |
| juvo-partner-code | string | Condicional | CNPJ do parceiro (obrigatório apenas se o token for de Aplicação) |
Request Body
{
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"notes": "Cancelamento solicitado pelo cliente"
}
Response
{
"isSuccess": true,
"data": {
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"status": "CANCELLED"
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| loanId | string | ID único do empréstimo cancelado |
| status | string | Status atual do empréstimo (CANCELLED = cancelado) |
GET /public/api/device-financing/loans/{loanId}/chargings
Obter informações de cobrança de um empréstimo específico.
Required Headers
⚠️ Importante: Se você estiver usando um Token de Aplicação, é obrigatório incluir o header juvo-partner-code com o CNPJ do parceiro.
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Bearer token JWT |
| juvo-partner-code | string | Condicional | CNPJ do parceiro (obrigatório apenas se o token for de Aplicação) |
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| loanId | string | Yes | ID único do empréstimo |
Response
{
"isSuccess": true,
"data": {
"loanId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validUntil": "2024-02-15T23:59:59Z",
"currentStatus": "WaitingPayment",
"chargingUrl": "https://charging.example.com/pay/abc123",
"chargingType": "Ordinary",
"paymentType": "PIX",
"chargingCode": "ABC123DEF456",
"amount": 425.50,
"installments": [
{
"number": 1,
"representationAmount": 425.50,
"originalDueDate": "2024-02-15T00:00:00Z"
}
]
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| loanId | string | ID único do empréstimo |
| validUntil | string | Data limite de validade da cobrança (ISO 8601) |
| currentStatus | string | Status atual da cobrança (WaitingPayment, Paid, Overdue) |
| chargingUrl | string | URL para realizar o pagamento da parcela |
| chargingType | string | Tipo de cobrança (PIX, Boleto, Cartão) |
| paymentType | string | Método de pagamento disponível |
| chargingCode | string | Código identificador da cobrança |
| amount | number | Valor da cobrança |
| installments | array | Lista de parcelas relacionadas à cobrança |
| installments[].number | number | Número da parcela |
| installments[].representationAmount | number | Valor representativo da parcela |
| installments[].originalDueDate | string | Data de vencimento original da parcela (ISO 8601) |
GET /public/api/files/{fileId}
Obter URL assinada para acesso ao arquivo.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| fileId | string | Yes | ID único do arquivo |
Response
{
"isSuccess": true,
"data": {
"fileId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"fileName": "document.pdf",
"contentType": "application/pdf",
"size": 2048576,
"uploadDate": "2024-01-15T10:30:00Z",
"signedUrl": "https://storage.example.com/signed-url-here",
"metadata": {
"description": "Document description",
"tags": ["loan", "document"]
}
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| fileId | string | ID único do arquivo no sistema |
| fileName | string | Nome original do arquivo |
| contentType | string | Tipo MIME do arquivo (ex: application/pdf) |
| size | number | Tamanho do arquivo em bytes |
| uploadDate | string | Data de upload do arquivo (ISO 8601) |
| signedUrl | string | URL assinada para acesso temporário ao arquivo |
| metadata | object | Metadados adicionais do arquivo |
| metadata.description | string | Descrição do arquivo |
| metadata.tags | string[] | Tags de categorização do arquivo |
POST /public/api/files/bytes
Fazer upload de arquivo via array de bytes (base64).
Request Body
{
"fileName": "document.pdf",
"contentType": "application/pdf",
"bytes": "base64-encoded-file-content",
"metadata": {
"description": "Document description",
"tags": ["loan", "document"]
}
}
Response
{
"isSuccess": true,
"data": {
"fileId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"fileName": "document.pdf",
"contentType": "application/pdf",
"size": 2048576,
"uploadDate": "2024-01-15T10:30:00Z",
"signedUrl": "https://storage.example.com/signed-url-here",
"metadata": {
"description": "Document description",
"tags": ["loan", "document"]
}
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| fileId | string | ID único do arquivo gerado no sistema |
| fileName | string | Nome do arquivo conforme enviado |
| contentType | string | Tipo MIME do arquivo |
| size | number | Tamanho do arquivo em bytes |
| uploadDate | string | Data e hora do upload (ISO 8601) |
| signedUrl | string | URL assinada para acesso temporário ao arquivo |
| metadata | object | Metadados fornecidos durante upload |
| metadata.description | string | Descrição do arquivo |
| metadata.tags | string[] | Tags de categorização do arquivo |
POST /public/api/files/urls
Fazer upload de arquivo a partir de uma URL externa.
Request Body
{
"fileName": "document.pdf",
"url": "https://example.com/document.pdf",
"metadata": {
"description": "Document description",
"tags": ["loan", "document"]
}
}
Response
{
"isSuccess": true,
"data": {
"fileId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"fileName": "document.pdf",
"contentType": "application/pdf",
"size": 2048576,
"uploadDate": "2024-01-15T10:30:00Z",
"signedUrl": "https://storage.example.com/signed-url-here",
"metadata": {
"description": "Document description",
"tags": ["loan", "document"]
}
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| fileId | string | ID único do arquivo gerado no sistema |
| fileName | string | Nome do arquivo conforme enviado |
| contentType | string | Tipo MIME do arquivo detectado automaticamente |
| size | number | Tamanho do arquivo em bytes |
| uploadDate | string | Data e hora do upload (ISO 8601) |
| signedUrl | string | URL assinada para acesso temporário ao arquivo |
| metadata | object | Metadados fornecidos durante upload |
| metadata.description | string | Descrição do arquivo |
| metadata.tags | string[] | Tags de categorização do arquivo |
GET /public/api/equipments/brands
Retorna todas as marcas de dispositivos disponíveis para financiamento. Apenas marcas que possuem modelos com preços estimados definidos serão retornadas.
Response
{
"trackingId": "o5p6q7r8-s9t0-2345-opqr-567890123456",
"isSuccess": true,
"data": {
"brands": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "Apple",
"manufacturerName": "Apple Inc."
},
{
"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"name": "Samsung",
"manufacturerName": "Samsung Electronics"
},
{
"id": "7cb96c21-aade-22e2-91c5-11d15fe541d9",
"name": "Motorola",
"manufacturerName": "Motorola Mobility LLC"
}
]
}
}
Response Fields
| Name | Type | Description |
|---|---|---|
| brands | array | Lista de marcas disponíveis para financiamento |
| brands[].id | string (uuid) | Identificador único da marca |
| brands[].name | string | Nome comercial da marca |
| brands[].manufacturerName | string | Nome completo do fabricante |
Business Rules
• Apenas marcas ativas (IsActive = true) são retornadas
• A marca deve ter pelo menos um modelo associado
• O modelo deve ter o campo EstimatedPrice preenchido
• Resultados são ordenados alfabeticamente pelo nome da marca
• Query otimizada com EXISTS para melhor performance
Use Cases
1. **Catálogo de Dispositivos**: Listar marcas disponíveis para o cliente escolher
2. **Filtros de Busca**: Usar como opções de filtro em interfaces de seleção
3. **Validação**: Verificar se uma marca específica está disponível para financiamento
4. **Integração**: Sincronizar catálogo de produtos com marcas disponíveis