Onboard a borrower
The calls that take a borrower from nothing to eligible: fetch the documents, create the borrower, submit their signature.
Fetch the documents your borrowers must accept, register a borrower, and record their acceptance. Eligibility to request facilities is evaluated asynchronously and reported by webhook.
Scopes borrower:write to create and submit, and borrower:read to read back
Prerequisites: Your tenant is live; the borrower is KYC'd by you and already holds assets in their own account at the qualified custodian
1. Fetch the documents your borrowers must accept
Which contracts apply depends on your tenant, so read them rather than hard-coding a list. Serve each download_url to the borrower, and keep contract_type and contract_version, which you hand back in step 3.
curl -X GET https://api.clc.solutions/v1/documents \
-H "X-CLC-Key-Id: $CLC_KEY_ID" \
-H "X-CLC-Timestamp: $CLC_TIMESTAMP" \
-H "X-CLC-Signature: $CLC_SIGNATURE"{
"items": [
{
"contract_type": "master_loan_agreement",
"contract_version": "2026-05",
"title": "Master Loan Agreement",
"download_url": "https://files.clc.solutions/d/7f3a9c2e1b8d/master-loan-agreement-2026-05.pdf",
"content_type": "application/pdf"
}
]
}2. Create the borrower
kyc_attested is your attestation that you completed customer KYC. It feeds CLC's compliance verification but does not replace it: as lender of record, CLC runs its own independent KYC, KYB and AML checks and makes the final acceptance decision, which comes back on borrower.eligible. Your customer sees only your KYC flow. residency_country is required: eligibility and the terms CLC can offer depend on where the borrower lives. Send residency_state too where lending is regulated at state level, which today means the US.
curl -X POST https://api.clc.solutions/v1/borrowers \
-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 '{
"type": "individual",
"kyc_attested": true,
"residency_country": "US",
"residency_state": "CA"
}'{
"id": "bor_9f2c",
"type": "individual",
"kyc_attested": true,
"residency_country": "US",
"residency_state": "CA",
"eligible": false,
"created_at": "2026-07-21T14:30:00Z",
"updated_at": "2026-07-21T14:30:00Z"
}3. Submit the borrower's signature on the master loan agreement
CLC supplies the master loan agreement to you, and you serve it to the borrower to read and accept. Send the contract_type and contract_version from step 1, so CLC records exactly which version was accepted. One request per signature, and they are never batched. Eligibility is evaluated asynchronously, so listen for borrower.eligible rather than polling.
curl -X POST https://api.clc.solutions/v1/borrowers/bor_9f2c/signatures \
-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 '{
"full_name": "Ada Lovelace",
"email": "[email protected]",
"ip_address": "203.0.113.42",
"signed_at": "2026-07-21T14:36:12Z",
"contract_type": "master_loan_agreement",
"contract_version": "2026-05"
}'# HTTP 202 Accepted (empty body)4. Read the borrower back
Everything CLC holds for them. eligible turns true on the same transition that fires the borrower.eligible webhook, so this is how you confirm state after the fact, not a substitute for listening.
curl -X GET https://api.clc.solutions/v1/borrowers/bor_9f2c \
-H "X-CLC-Key-Id: $CLC_KEY_ID" \
-H "X-CLC-Timestamp: $CLC_TIMESTAMP" \
-H "X-CLC-Signature: $CLC_SIGNATURE"{
"id": "bor_9f2c",
"type": "individual",
"kyc_attested": true,
"residency_country": "US",
"residency_state": "CA",
"eligible": true,
"created_at": "2026-07-21T14:30:00Z",
"updated_at": "2026-07-21T14:36:19Z"
}5. Review the signatures on file
What this borrower has accepted, oldest first, with the acceptance evidence you supplied. recorded_at is when CLC stored the signature, and it differs from signed_at when you submit after the fact.
curl -X GET https://api.clc.solutions/v1/borrowers/bor_9f2c/signatures \
-H "X-CLC-Key-Id: $CLC_KEY_ID" \
-H "X-CLC-Timestamp: $CLC_TIMESTAMP" \
-H "X-CLC-Signature: $CLC_SIGNATURE"{
"items": [
{
"id": "sig_4d1e",
"contract_type": "master_loan_agreement",
"contract_version": "2026-05",
"full_name": "Ada Lovelace",
"email": "[email protected]",
"ip_address": "203.0.113.42",
"signed_at": "2026-07-21T14:36:12Z",
"recorded_at": "2026-07-21T14:36:19Z"
}
]
}Updated about 2 months ago