Webhook Guide
This guide explains how to configure and use webhooks to receive real-time updates on application statuses from Carousel.
Creating a Workflow with Data Export
Carousel lets you collect and verify applicant data using a configurable, step-based workflows. You can customize, configure and white label each workflow, directly from the Portal, no code needed.
How to Set It Up
- Log in to the Carousel Portal
- Navigate to: Dashboard → Workflows → Create New Workflow
- Use the drag-and-drop builder to build your flow
- Add a Data Export step at the end
Configuring the Data Export Step
The Data Export step automatically sends collected applicant data to your system using a secure POST request.
Setup Instructions
- Set Export Destination to
Webhook - Enter your POST URL (the endpoint on your system)
- Click Confirm to save
Once the applicant reaches this step, Carousel will send the workflow data as structured JSON.
Webhook Events
Carousel will automatically send webhook events to your configured POST URL as the applicant progresses through the workflow.
There are three main events:
1. Application Created
Triggered when an applicant first creates an application (logs in with phone number).
Sample Payload
{
"loanApplicationId": "28b25f25-43b7-4871-ab47-239faaefbe10",
"phoneNumber": "+1 (605) 555-5555",
"apiUrl": "https://yourwebhook.com",
"createdAt": "2025-08-14T20:52:22.589Z",
"externalCustomerId":"your_customer_id",
"system": {
"step": "Loan Product",
"status": "Initializing",
"updatedAt": "2025-08-14T20:52:21.233Z"
},
"application": {
"status": "In Progress",
"updatedAt": "2025-08-14T20:52:21.233Z"
},
"updatedAt": "2025-08-14T20:52:22.589Z"
}2. Application Finished All Steps
Triggered when the applicant finishes all required steps.
{
"loanApplicationId": "20ca981e-b94d-426a-a74a-9e17f315c7fc",
"phoneNumber": "+1 (605) 555-5555",
"apiUrl": "https://yourwebhook.com",
"createdAt": "2025-08-14T20:52:22.589Z",
"externalCustomerId":"your_customer_id",
"system": {
"step": "Loan Product",
"status": "Initializing",
"updatedAt": "2025-08-14T20:52:21.233Z"
},
"application": {
"status": "Completed",
"updatedAt": "2025-08-14T20:52:21.233Z"
},
"dataStep": [
{
"step": "Loan Product",
"data": {
"id": "4361048b-5a52-46e6-ade6-a923ce39bb71",
"calculatorConfig": {
"upfrontFee": 0,
"originationFee": 0,
"brokerageFeePercent": 0
},
"calculatorType": 0,
"annualInterest": 5,
"minimumLoanAmount": 500,
"name": "cll",
"amount": 500,
"assignments": [],
"applicationDate": "2025-02-17T16:08:00.304Z",
"approvalDate": "2025-02-17T16:10:09.001Z",
"businessId": "e35cba52-a7f3-53c1-a47c-e539aa26d681",
"externalCustomerId": null,
"detailsOnUseOfFunds": null,
"purposes": ["Inventory"],
"urgencyOfFunds": null
}
},
{
"step": "Identity",
"data": {
"gender": "Male",
"dateOfIssue": "2024-10-10T00:00:00.000Z",
"fullName": "JOHN DOE",
"country": "CAN",
"dateOfBirth": "1998-03-08T00:00:00.000Z",
"dateOfExpiration": "2027-06-30T00:00:00.000Z",
"documentNumber": "H0653-00009-80308",
"province": "ON",
"frontImageUrl": "https://staging.api.oncarousel.com/uploads/kyc/330b8683-1428-4f94-a558-3c9c2db0dec4.jpeg?Expires=1767726190&Key-Pair-Id=K1G5A68240S8O&Signature=HWka0sGDCY96n0DsQaw37PEqghDXR4TkR0sESFEPL5Uw9iF3UTunI2KVLsVOgjg0PkSpr3dYLoBx9O4rBiJUE9XIqhpJk1b4CcPuETT1SMMyF89M82F1TPlx7gyBlBtF3N5eilvK1EnWJc8CPL4Q~-Z64CLOU6HMmFEg1KpZ2yauGH3OWwMXVXWFjOk2JLzZv1JRYFGqYVTWtxOswgZhFf8tiZPLHfHElHAI1E6huPQ9s5JCFO3LeOU2MjWkjz3Mr2yL7RtLKjjOrlW5HAEvXJ-BgOR7HBSL9XntY7VWxCBSxJZ3A~mex3t4tif7aZY079dWpOVmxYwTPZ9OgBmVDw__"
}
},
{
"step": "Bank Account",
"data": {
"loginId": "6433cf6a-0879-4ef0-5a2a-08d91642f9c6",
"bankAccount": [] // This step is still processing so no bank accounts were saved
}
},
{
"step": "Custom Questionnaire",
"data": {
"questions": [
{
"id": "5bbb1eb4-57c3-4c0c-aa08-b1a4a29eab85",
"name": "What is the full legal name of your company ?",
"answer": "Spheregbs"
},
{
"id": "5f3edc6e-6247-47f1-8a15-be6c271b8788",
"name": "Would you like for the lease to be under your company or personal ?",
"answer": "Company"
},
{
"id": "2de688e5-3ae1-46bb-b587-669f2168652d",
"name": "Address from where vehicle will operate?",
"answer": ""
}
]
}
}
],
"updatedAt": "2025-07-22T15:55:23.986Z"
}
3. Application Completed Processing All Data
Triggered when the applicant finishes the entire workflow and the data finishes processing. This includes all collected data.
Sample Payload
{
"loanApplicationId": "dc8ef61b-35a2-4634-88d8-38e637abb2c4",
"phoneNumber": "+1 (500) 555-0006",
"apiUrl": "https://webhook.site/e9cb118c-fcf8-4314-99d0-2ca03d18a8bb",
"createdAt": "2026-04-10T16:30:32.649Z",
"externalCustomerId": "",
"system": {
"status": [
{
"step": "Loan Request",
"statuses": [
"Approved"
]
},
{
"step": "Applicant Payment",
"statuses": [
"Approved"
]
},
{
"step": "Financial Verification",
"statuses": [
"Approved"
]
},
{
"step": "Fund Recovery",
"statuses": [
"Under Review",
"Timed out"
]
},
{
"step": "E-Signature",
"statuses": [
"Approved"
]
},
{
"step": "CRM Integration",
"statuses": [
"Completed"
]
},
{
"step": "Credit Check",
"statuses": [
"Approved"
]
},
{
"step": "Identity Verification",
"statuses": [
"Approved"
]
},
{
"step": "Send Funds",
"statuses": [
"Approved"
]
},
{
"step": "Custom Questionnaire",
"statuses": [
"Approved"
]
},
{
"step": "Self Declaration",
"statuses": [
"Approved"
]
},
{
"step": "Background Check",
"statuses": [
"Approved"
]
},
{
"step": "Court & Eviction Checks",
"statuses": [
"Approved"
]
}
],
"updatedAt": "2026-04-10T16:30:32.013Z"
},
"application": {
"status": "In Progress",
"updatedAt": "2026-04-10T16:30:32.013Z"
},
"dataStep": [
{
"step": "Loan Request",
"data": {
"id": "35827328-61cc-47c4-b5c9-809c6630784a",
"annualInterest": 100,
"calculatorConfig": {
"upfrontFee": 0,
"originationFee": 0,
"brokerageFeePercent": 0
},
"calculatorType": "Installment",
"minimumLoanAmount": 100,
"applicationDate": "2026-04-10T15:44:27.955Z",
"approvalDate": "",
"businessId": "9956134d-c746-57e6-8a7e-0be300dfe5c7",
"detailsOnUseOfFunds": "",
"externalCustomerId": "",
"purposes": [],
"urgencyOfFunds": "",
"name": "Full",
"amount": "200.00",
"assignments": [
{
"fullName": "",
"email": "",
"phoneNumber": "",
"id": ""
}
]
}
},
{
"step": "Identity Verification",
"data": {
"gender": "Male",
"dateOfIssue": "2012-11-30T00:00:00.000Z",
"fullName": "TEST CARD SAMPLE",
"country": "CAN",
"dateOfBirth": "1982-01-04T00:00:00.000Z",
"dateOfExpiration": "2017-11-30T00:00:00.000Z",
"documentNumber": "2222222",
"documentType": 3,
"province": "BC",
"frontImageUrl": "https://staging.api.oncarousel.com/uploads/kyc/8ac994fb-667f-49a3-8987-53456a6205aa.jpg?Expires=1775839532&Key-Pair-Id=K1G5A68240S8O&Signature=NyX8OQ~xHjGnSWvB5wpj6kb5a52c1WQ7gQ2tvpvpWjF5SpkbJDZ0AISkU1BYVRb2gd4zzbF3svgVs26JuEzdLCr0vl3MMKplxShdDthyakikV27kfSoFDYEJrlXzQjl7GIZv1vZOrbcyik80fveyjVTKespEFuBr4b3hrDAlKCJwdHTFEwf7B1~4drilt8VUGTXAGsKonsZSOlZOPHxJ0isjMZkjuAVxBwB0SSH3OJ58YEmcBX8Pj4b~ycKlYcdt8HKlizeW2C0P1gbt-NWMCsiejHrYN9m8JvAr-v2MgZOAXexo0EmnCOy5KblIWwfocqMFHVd~ilvM~uMLQQWLbA__",
"address": "910 GOVERNMENT ST, VICTORIA BC V8W 3Y8"
}
},
{
"step": "Financial Verification",
"data": {
"loginId": "f4847c89-9d93-4e1f-1544-08ddf53a0c5c",
"bankAccount": [
{
"accountTitle": "Chequing CAD",
"accountNumber": "1111000",
"institutionNumber": "777",
"institutionName": "FlinksCapital",
"transitNumber": "77777",
"category": "Operations",
"type": "Chequing",
"currency": "CAD",
"balanceAvailable": 50300,
"balanceCurrent": 50000,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "John Doe",
"email": "[email protected]",
"phoneNumber": "(514) 333-7777",
"address": {
"address": "1275 avenue des Canadiens-de-Montréal",
"city": "Montréal",
"province": "QC",
"zipCode": "H3B 5E8",
"country": "CA"
}
}
},
{
"accountTitle": "First Home Savings Account",
"accountNumber": "FHSA1234567",
"institutionNumber": "",
"institutionName": "FlinksCapital",
"transitNumber": "",
"category": "Products",
"type": "FHSA",
"currency": "CAD",
"balanceAvailable": 0,
"balanceCurrent": 200000,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "John Doe",
"email": "[email protected]",
"phoneNumber": "(514) 333-7777",
"address": {
"address": "1275 avenue des Canadiens-de-Montréal",
"city": "Montréal",
"province": "QC",
"zipCode": "H3B 5E8",
"country": "CA"
}
}
},
{
"accountTitle": "Plaid Saving",
"accountNumber": "1111",
"institutionNumber": "",
"institutionName": "RBC Royal Bank",
"transitNumber": "",
"category": "other",
"type": "depository",
"currency": "CAD",
"balanceAvailable": 200,
"balanceCurrent": 210,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "Alberta Bobbeth Charleson",
"email": "[email protected]",
"phoneNumber": "1112223333",
"address": {
"address": "478 Plaid Street",
"city": "Gingham",
"province": "AB",
"zipCode": "T0B 0Z0",
"country": "CA"
}
}
},
{
"accountTitle": "Credit card",
"accountNumber": "420024******4242",
"institutionNumber": "",
"institutionName": "FlinksCapital",
"transitNumber": "",
"category": "Credits",
"type": "CreditCard",
"currency": "CAD",
"balanceAvailable": 20000,
"balanceCurrent": 10000,
"balanceLimit": 30000,
"overdraftLimit": 0,
"holder": {
"fullname": "John Doe",
"email": "[email protected]",
"phoneNumber": "(514) 333-7777",
"address": {
"address": "1275 avenue des Canadiens-de-Montréal",
"city": "Montréal",
"province": "QC",
"zipCode": "H3B 5E8",
"country": "CA"
}
}
},
{
"accountTitle": "Line of Credit",
"accountNumber": "LC010101",
"institutionNumber": "",
"institutionName": "FlinksCapital",
"transitNumber": "",
"category": "Credits",
"type": "LineOfCredit",
"currency": "CAD",
"balanceAvailable": 6000,
"balanceCurrent": 3000,
"balanceLimit": 9000,
"overdraftLimit": 0,
"holder": {
"fullname": "John Doe",
"email": "[email protected]",
"phoneNumber": "(514) 333-7777",
"address": {
"address": "1275 avenue des Canadiens-de-Montréal",
"city": "Montréal",
"province": "QC",
"zipCode": "H3B 5E8",
"country": "CA"
}
}
},
{
"accountTitle": "Investments",
"accountNumber": "INV00001",
"institutionNumber": "",
"institutionName": "FlinksCapital",
"transitNumber": "",
"category": "Products",
"type": "RRSP",
"currency": "CAD",
"balanceAvailable": 0,
"balanceCurrent": 100000,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "John Doe",
"email": "[email protected]",
"phoneNumber": "(514) 333-7777",
"address": {
"address": "1275 avenue des Canadiens-de-Montréal",
"city": "Montréal",
"province": "QC",
"zipCode": "H3B 5E8",
"country": "CA"
}
}
},
{
"accountTitle": "Plaid Cash Management",
"accountNumber": "9002",
"institutionNumber": "",
"institutionName": "RBC Royal Bank",
"transitNumber": "",
"category": "other",
"type": "depository",
"currency": "CAD",
"balanceAvailable": 12060,
"balanceCurrent": 12060,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "Alberta Bobbeth Charleson",
"email": "[email protected]",
"phoneNumber": "1112223333",
"address": {
"address": "478 Plaid Street",
"city": "Gingham",
"province": "AB",
"zipCode": "T0B 0Z0",
"country": "CA"
}
}
},
{
"accountTitle": "Chequing US",
"accountNumber": "1111001",
"institutionNumber": "777",
"institutionName": "FlinksCapital",
"transitNumber": "77777",
"category": "Operations",
"type": "Chequing",
"currency": "USD",
"balanceAvailable": 25300,
"balanceCurrent": 25000,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "John Doe",
"email": "[email protected]",
"phoneNumber": "(514) 333-7777",
"address": {
"address": "1275 avenue des Canadiens-de-Montréal",
"city": "Montréal",
"province": "QC",
"zipCode": "H3B 5E8",
"country": "CA"
}
}
},
{
"accountTitle": "Plaid Checking",
"accountNumber": "0000",
"institutionNumber": "",
"institutionName": "RBC Royal Bank",
"transitNumber": "",
"category": "checking",
"type": "depository",
"currency": "CAD",
"balanceAvailable": 100,
"balanceCurrent": 110,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "Alberta Bobbeth Charleson",
"email": "[email protected]",
"phoneNumber": "1112223333",
"address": {
"address": "478 Plaid Street",
"city": "Gingham",
"province": "AB",
"zipCode": "T0B 0Z0",
"country": "CA"
}
}
},
{
"accountTitle": "Another Business Account",
"accountNumber": "BA777",
"institutionNumber": "777",
"institutionName": "FlinksCapital",
"transitNumber": "77777",
"category": "Credits",
"type": "Chequing",
"currency": "CAD",
"balanceAvailable": 84,
"balanceCurrent": 42,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "Mo'e Money Inc.",
"email": "[email protected]",
"phoneNumber": "514-123-4567",
"address": {
"address": "1000 de la Gaucheti\ufffdre",
"city": "Montreal",
"province": "QC",
"zipCode": "A1A 1A1",
"country": "CA"
}
}
},
{
"accountTitle": "Personal loan",
"accountNumber": "LO020202",
"institutionNumber": "",
"institutionName": "FlinksCapital",
"transitNumber": "",
"category": "Credits",
"type": "LoanPersonal",
"currency": "CAD",
"balanceAvailable": 0,
"balanceCurrent": 200000,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "John Doe",
"email": "[email protected]",
"phoneNumber": "(514) 333-7777",
"address": {
"address": "1275 avenue des Canadiens-de-Montréal",
"city": "Montréal",
"province": "QC",
"zipCode": "H3B 5E8",
"country": "CA"
}
}
},
{
"accountTitle": "Business Account",
"accountNumber": "BA-12345",
"institutionNumber": "777",
"institutionName": "FlinksCapital",
"transitNumber": "77777",
"category": "Operations",
"type": "Unknown",
"currency": "CAD",
"balanceAvailable": 0,
"balanceCurrent": 1000000,
"balanceLimit": 0,
"overdraftLimit": 0,
"holder": {
"fullname": "Very Successful Inc.",
"email": "[email protected]",
"phoneNumber": "514-777-7777",
"address": {
"address": "123 Moon Dr.",
"city": "Golden City",
"province": "QC",
"zipCode": "H0H 0H0",
"country": "CA"
}
}
}
]
}
},
{
"step": "Custom Questionnaire",
"data": {
"questions": [
{
"id": "f913043a-c667-41c2-8dcc-b7ffe8bbb301",
"name": "What is your phone number - Email?",
"answer": "123"
}
]
}
},
{
"step": "E-Signature",
"data": {
"documentId": "44MMZgzKoH7nMeRMLjR7mL",
"document": "https://staging.api.oncarousel.com/uploads/legal-contract/82c2e17f-5c30-43be-a595-d41b89433a6a?Expires=1775839533&Key-Pair-Id=K1G5A68240S8O&Signature=FfTnsORbGhleGS96Zxy6cnnCttRjtm0cbJBTIOdHPn2yfezNCwN8TBrJkmBdaTDahDXXdwpBtzWGyPkAhjrQtjvHMDhQghmO92C6-kk710fTD~hKEHO9rqw7-1suzW~63J0tIQ6TFSFtO-~k-vY6qMQckeT3S0AYDeglCOzxCoxq-UAckhcLWAbt3gjcPNSw3tIXSUnom5EBlRNoyCTJF18~vkSUBqsP-IMgI2gfziRgqUsjSJ1y0B1tLpHzIVETjzD9pXjz-zjo2fWTSvZboz~HyHTPwsV4my2d7It-ZCqFSdkAWs07yr-FR3SUaAxCVA2JDkfcOP0NOJ73vaSbQA__"
}
},
{
"step": "Credit Check",
"data": "https://staging.api.oncarousel.com/uploads/credit-check/dc8ef61b-35a2-4634-88d8-38e637abb2c4/975ZZ70232?Expires=1775839533&Key-Pair-Id=K1G5A68240S8O&Signature=Y-tEflENSye7HdCJ2q3FWRyweAF7gqgRTK~73ZEe9MPv3FBvA26lfnIR7W6o8tuzX4MsNRtitZGwfMxs9tjtIS8S85RzPyAF~HaxB0SA0rkxRXzDGwfUTdpFgC8yEDnK4l1oVlXHCazq2AsBPsdpaxgzLWVF7P3jCjwnGgc6KCEs1bThS084IjeJ8Wd0aA6HEpOSulORNzNWmtsPjG89q0QtyvKXkTwjSAFHyJaT6sHVQ0ZQ9I-JQP0Ceddkt2DujWVwHC93bNVBDb6SQKh6EBejLEe8Xiz3eZUjtsalnucseR9pewjGBa8tBkwOW1vcRepgCoNfSwsX6jTSCvK93g__"
},
{
"step": "Background Check",
"data": {
"criminalChecks": {
"reportId": "69d924ca4658d28470210cd5",
"status": "Incomplete",
"serviceType": "STANDARD_CRIMINAL_RECORD_CHECK",
"standardResult": "Incomplete",
"submittedAt": null,
"completedAt": "2026-04-10T16:30:30.764Z",
"info": {
"birthCity": "111",
"birthCountry": "111",
"birthProvince": "111",
"dateOfBirth": "1982-01-04T00:00:00.000Z",
"email": "[email protected]",
"firstName": "TEST CARD",
"lastName": "SAMPLE",
"phone": "+15005550006",
"gender": "Male"
},
"addressHistory": [
{
"address": "910 GOVERNMENT ST",
"city": null,
"country": "CAN",
"province": "BC",
"zipCode": null
}
],
"verification": {
"passed": true,
"verifiedAt": "2026-04-10T16:26:51.532Z"
},
"convictions": [],
"pdfs": [
{
"note": "This is a test document - not a real criminal check result",
"label": "Standard Criminal Record Check (TEST)",
"docRefId": "test_doc_1775838416763",
"pdfUrl": "https://staging.api.oncarousel.com/uploads/criminal-check/69d924ca4658d28470210cd5/test_doc_1775838416763.pdf?Expires=1775839533&Key-Pair-Id=K1G5A68240S8O&Signature=1LhYfqT6ZHzSUgjJ5JPxO13X7U5pTKVhbPtaJQ-7WTbVGmXDpKUMwiLtKlCzw~nvueN25nNYI4CqXxs1XG4WP~jm0~z7QIlOmufMZhllYBo48TkdTLsm-gItGKJ2O9~9rdLebuOjBek8TAsa-9dKV~TNdCCDVWzo84XQF7yA9xo3iUOuGMfZrvEWo6ngGij9mRdP8kxMZz3C1PgZFRf9p5wTNgXiqc1~myhLLYP3AYPpC3wgxB3tu9UMbQIFMJ2t4Ms48dOD3Oy2lga03TJa2XM~aZuH9-jHqCK1KxzxK1arT9YclnMglRKvRQ~BiWiBPl-F9hG3m7PC7mnPBsjlyQ__",
"isSecure": true
}
]
}
}
},
{
"step": "Court & Eviction Checks",
"data": {
"legalChecks": [
{
"status": "Completed",
"reporter": "Openroom Sandbox",
"isMatch": true,
"message": "Cleared, no matching court records found in available databases",
"items": [
{
"url": "https://openroom.ca/dashboard/document/19b33f3e-dceb-4a81-9fcc-6e81f29ec771",
"title": "OR-SANDBOX-4: Filed by landlord on 2022-05-05",
"name": "Dama Ging",
"address": "BASEMENT, 13 DEBTOR DRIVE, OSHAWA, B2B2B2"
}
]
}
]
}
},
{
"step": "Self Declaration",
"data": {
"monthlyIncomeAmount": 13300,
"employmentStatusDetail": {
"status": "Employed Full Time",
"position": "123",
"startDate": "2026-04-10",
"companyName": "123",
"employerEmail": "[email protected]",
"employerFullName": "123",
"employerPhoneNumber": "+15555555555"
},
"lifestyleInformation": [
"I vape or smoke",
"I own pets",
"I have a criminal background"
],
"livingStatusDetail": {
"status": "Other",
"detail": "2323232"
}
}
}
],
"updatedAt": "2026-04-10T16:30:32.649Z"
}Important: Document & Image Handling (S3 Links)
Carousel no longer sends documents or images as base64 in webhook payloads.
Instead, file fields (for example frontImageUrl) contain a temporary, pre‑signed Amazon S3 URL.
How It Works
- The URL points to a file stored in Carousel’s Amazon S3 bucket
- The URL is publicly accessible but expires after 15 minutes
- After expiration, the link will no longer be valid
Required Action (Recommended)
When your system receives a webhook containing file URLs:
- Immediately download the file from the S3 URL
- Store it securely in your own system or storage provider
- Do not rely on the URL for long‑term access
⚠️ If the URL expires before you download the file, the document cannot be accessed using that link.
Webhook Failure & Retry
If your webhook endpoint is unavailable, times out, or fails to process the payload (for example due to expired file links), you can manually re‑trigger the webhook.
Retry from the Portal
- Log in to the Carousel Portal
- Open the relevant Application
- Navigate to the Webhook section
- Click Re‑send Webhook
This will send the latest available payload again, including fresh S3 URLs for any files.
Support
Need help with:
- Configuring workflows
- Webhook setup
- Payload troubleshooting
- POS launch methods
We're here to help: Speak to Support
Updated about 1 month ago
