> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Define a loan product

> Create a loan product, freeze its terms in an immutable version, attach charges and rates, bind an accounting profile, and activate it for origination.

export const GLedger = ({children}) => <Tooltip headline="Ledger" tip="The core financial book that records all transactions, balances, and operations for an organization — the single source of truth for a business unit's finances." cta="See glossary" href="/en/glossary">
    {children}
  </Tooltip>;

A loan product is the template every loan is originated from. Defining one is a small sequence: create the product, version its terms, describe how it books to the ledger, then activate it. Nothing can be originated until a product version is active and has an accounting profile.

## Before you start

***

* You need a Lender bearer token (a JWT issued by your Access Manager). Every operation is authenticated and tenant-scoped.
* Decide which [jurisdiction](/en/lender/jurisdictions) the product belongs to — the generic baseline or Brazil. Brazilian products carry extra fields covered in the [Brazil regulatory pack](/en/lender/brazil-regulatory-pack).

## Steps

***

<Steps>
  <Step title="Create the product">
    `POST /api/v1/loan-products` registers the named product. This is the catalog entry the versions hang off. (Brazil has an alias, `POST /api/v1/br/loan-products`, that accepts the BR extensions.)
  </Step>

  <Step title="Create a version">
    `POST /api/v1/loan-products/{id}/versions` freezes a set of terms — rate configuration, term, and the schedule shape — as an **immutable version**. Every loan traces back to the version it was originated under; you never edit a version, you publish a new one.
  </Step>

  <Step title="Attach charges">
    `POST /api/v1/loan-products/{id}/charges` applies a charge template (an origination fee, a service charge) that the loans originated from this product inherit.
  </Step>

  <Step title="Bind an accounting profile">
    `POST /api/v1/loan-products/{id}/accounting-profiles` declares how the product books to the <GLedger>ledger</GLedger>: the posting rules (which double-entry legs fire for each event) and the ledger organization and ledger they book into. Without a profile, the product cannot post. See [Accounting and accrual runs](/en/lender/accounting-and-accrual-runs).
  </Step>

  <Step title="Activate the version">
    `POST /api/v1/loan-products/{id}/activate` makes the version originatable. Existing loans keep the version they started on; new applications use the active one.
  </Step>
</Steps>

## Inspecting products

***

| Operation                                       | Purpose                                                       |
| ----------------------------------------------- | ------------------------------------------------------------- |
| `GET /api/v1/loan-products`                     | List loan products.                                           |
| `GET /api/v1/loan-products/{id}`                | Read a single product and its versions.                       |
| `GET /api/v1/loan-products/{id}/floating-rates` | Read the product's floating-rate table, if it references one. |

<Tip>
  A floating-rate product resolves its applicable rate from the table when the schedule needs it, rather than pinning a fixed rate at origination.
</Tip>

## What happens downstream

***

Creating and activating products emits `loan_product.created`, `loan_product_version.created`, `loan_product.activated`, `accounting_profile.configured`, and `loan_charge.applied` on the streaming backbone — see [Lender in the platform](/en/lender/lender-in-the-platform).

## Next steps

***

<Card title="Originate a loan" icon="file-signature" href="/en/lender/originate-a-loan" horizontal>
  Take an active product and originate a loan against it.
</Card>
