Request a facility

Ask what a borrower can draw, then request the facility and read the underwriting decision.

Request a facility for an eligible borrower and read the underwriting decision. On approval CLC registers the lien and sets the required-collateral floor, and the borrower can draw against it.

Scopes facility:create to open the facility, facility:read to read it back

Prerequisites: The borrower is ELIGIBLE (see Onboard a borrower) and CLC has a current portfolio for them (see Keep the portfolio in sync)

1. Request the facility

Underwriting runs inline, so the response already carries the decision. CLC owns all credit logic — LTV, rates and limits — and returns a credit_limit.

Opening a facility borrows nothing. It establishes the line, registers the lien and sets the floor; the borrowing happens later, one draw at a time, against that limit. So there is no amount to ask for here — only which borrower and which product.

curl -X POST https://api.clc.solutions/v1/facilities \
  -H "X-CLC-Key-Id: $CLC_KEY_ID" \
  -H "X-CLC-Timestamp: $CLC_TIMESTAMP" \
  -H "X-CLC-Signature: $CLC_SIGNATURE" \
  -H "Idempotency-Key: {uuid}" \
  -d '{
    "borrower_id": "bor_9f2c",
    "product": "PLOC"
  }'
{
  "id": "fac_7a1b",
  "borrower_id": "bor_9f2c",
  "product": "PLOC",
  "state": "APPROVED",
  "credit_limit": {
    "amount": "65000.00",
    "asset": "USD"
  }
}

2. The same decision, on your webhook

CLC also emits facility.decisioned for the decision you already received above, so a consumer that only listens to webhooks stays in sync. It carries nothing the response did not already give you, so there is no need to wait for it before moving on.

← facility.decisioned  (CLC posts this to your webhook URL)
{
  "type": "facility.decisioned",
  "data": {
    "facility_id": "fac_7a1b",
    "decision": "approved",
    "state": "APPROVED",
    "credit_limit": {
      "amount": "50000.00",
      "asset": "USD"
    }
  }
}

3. Read the facility

This is where you find out what the borrower can actually draw. There is no quote before the facility exists: you open the line, underwriting returns a credit_limit, and this endpoint prices the headroom in every asset CLC can lend.

The response to POST above is the facility as it was at creation. It moves: a draw raises outstanding and lowers available_credit, interest accrues against it, and collateral_value_usd, ltv and health change with the market without anyone calling the API. Fetch it whenever you need the current picture rather than caching the creation response.

Store id when you create the facility. There is no endpoint that lists facilities or looks one up by borrower, so that id is how you get back to it.

curl -X GET https://api.clc.solutions/v1/facilities/fac_7a1b \
  -H "X-CLC-Key-Id: $CLC_KEY_ID" \
  -H "X-CLC-Timestamp: $CLC_TIMESTAMP" \
  -H "X-CLC-Signature: $CLC_SIGNATURE"
{
  "id": "fac_7a1b",
  "borrower_id": "bor_9f2c",
  "product": "PLOC",
  "state": "APPROVED",
  "health": "HEALTHY",
  "credit_limit": {
    "amount": "65000.00",
    "asset": "USD"
  },
  "available_credit": {
    "amount": "44956.80",
    "asset": "USD"
  },
  "available_per_asset": [
    {
      "amount": "44956.80",
      "asset": "USD"
    },
    {
      "amount": "0.69",
      "asset": "BTC"
    },
    {
      "amount": "17.29",
      "asset": "ETH"
    }
  ],
  "portfolio_as_of": "2026-07-22T10:12:44Z",
  "outstanding": {
    "principal": {
      "amount": "20000.00",
      "asset": "USD"
    },
    "interest": {
      "amount": "43.20",
      "asset": "USD"
    },
    "fees": {
      "amount": "0.00",
      "asset": "USD"
    }
  },
  "collateral_value_usd": "66927.00",
  "required_floor_usd": "40000.00",
  "ltv": "0.30",
  "lien": {
    "custodian_lien_reference": "lien_3d9e",
    "status": "ACTIVE",
    "registered_at": "2026-07-22T10:14:02Z"
  },
  "activated_at": "2026-07-22T10:14:05Z",
  "resource_version": 7
}

available_credit is credit_limit minus everything outstanding, interest included — which is why it is not simply 65000 - 20000.

available_per_asset is alternatives, not a budget. 44956.80 USD, 0.69 BTC and 17.29 ETH are the same headroom priced three ways: draw the USD and there is nothing left to draw in BTC. Summing them is always wrong. Only assets this borrower may actually take appear, so the list is already filtered by their residency.

Check portfolio_as_of before showing any of it. It is the portfolio these numbers were computed from, so if it is older than you expect, your latest push never reached us and the valuation is behind reality. See Keep the portfolio in sync.

resource_version is the sequence number of the last facility event. Webhooks carry the same number, so a consumer that has already applied version 7 can drop a delivery for 7 or lower instead of reprocessing it, and can tell that it missed something if the next one is 9. See Set up webhooks.


Did this page help you?