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

# Create lending product version

> Store an immutable version of a lending product, including eligibility, pricing and repayment terms. This is your lending catalog, not merchant inventory.

Store an immutable version of a lending product, including eligibility, pricing and repayment terms. This is your lending catalog, not merchant inventory. All IDs and cursors must belong to the authorized workspace and environment. Required scope: configuration:write.

Examples use synthetic IDs. Replace them with values returned by your environment.


## OpenAPI

````yaml openapi/amlok.json POST /v1/lending-product-versions
openapi: 3.1.0
info:
  title: AMLOK API
  version: 1.0.0
  description: >-
    AMLOK API: borrower connections, Insights origination, immutable risk
    packages and Signal monitoring. Use your institution-issued API origin.
servers: []
security:
  - BearerAuth: []
paths:
  /v1/lending-product-versions:
    post:
      tags:
        - Configuration
      summary: Create lending product version
      description: >-
        Store an immutable version of a lending product, including eligibility,
        pricing and repayment terms. This is your lending catalog, not merchant
        inventory. All IDs and cursors must belong to the authorized workspace
        and environment. Required scope: configuration:write.
      operationId: createLendingProductVersion
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            minLength: 1
          description: >-
            Stable for one intended command and its retries, scoped to key
            workspace/environment and operation. Mismatched body returns 409.
            Full response replay 24 hours; durable receipt remains.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LendingProductInput'
            example:
              external_id: working-capital
              version: '1'
              name: Working capital loan
              borrower_type: business
              market: CA
              currency: CAD
              product_type: term_loan
              minimum_amount:
                amount: '10000.00'
                currency: CAD
              maximum_amount:
                amount: '100000.00'
                currency: CAD
              minimum_term_months: 6
              maximum_term_months: 24
              repayment_frequency: monthly
              pricing_schema_id: pricing_synthetic
              pricing:
                rate_type: fixed
                annual_interest_rate: '0.12'
                amortization_months: 12
                fees: []
              terms_document_ids: []
      responses:
        '201':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/LendingProductVersion'
                  meta:
                    $ref: '#/components/schemas/Meta'
                required:
                  - data
                  - meta
                additionalProperties: false
              example:
                data:
                  id: lpv_synthetic
                  created_at: '2026-11-06T12:00:00Z'
                  definition:
                    external_id: working-capital
                    version: '1'
                    name: Working capital loan
                    borrower_type: business
                    market: CA
                    currency: CAD
                    product_type: term_loan
                    minimum_amount:
                      amount: '10000.00'
                      currency: CAD
                    maximum_amount:
                      amount: '100000.00'
                      currency: CAD
                    minimum_term_months: 6
                    maximum_term_months: 24
                    repayment_frequency: monthly
                    pricing_schema_id: pricing_synthetic
                    pricing:
                      rate_type: fixed
                      annual_interest_rate: '0.12'
                      amortization_months: 12
                      fees: []
                    terms_document_ids: []
                  sha256: >-
                    0000000000000000000000000000000000000000000000000000000000000000
                meta:
                  request_id: req_synthetic
                  schema_version: 1.0.0
                  environment: sandbox
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '400':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: validation_error
                  message: Validation error.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '401':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: unauthenticated
                  message: Unauthenticated.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '402':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: insufficient_credits
                  message: Insufficient credits.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '403':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: forbidden
                  message: Forbidden.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '404':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: not_found
                  message: Not found.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '409':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: idempotency_conflict
                  message: Idempotency conflict.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '410':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: cursor_expired
                  message: Cursor expired.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '413':
          description: >-
            Request exceeds the effective profile size limit or media type is
            unsupported. No command is accepted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: payload_too_large
                  message: payload too large
                  retryable: false
                  request_id: req_synthetic
                  field: null
        '415':
          description: >-
            Request exceeds the effective profile size limit or media type is
            unsupported. No command is accepted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: unsupported_media_type
                  message: unsupported media type
                  retryable: false
                  request_id: req_synthetic
                  field: null
        '422':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: validation_error
                  message: Validation error.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '429':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: rate_limited
                  message: Rate limited.
                  retryable: true
                  request_id: req_synthetic
                  field: null
          headers:
            Retry-After:
              description: Minimum delay in seconds before retry.
              schema:
                type: integer
                minimum: 0
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '503':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: temporarily_unavailable
                  message: Temporarily unavailable.
                  retryable: true
                  request_id: req_synthetic
                  field: null
          headers:
            Retry-After:
              description: Minimum delay in seconds before retry.
              schema:
                type: integer
                minimum: 0
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |-
            curl --request POST --fail-with-body --max-time 30 \
              "${AMLOK_API_BASE_URL}/v1/lending-product-versions" \
              --header "Authorization: Bearer ${AMLOK_API_KEY}" \
              --header 'Accept: application/json' \
              --header 'Idempotency-Key: createLendingProductVersion-synthetic-0042' \
              --header 'Content-Type: application/json' \
              --data '{"external_id":"working-capital","version":"1","name":"Working capital loan","borrower_type":"business","market":"CA","currency":"CAD","product_type":"term_loan","minimum_amount":{"amount":"10000.00","currency":"CAD"},"maximum_amount":{"amount":"100000.00","currency":"CAD"},"minimum_term_months":6,"maximum_term_months":24,"repayment_frequency":"monthly","pricing_schema_id":"pricing_synthetic","pricing":{"rate_type":"fixed","annual_interest_rate":"0.12","amortization_months":12,"fees":[]},"terms_document_ids":[]}'
        - lang: Python
          source: >
            import os

            import requests


            headers = {'Accept': 'application/json', 'Idempotency-Key':
            'createLendingProductVersion-synthetic-0042', 'Content-Type':
            'application/json'}

            headers["Authorization"] = "Bearer " + os.environ["AMLOK_API_KEY"]

            response = requests.request('POST', os.environ["AMLOK_API_BASE_URL"]
            + '/v1/lending-product-versions', headers=headers,
            json={'external_id': 'working-capital', 'version': '1', 'name':
            'Working capital loan', 'borrower_type': 'business', 'market': 'CA',
            'currency': 'CAD', 'product_type': 'term_loan', 'minimum_amount':
            {'amount': '10000.00', 'currency': 'CAD'}, 'maximum_amount':
            {'amount': '100000.00', 'currency': 'CAD'}, 'minimum_term_months':
            6, 'maximum_term_months': 24, 'repayment_frequency': 'monthly',
            'pricing_schema_id': 'pricing_synthetic', 'pricing': {'rate_type':
            'fixed', 'annual_interest_rate': '0.12', 'amortization_months': 12,
            'fees': []}, 'terms_document_ids': []}, timeout=30,
            allow_redirects=False)

            response.raise_for_status()

            print(response.json())
        - lang: JavaScript
          source: >
            const headers = {"Accept": "application/json", "Idempotency-Key":
            "createLendingProductVersion-synthetic-0042", "Content-Type":
            "application/json"};

            headers.Authorization = `Bearer ${process.env.AMLOK_API_KEY}`;

            const response = await fetch(process.env.AMLOK_API_BASE_URL +
            "/v1/lending-product-versions", {
              method: "POST", headers, redirect: "error", signal: AbortSignal.timeout(30000),
              body: JSON.stringify({"external_id": "working-capital", "version": "1", "name": "Working capital loan", "borrower_type": "business", "market": "CA", "currency": "CAD", "product_type": "term_loan", "minimum_amount": {"amount": "10000.00", "currency": "CAD"}, "maximum_amount": {"amount": "100000.00", "currency": "CAD"}, "minimum_term_months": 6, "maximum_term_months": 24, "repayment_frequency": "monthly", "pricing_schema_id": "pricing_synthetic", "pricing": {"rate_type": "fixed", "annual_interest_rate": "0.12", "amortization_months": 12, "fees": []}, "terms_document_ids": []})
            });

            if (!response.ok) throw new Error(`HTTP ${response.status}: ${await
            response.text()}`);

            console.log(await response.json());
components:
  schemas:
    LendingProductInput:
      type: object
      properties:
        external_id:
          type: string
          minLength: 1
          description: >-
            External id for LendingProductInput. Constraints, requiredness and
            allowed values are defined by this schema.
        version:
          type: string
          minLength: 1
          description: >-
            Version for LendingProductInput. Constraints, requiredness and
            allowed values are defined by this schema.
        name:
          type: string
          minLength: 1
          description: >-
            Name for LendingProductInput. Constraints, requiredness and allowed
            values are defined by this schema.
        borrower_type:
          type: string
          enum:
            - business
            - person
          description: >-
            Borrower type for LendingProductInput. Constraints, requiredness and
            allowed values are defined by this schema.
        market:
          type: string
          enum:
            - US
            - CA
          description: >-
            Market for LendingProductInput. Constraints, requiredness and
            allowed values are defined by this schema.
        currency:
          type: string
          minLength: 1
          pattern: ^[A-Z]{3}$
          description: >-
            Currency for LendingProductInput. Constraints, requiredness and
            allowed values are defined by this schema.
        product_type:
          type: string
          enum:
            - term_loan
            - line_of_credit
            - receivables_financing
            - revenue_based_financing
            - other
          description: >-
            Product type for LendingProductInput. Constraints, requiredness and
            allowed values are defined by this schema.
        minimum_amount:
          $ref: '#/components/schemas/Money'
          description: >-
            Minimum amount for LendingProductInput. Constraints, requiredness
            and allowed values are defined by this schema.
        maximum_amount:
          $ref: '#/components/schemas/Money'
          description: >-
            Maximum amount for LendingProductInput. Constraints, requiredness
            and allowed values are defined by this schema.
        minimum_term_months:
          type: integer
          minimum: 1
          description: >-
            Minimum term months for LendingProductInput. Constraints,
            requiredness and allowed values are defined by this schema.
        maximum_term_months:
          type: integer
          minimum: 1
          description: >-
            Maximum term months for LendingProductInput. Constraints,
            requiredness and allowed values are defined by this schema.
        repayment_frequency:
          type: string
          enum:
            - daily
            - weekly
            - biweekly
            - monthly
            - at_maturity
            - variable
          description: >-
            Repayment frequency for LendingProductInput. Constraints,
            requiredness and allowed values are defined by this schema.
        pricing_schema_id:
          type: string
          minLength: 1
          description: >-
            Opaque identifier, authorized within the API key workspace and
            environment.
        pricing:
          type: object
          description: >-
            Rate, fees, amortization and other product-specific economics,
            validated against the approved pricing_schema_id. All inputs needed
            for repayment analysis must be captured, not inferred.
        terms_document_ids:
          type: array
          items:
            type: string
            minLength: 1
            description: >-
              Opaque identifier, authorized within the API key workspace and
              environment.
          uniqueItems: true
          description: >-
            Terms document ids for LendingProductInput. Constraints,
            requiredness and allowed values are defined by this schema.
      required:
        - external_id
        - version
        - name
        - borrower_type
        - market
        - currency
        - product_type
        - minimum_amount
        - maximum_amount
        - minimum_term_months
        - maximum_term_months
        - repayment_frequency
        - pricing_schema_id
        - pricing
        - terms_document_ids
      additionalProperties: false
      description: >-
        An immutable catalog version, not a merchant inventory product. Validate
        amount currencies, ordered bounds and approved terms before accepting.
        No modification or deletion of an accepted version.
    LendingProductVersion:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          description: >-
            Opaque identifier, authorized within the API key workspace and
            environment.
        created_at:
          type: string
          minLength: 1
          format: date-time
          description: UTC time the record was created.
        definition:
          $ref: '#/components/schemas/LendingProductInput'
          description: >-
            Definition for LendingProductVersion. Constraints, requiredness and
            allowed values are defined by this schema.
        sha256:
          type: string
          minLength: 1
          pattern: ^[a-f0-9]{64}$
          description: >-
            Sha256 for LendingProductVersion. Constraints, requiredness and
            allowed values are defined by this schema.
      required:
        - id
        - created_at
        - definition
        - sha256
      additionalProperties: false
    Meta:
      type: object
      properties:
        request_id:
          type: string
          minLength: 1
          description: >-
            Opaque identifier, authorized within the API key workspace and
            environment.
        schema_version:
          type: string
          minLength: 1
          description: >-
            Schema version for Meta. Constraints, requiredness and allowed
            values are defined by this schema.
        environment:
          type: string
          enum:
            - sandbox
            - live
          description: >-
            Environment for Meta. Constraints, requiredness and allowed values
            are defined by this schema.
      required:
        - request_id
        - schema_version
        - environment
      additionalProperties: false
    Error:
      type: object
      properties:
        code:
          type: string
          enum:
            - validation_error
            - unauthenticated
            - forbidden
            - not_found
            - invalid_state
            - idempotency_conflict
            - insufficient_credits
            - precondition_failed
            - cursor_expired
            - rate_limited
            - temporarily_unavailable
            - deal_snapshot_conflict
            - payload_too_large
            - unsupported_media_type
            - document_rejected
            - processing_failed
            - session_expired
            - consent_purpose_missing
            - sandbox_only
            - scenario_not_available
            - idempotency_result_expired
          description: >-
            Code for Error. Constraints, requiredness and allowed values are
            defined by this schema.
        message:
          type: string
          minLength: 1
          description: >-
            Message for Error. Constraints, requiredness and allowed values are
            defined by this schema.
        retryable:
          type: boolean
          description: >-
            Retryable for Error. Constraints, requiredness and allowed values
            are defined by this schema.
        request_id:
          type: string
          minLength: 1
          description: >-
            Opaque identifier, authorized within the API key workspace and
            environment.
        field:
          anyOf:
            - type: string
              minLength: 1
            - type: 'null'
          description: >-
            Field for Error. Constraints, requiredness and allowed values are
            defined by this schema.
      required:
        - code
        - message
        - retryable
        - request_id
        - field
      additionalProperties: false
    Money:
      type: object
      properties:
        amount:
          type: string
          minLength: 1
          pattern: ^(?:0|[1-9][0-9]*)\.[0-9]{2}$
          description: >-
            Amount for Money. Constraints, requiredness and allowed values are
            defined by this schema.
        currency:
          type: string
          minLength: 1
          pattern: ^[A-Z]{3}$
          description: >-
            Currency for Money. Constraints, requiredness and allowed values are
            defined by this schema.
      required:
        - amount
        - currency
      additionalProperties: false
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        Server-to-server API key bound to exactly one workspace, institution
        tenant and environment. No caller-supplied workspace override is
        accepted. Do not use in public browser code.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.