# Criar empréstimo

POST /loansAceita uma oferta de crédito e cria um empréstimo

Endpoint: POST /loans
Version: 2026-03-01
Security: bearerAuth

## Security:

  - `bearerAuth` (unknown)
    http bearer JWT

## Request fields (application/json):

  - `credit_offer_id` (string, required)
    Identificador único da oferta de crédito
    Example: co_550e8400e29b41d4a716446655440000

  - `simulation_id` (string, required)
    Identificador único da simulação
    Example: sim_550e8400e29b41d4a716446655440000

  - `installment_count` (integer, required)
    Deve corresponder à simulação
    Example: 4

  - `installment_amount` (number, required)
    Deve corresponder à simulação
    Example: 7997.34

  - `first_due_date` (string, required)
    ISO 8601 · date
Deve corresponder à simulação
    Example: 2026-04-03

## Response 201:

  - `201` (unknown)
    Empréstimo criado

## Response 201 fields (application/json):

  - `id` (string, required)
    Identificador único do empréstimo
    Example: ln_550e8400e29b41d4a716446655440000

  - `credit_offer_id` (string, required)
    Identificador único da oferta de crédito
    Example: co_550e8400e29b41d4a716446655440000

  - `customer_id` (string, required)
    Identificador único do cliente
    Example: cust_550e8400e29b41d4a716446655440000

  - `simulation_id` (string, required)
    Identificador único da simulação
    Example: sim_550e8400e29b41d4a716446655440000

  - `status` (string, required)
    `awaiting_signatures`, `processing`, `active`, `finished`, `cancelled`, `error`
    Enum: "awaiting_signatures", "processing", "active", "finished", "cancelled", "error"

  - `requested_amount` (number, required)
    Valor monetário em BRL
    Example: 25000

  - `principal_amount` (number | null, required)
    Valor financiado (solicitado + taxas financiadas)

  - `iof_amount` (number | null, required)
    Valor do IOF

  - `monthly_interest_rate` (number, required)
    Taxa de juros mensal (%)

  - `annual_interest_rate` (number, required)
    Taxa de juros anual (%, composta a partir da mensal)

  - `monthly_cet_rate` (number, required)
    Custo efetivo total mensal (%)

  - `annual_cet_rate` (number, required)
    Custo efetivo total anual (%)

  - `installment_count` (integer, required)
    Número de parcelas

  - `installment_amount` (number, required)
    Valor de cada parcela
    Example: 7997.34

  - `first_due_date` (string, required)
    ISO 8601 · date
Data de vencimento da primeira parcela
    Example: 2026-04-03

  - `ccb_number` (string | null, required)
    Número da cédula de crédito bancário

  - `disbursement_method` (string | null, required)
    Como os fundos são enviados (ex: `pix`)

  - `signing_url` (string | null, required)
    URL de assinatura do contrato (apenas durante `awaiting_signatures`)

  - `created_at` (integer, required)
    Epoch Unix em segundos

  - `updated_at` (integer, required)
    Epoch Unix em segundos

## Response 400:

  - `400` (unknown)
    Requisição inválida

## Response 400 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/invalid-request"

  - `title` (string, required)
    Enum: "Invalid Request"

  - `status` (integer, required)
    Enum: "400"

  - `detail` (string, required)

  - `code` (string, required)
    Enum: "invalid_content_type", "malformed_body"

## Response 401:

  - `401` (unknown)
    Falha na autenticação

## Response 401 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/authentication-failed"

  - `title` (string, required)
    Enum: "Authentication Failed"

  - `status` (integer, required)
    Enum: "401"

  - `detail` (string, required)

  - `code` (string, required)
    Enum: "missing_token", "invalid_token", "token_expired"

## Response 404:

  - `404` (unknown)
    Recurso não encontrado

## Response 404 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/not-found"

  - `title` (string, required)
    Enum: "Not Found"

  - `status` (integer, required)
    Enum: "404"

  - `detail` (string, required)

  - `code` (string, required)
    Enum: "credit_offer_not_found"

## Response 409:

  - `409` (unknown)
    Conflito

## Response 409 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/conflict"

  - `title` (string, required)
    Enum: "Conflict"

  - `status` (integer, required)
    Enum: "409"

  - `detail` (string, required)

  - `code` (string, required)
    Enum: "offer_already_accepted", "withdrawal_locked"

## Response 422:

  - `422` (unknown)
    Falha na validação

## Response 422 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/validation-failed"

  - `title` (string, required)
    Enum: "Validation Failed"

  - `status` (integer, required)
    Enum: "422"

  - `detail` (string, required)

  - `code` (string, required)
    Enum: "missing_required_field", "offer_expired", "kyc_incomplete", "invalid_amount", "invalid_installments", "simulation_mismatch"

## Response 429:

  - `429` (unknown)
    Limite de requisições excedido

## Response 429 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/rate-limit-exceeded"

  - `title` (string, required)
    Enum: "Rate Limit Exceeded"

  - `status` (integer, required)
    Enum: "429"

  - `detail` (string, required)

## Response 429 headers (application/problem+json):

  - `Retry-After` (integer)
    Segundos até o limite de requisições ser reiniciado

## Response 500:

  - `500` (unknown)
    Erro interno do servidor

## Response 500 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/internal"

  - `title` (string, required)
    Enum: "Internal Error"

  - `status` (integer, required)
    Enum: "500"

  - `detail` (string, required)

## Response 400 examples:

  - ``Content-Type` is not `application/json`` (unknown)

  - `Request body is not valid JSON` (unknown)

## Response 401 examples:

  - `Authorization header is missing` (unknown)

  - `Bearer token is invalid or malformed` (unknown)

  - `Bearer token has expired` (unknown)

## Response 404 examples:

  - ``credit_offer_id` does not exist or does not belong to this partner` (unknown)

## Response 409 examples:

  - `A loan already exists for this credit offer` (unknown)

  - `Another withdrawal is being processed for this customer (concurrent lock)` (unknown)

## Response 422 examples:

  - `Required field is missing (`credit_offer_id`, `simulation_id`, `installment_count`, `installment_amount`, `first_due_date`)` (unknown)

  - `Credit offer has expired (`valid_until` has passed or superseded)` (unknown)

  - `Customer has pending or rejected KYC requirements` (unknown)

  - ``amount` exceeds `approved_amount` or is not a valid monetary value` (unknown)

  - ``installment_count` is outside the allowed range` (unknown)

  - ``installment_count`, `installment_amount`, or `first_due_date` do not match the referenced simulation` (unknown)

