Overview
Financing Integration Guide
Slate allows you to surface pre-qualified financing offers directly inside your product. Customers are evaluated automatically, and approved offers are displayed via an embeddable banner.
This guide walks you through the full integration flow — from registering customers to embedding financing offers and monitoring financing agreements.
How It Works
- Create a customer — Register your customer in Slate as either a person or a business
- Automatic evaluation — Slate evaluates customers and generates pre-approval offers
- Create session token — Generate a secure token on your backend for each customer
- Display offers — Embed Slate's script in your frontend to show financing banners
- Customer application — Users click the banner and complete their application on Slate's hosted page
- Financing agreement — Approved applications result in financing agreements, with webhook notifications sent to your system
Integration Steps
Step 1 — Create a Customer
Register each customer in Slate. A customer can be a business (commercial entity) or a person (private individual). Use your own stable identifier as the externalId to easily reference the customer later.
POST https://api.tryslatehq.com/customers
Request:
{
"type": "BUSINESS",
"externalId": "cus_123",
"business": {
"legalName": "Acme Corp",
"dba": "Acme",
"website": "https://acme.com",
"type": "PARTNERSHIP",
"address": {
"address1": "123 Main St",
"address2": null,
"city": "San Francisco",
"postalCode": "94105",
"country": "US",
"state": "AL"
},
"contact": {
"fullName": "John Doe",
"email": "john@acme.com",
"phone": "+15551234567"
}
}
}
Request:
{
"type": "PERSON",
"externalId": "cus_456",
"person": {
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@email.com",
"phone": "+15551234567",
"birthdate": "1990-06-15",
"address": {
"address1": "456 Elm St",
"address2": null,
"city": "Toronto",
"postalCode": "M5H 2N2",
"country": "CA",
"state": "ON"
}
}
}
Step 2 — Attach Financial Data
Provide financial information to enable Slate to evaluate the customer for pre-approval.
POST https://api.tryslatehq.com/attach-financial-data
Request:
{
"externalId": "cus_123",
"timeseries": [
{
"date": "2025-01-01",
"data": {
"propertyName": "anything"
}
}
]
}
Step 3 — Create a User Session Token
Generate a secure session token on your backend for each customer that will view financing offers. This token authenticates the embedded banner.
POST https://api.tryslatehq.com/user-session-token
Request:
{
"externalId": "cus_123"
}
Response:
{
"token": "ust_a1b2c3d4e5f6g7h8i9j0"
}
⚠️ Important
Generate this token server-side to protect your API key. Never expose your API key in frontend code.
Step 4 — Embed the Financing Banner
Add Slate's script to your frontend and pass the session token. The banner will automatically appear if the customer has an active pre-approval.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Your Application</title>
<script
async="true"
type="module"
src="https://components.tryslatehq.com/slate.esm.js"
></script>
</head>
<body>
<slate-pre-approval-banner-v2
env="sandbox"
user-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
></slate-pre-approval-banner-v2>
</body>
</html>
Behavior:
- If the customer has an ACTIVE pre-approval, the banner displays the offer details
- If no pre-approval exists, nothing is rendered
- Clicking the banner opens Slate's application flow in a modal
Step 5 — Access Financing Agreements
Once an application is approved, retrieve the financing agreement details:
GET https://api.tryslatehq.com/v2/financing-agreements?externalId=cus_123
Response:
{
"data": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"customerId": "123e4567-e89b-12d3-a456-426614174000",
"type": "fixed_mca",
"fixedMCA": {
"factorRate": 1.2
},
"fundedAmount": 10000,
"fundedDate": "2025-01-01",
"currency": "CAD",
"firstPaymentDate": "2025-02-01",
"estimatedLastPaymentDate": "2026-01-01",
"status": "IN_PROGRESS",
"term": 12,
"termUnit": "month",
"repaymentFrequency": 1,
"repaymentFrequencyUnit": "month",
"remainingBalance": 12000,
"totalPaid": 0,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
],
"page": 1,
"limit": 1,
"total": 1,
"totalPages": 1
}
Step 6 — Embed the Capital Widget (Optional)
If you want to show financing agreement progress and give visual feedback to your customers — such as repayment status, remaining balance, and payment history — embed the slate-capital component using the same script and session token.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title></title>
<script
async="true"
type="module"
src="https://components.tryslatehq.com/slate.esm.js"
></script>
</head>
<body>
<slate-capital
env="sandbox"
user-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
></slate-capital>
</body>
</html>
Behavior:
- Displays active financing agreements with repayment progress, funded amount, remaining balance, and next payment date
- Also includes the pre-approval banner — customers with an active offer will see it alongside their agreements
- If the customer has no offers or agreements, an empty state is shown prompting them to check back later
Webhook notifications
Slate will notify you of important events via webhooks. You will be able to configure your endpoints and the subscribed events in the dashboard.
Common events:
- Customer created
- Application created
- Application submitted
- Financing agreement created
- Financing agreement payment received
Testing
For testing your integration sign up to the sandbox.
- In the sandbox environment pre-approvals are created automatically when you upload financial data for a customer.
- The sandbox is a completely isolated environment so webhooks, branding and any other configurations are not automatically applied to live environment.
- Base URL's for API and scripts are different between live and sandbox.
Best practices
Keep customer data current — Update customer information and financial data regularly to ensure accurate pre-approvals.
Handle missing offers gracefully — The banner won't render if there's no active pre-approval. Design your UI to work with or without the financing offer.
Test thoroughly — Verify the integration in your staging environment before going live.