Produtos
Gerenciamento de produtos de crédito na Catalisa Platform.
Endpoints
| Método | Endpoint | Descrição | Permissão |
|---|---|---|---|
| POST | /api/v1/products | Criar produto | PRODUCTS_CREATE |
| GET | /api/v1/products | Listar produtos | PRODUCTS_READ |
| GET | /api/v1/products/:id | Obter produto | PRODUCTS_READ |
| PATCH | /api/v1/products/:id | Atualizar produto | PRODUCTS_UPDATE |
| DELETE | /api/v1/products/:id | Excluir produto | PRODUCTS_DELETE |
Criar Produto
POST /api/v1/products
Cria um novo produto de crédito.
Request
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do produto (1-100 chars) |
productType | string | Sim | Tipo do produto |
description | string | Sim | Descrição (1-5000 chars) |
minAmount | object | Sim | Valor mínimo |
maxAmount | object | Sim | Valor máximo |
minInterestRate | number | Sim | Taxa juros mínima (0-1) |
maxInterestRate | number | Sim | Taxa juros máxima (0-1) |
minInstallments | integer | Sim | Parcelas mínimas (1-360) |
maxInstallments | integer | Sim | Parcelas máximas (1-360) |
registrationTariffRate | number | Não | Taxa de cadastro |
insuranceRate | number | Não | Taxa de seguro |
iofAdditionalRate | number | Não | IOF adicional |
iofDailyRate | number | Não | IOF diário |
amortizationMethod | string | Não | Método de amortização (ver tabela) |
amortizationConfig | object | Condicional | Configuração do método (ver index) |
gracePeriodMonths | integer | Não | Meses de carência (≥0) |
metadata | object | Não | Dados customizados |
minLtv | number | Não | LTV mínimo (0-1, apenas MORTGAGE) |
maxLtv | number | Não | LTV máximo (0-1, apenas MORTGAGE) |
- cURL
- JavaScript
curl -X POST 'https://products.stg.catalisa.app/api/v1/products' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "products",
"attributes": {
"name": "Empréstimo Pessoal Standard",
"productType": "PERSONAL_LOAN",
"description": "Empréstimo pessoal para clientes com renda comprovada",
"minAmount": { "amount": 1000, "currency": "BRL" },
"maxAmount": { "amount": 50000, "currency": "BRL" },
"minInterestRate": 0.0199,
"maxInterestRate": 0.0599,
"minInstallments": 6,
"maxInstallments": 48,
"registrationTariffRate": 0.02,
"insuranceRate": 0.003,
"iofAdditionalRate": 0.0038,
"iofDailyRate": 0.000082,
"amortizationMethod": "PRICE"
}
}
}'
const response = await fetch('https://products.stg.catalisa.app/api/v1/products', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'products',
attributes: {
name: 'Empréstimo Pessoal Standard',
productType: 'PERSONAL_LOAN',
description: 'Empréstimo pessoal para clientes com renda comprovada',
minAmount: { amount: 1000, currency: 'BRL' },
maxAmount: { amount: 50000, currency: 'BRL' },
minInterestRate: 0.0199,
maxInterestRate: 0.0599,
minInstallments: 6,
maxInstallments: 48,
registrationTariffRate: 0.02,
insuranceRate: 0.003,
iofAdditionalRate: 0.0038,
iofDailyRate: 0.000082,
amortizationMethod: 'PRICE',
},
},
}),
});
const product = await response.json();
Response (201 Created)
{
"data": {
"type": "products",
"id": "550e8400-e29b-41d4-a716-446655440000",
"attributes": {
"name": "Empréstimo Pessoal Standard",
"productType": "PERSONAL_LOAN",
"description": "Empréstimo pessoal para clientes com renda comprovada",
"active": true,
"minAmount": { "amount": 1000, "currency": "BRL" },
"maxAmount": { "amount": 50000, "currency": "BRL" },
"minInterestRate": 0.0199,
"maxInterestRate": 0.0599,
"minInstallments": 6,
"maxInstallments": 48,
"registrationTariffRate": 0.02,
"insuranceRate": 0.003,
"iofAdditionalRate": 0.0038,
"iofDailyRate": 0.000082,
"amortizationMethod": "PRICE",
"createdAt": "2024-01-15T10:30:00Z"
},
"links": {
"self": "/api/v1/products/550e8400-e29b-41d4-a716-446655440000"
}
}
}
Listar Produtos
GET /api/v1/products
Lista produtos com suporte a paginação e filtros.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
page[number] | integer | Número da página |
page[size] | integer | Itens por página |
filter[active] | boolean | Filtrar por status ativo |
filter[productType] | string | Filtrar por tipo |
- cURL
- JavaScript
curl 'https://products.stg.catalisa.app/api/v1/products?filter[active]=true&filter[productType]=PERSONAL_LOAN' \
-H 'Authorization: Bearer SEU_TOKEN'
const params = new URLSearchParams({
'filter[active]': 'true',
'filter[productType]': 'PERSONAL_LOAN',
});
const response = await fetch(`https://products.stg.catalisa.app/api/v1/products?${params}`, {
headers: {
'Authorization': `Bearer ${token}`,
},
});
const { data, meta } = await response.json();
Response (200 OK)
{
"data": [
{
"type": "products",
"id": "550e8400-e29b-41d4-a716-446655440000",
"attributes": {
"name": "Empréstimo Pessoal Standard",
"productType": "PERSONAL_LOAN",
"active": true,
"minInterestRate": 0.0199,
"maxInterestRate": 0.0599
}
}
],
"meta": {
"totalItems": 5,
"totalPages": 1,
"currentPage": 1
}
}
Obter Produto
GET /api/v1/products/:productId
Obtém detalhes de um produto específico.
- cURL
- JavaScript
curl 'https://products.stg.catalisa.app/api/v1/products/550e8400-e29b-41d4-a716-446655440000' \
-H 'Authorization: Bearer SEU_TOKEN'
const productId = '550e8400-e29b-41d4-a716-446655440000';
const response = await fetch(`https://products.stg.catalisa.app/api/v1/products/${productId}`, {
headers: {
'Authorization': `Bearer ${token}`,
},
});
const product = await response.json();
Atualizar Produto
PATCH /api/v1/products/:productId
Atualiza dados de um produto.
informação
Apenas os campos description e active podem ser atualizados.
Request
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
description | string | Não | Nova descrição |
active | boolean | Não | Status ativo |
- cURL
- JavaScript
curl -X PATCH 'https://products.stg.catalisa.app/api/v1/products/550e8400-e29b-41d4-a716-446655440000' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"description": "Empréstimo pessoal - promocao de verao",
"active": false
}'
const productId = '550e8400-e29b-41d4-a716-446655440000';
const response = await fetch(`https://products.stg.catalisa.app/api/v1/products/${productId}`, {
method: 'PATCH',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
description: 'Empréstimo pessoal - promocao de verao',
active: false,
}),
});
const product = await response.json();
Response (200 OK)
{
"data": {
"type": "products",
"id": "550e8400-e29b-41d4-a716-446655440000",
"attributes": {
"name": "Empréstimo Pessoal Standard",
"description": "Empréstimo pessoal - promocao de verao",
"active": false,
"updatedAt": "2024-01-15T11:00:00Z"
}
}
}
Excluir Produto
DELETE /api/v1/products/:productId
Remove um produto do sistema.
- cURL
- JavaScript
curl -X DELETE 'https://products.stg.catalisa.app/api/v1/products/550e8400-e29b-41d4-a716-446655440000' \
-H 'Authorization: Bearer SEU_TOKEN'
const productId = '550e8400-e29b-41d4-a716-446655440000';
const response = await fetch(`https://products.stg.catalisa.app/api/v1/products/${productId}`, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
},
});
// Status 204 No Content = sucesso
Response (204 No Content)
Sem corpo de resposta.
Exemplos Detalhados
Veja os guias completos com simulações e comparativos:
- Empréstimo Pessoal - Tabela PRICE com IOF e CET
- Financiamento Imobiliário - MORTGAGE com BALLOON e LTV
- Capital de Giro com Carência - INTEREST_ONLY
- Parcelas Crescentes - STEP_UP e STEP_DOWN
Erros Comuns
| Código | Erro | Descrição |
|---|---|---|
| 400 | VALIDATION | Campos inválidos (taxa fora do range, etc.) |
| 400 | VALIDATION | LTV só permitido para MORTGAGE |
| 400 | VALIDATION | amortizationConfig incompatível com amortizationMethod |
| 404 | NOT_FOUND | Produto não encontrado |
| 409 | CONFLICT | Nome de produto duplicado |