Asset Loans

Issue loans secured against a customer's assets. The customer keeps their asset — security is established by registering a credit marking with the relevant authority.

This page describes the flow of converting an unsecured loan to a secured one. The flow has two stages: discover (which assets are eligible as security, and for how much?) and execute (create the loan and trigger contract signing).

Asset offers

POST /v1/asset-offers

The bank wants to know which of the customer's assets are eligible as security and the maximum loan amount against each. Creates an offer record but has no effect on the customer or their assets.

Request body:

  • Name
    identityNumber
    Type
    string
    Description

    Customer identity number (e.g. personal number, national ID). Format varies by country.

  • Name
    country
    Type
    string
    Description

    ISO 3166-1 alpha-2 country code, e.g. "SE", "NO", "FI". Determines which registries and valuation rules apply.

Notes:

  • offerId is stable for its lifetime; use it to reference the offer in a loan.
  • assetId is deterministic — the same vehicle always returns the same ID.
  • Offers expire. After expiry the bank must request a fresh one as valuations may have changed.

Request body

{
  "identityNumber": "196801012345",
  "country": "SE"
}

Response (200)

{
  "offerId": "off_k93mxp12",
  "expiresAt": "2026-04-22T10:23:44Z",
  "assets": [
    {
      "assetId": "asset_vehicle_9f3kd82jpl",
      "assetType": "vehicle",
      "maxLoanAmount": 129000,
      "currency": "SEK",
      "details": {
        "make": "Volvo",
        "model": "XC60",
        "modelYear": 2021
      }
    },
    {
      "assetId": "asset_vehicle_4m2np91xqk",
      "assetType": "vehicle",
      "maxLoanAmount": 45000,
      "currency": "SEK",
      "details": {
        "make": "BMW",
        "model": "320i",
        "modelYear": 2019
      }
    }
  ]
}

GET /v1/asset-offers

List previously issued offers.

Query parameters:

  • Name
    identityNumber
    Type
    string
    Description

    Filter by customer identity number.

Request

GET /v1/asset-offers?identityNumber=196801012345

Response is an array of offers in the same shape as POST /v1/asset-offers.


GET /v1/asset-offers/:offerId

Fetch a previously issued offer, e.g. if the bank wants to re-display it to an advisor later in the same session.

Path parameters:

  • Name
    :offerId
    Type
    string
    Description

    The offerId returned from GET /v1/asset-offers.

Request

GET /v1/asset-offers/off_k93mxp12

Response has the same shape as GET /v1/asset-offers.


Executing a loan

POST /v1/asset-loans

The bank has done their credit assessment, the customer has chosen an asset, and the bank wants to execute a secured loan. This starts the contract signing flow with the customer.

Request body:

  • Name
    offerId
    Type
    string
    Description

    Reference to the asset offer. A soft reference — the bank may pass assetId directly if they already know it.

  • Name
    assetId
    Type
    string
    Description

    The asset to use as security for the loan. The customer retains ownership and possession — a credit marking is registered against it.

  • Name
    loanAmount
    Type
    number
    Description

    Requested loan amount. Must not exceed maxLoanAmount for the asset.

  • Name
    termMonths
    Type
    number
    Description

    Loan term in months.

  • Name
    currency
    Type
    string
    Description

    ISO 4217 currency code, e.g. "SEK".

  • Name
    customer
    Type
    object
    Description

    Customer details for the signing request.

  • Name
    customer.identityNumber
    Type
    string
    Description

    Customer identity number. Format varies by country.

  • Name
    customer.country
    Type
    string
    Description

    ISO 3166-1 alpha-2 country code, e.g. "SE", "NO", "FI". Determines which registry the credit marking is filed with.

  • Name
    customer.email
    Type
    string
    Description

    Customer email address.

  • Name
    customer.phone
    Type
    string
    Description

    Customer phone number in E.164 format.

Notes:

  • After this call the customer receives a signing request and authorises the credit marking on their asset. They keep the asset — the credit marking is the security.

Request body

{
  "offerId": "off_k93mxp12",
  "assetId": "asset_vehicle_9f3kd82jpl",
  "loanAmount": 80000,
  "termMonths": 60,
  "currency": "SEK",
  "customer": {
    "identityNumber": "196801012345",
    "country": "SE",
    "email": "anna.larsson@email.se",
    "phone": "+46701234567"
  }
}

Response (200)

{
  "loanId": "loan_8xk2mp91za",
  "status": "IN_PROGRESS",
  "assetId": "asset_vehicle_9f3kd82jpl",
  "requirements": [
    {
      "type": "CUSTOMER_CONTRACT",
      "status": "PENDING",
      "responsibleParty": "USER",
      "details": {
        "signingUrl": "https://sign.yourservice.se/ctr_x91pla33",
        "expiresAt": "2026-04-18T10:23:44Z"
      }
    },
    {
      "type": "CREDIT_MARKING_REGISTRATION",
      "status": "PENDING",
      "responsibleParty": "SYSTEM",
      "details": {
        "registry": "transportstyrelsen"
      }
    }
  ]
}

Loan status

GET /v1/asset-loans/:loanId

Poll loan and contract status, or fetch for display in the bank's internal system.

Path parameters:

  • Name
    :loanId
    Type
    string
    Description

    The loanId returned from POST /v1/asset-loans.

Loan status values:

StatusMeaning
IN_PROGRESSOne or more requirements are not yet completed.
COMPLETEDAll requirements met; loan is fully active.
CANCELLEDLoan or signing was cancelled.

Requirement type values:

TyperesponsiblePartyDescription
CUSTOMER_CONTRACTUSERCustomer must sign the loan agreement. details includes signingUrl and expiresAt while pending.
CREDIT_MARKING_REGISTRATIONSYSTEMCredit marking must be registered with the relevant authority. details includes registry and, once done, registeredAt and reference.

Requirement status values: PENDING · IN_PROGRESS · COMPLETED · FAILED

Response (200) — completed

{
  "loanId": "loan_8xk2mp91za",
  "status": "COMPLETED",
  "assetId": "asset_vehicle_9f3kd82jpl",
  "requirements": [
    {
      "type": "CUSTOMER_CONTRACT",
      "status": "COMPLETED",
      "responsibleParty": "USER",
      "details": {
        "completedAt": "2026-04-16T08:00:00Z"
      }
    },
    {
      "type": "CREDIT_MARKING_REGISTRATION",
      "status": "COMPLETED",
      "responsibleParty": "SYSTEM",
      "details": {
        "registry": "transportstyrelsen",
        "reference": "TS-2026-88821",
        "registeredAt": "2026-04-16T09:14:00Z"
      }
    }
  ]
}

Response (200) — in progress

{
  "loanId": "loan_8xk2mp91za",
  "status": "IN_PROGRESS",
  "assetId": "asset_vehicle_9f3kd82jpl",
  "requirements": [
    {
      "type": "CUSTOMER_CONTRACT",
      "status": "COMPLETED",
      "responsibleParty": "USER",
      "details": {
        "completedAt": "2026-04-16T08:00:00Z"
      }
    },
    {
      "type": "CREDIT_MARKING_REGISTRATION",
      "status": "PENDING",
      "responsibleParty": "SYSTEM",
      "details": {
        "registry": "transportstyrelsen"
      }
    }
  ]
}

Response (404)

{ "error": "Loan not found" }

Was this page helpful?