Webhooks
Webhooks allow you to build or set up integrations that subscribe to certain events on Propelld APIs. When one of those events is triggered, we send an HTTP POST payload in JSON to the webhook's configured URL.
You can set up webhooks from your Dashboard and configure separate URLs for live mode and test mode.
A test mode webhook will only receive events for your test transactions.
In URLs, only port numbers 80 and 443 are currently allowed.
When setting up the webhook, you will be asked to specify a secret. Using this secret, you can validate that the webhook is from Propelld. Entering the secret is optional, but recommended. The secret should never be exposed publicly.
Idempotency
Your server should be configured to handle or receive the same event details multiple times. In case you receive the same webhook event again, you should check if the payload is unique or duplicated. If it is duplicate data, you should ignore it.
Deactivation
On failure, a webhook is retried once every hour for 24 hours. If we keep receiving failure responses consecutively for 24 hours, we disable the webhook. You will then need to manually re-enable the webhook from the Dashboard after fixing the errors at your end.
Note: For every failure, we send you an email notification along with the reason and the error code received by us.
Set Up Webhooks
To setup webhooks:
- Log into your Propelld Dashboard and navigate to Credential Settings → Webhooks.
- Click Setup Webhook.
- Enter the following details:
- Enter the Website URL where you want to receive the webhook payload when an event is triggered.
- Enter a Secret for the webhook endpoint. The secret is used for validation purposes.
Note: The secret that you enter here can be used to validate that the webhook is from Propelld. Do not expose the secret publicly.
- Select the required events from the list of Active Events.
- Click Save to enable webhooks.
Validation
When your webhook secret is set, Propelld uses it to create a hash signature with each payload.
This hash signature is passed along with each request under the X-Propelld-Signature header that you need to validate at your end.
Header | Description |
---|---|
X-Propelld-Signature | The hash signature is calculated using HMAC with SHA256 algorithm; with your webhook secret set as the key, and the webhook request body as the message. |
Entities
Application
field | type | desc |
---|---|---|
ApplicationId | integer | Loan Application Reference Id |
QuoteId | string | Reference Id of quote. Will be null for non-api cases |
Status | string | CREATED , APPROVED , REJECTED , READY_FOR_DISBURSAL , PUSHED_FOR_DISBURSAL , DISBURSED , DROPPED |
CourseId | integer | Propelld Course Id |
Institute | string | Name of the institute for specific application |
CourseName | string | Name of the course for specific application |
Notes | object | Notes object in create quote api. null if not present |
ReferenceNumber | string | Reference number in create quote api. null if not present |
Loan
field | type | desc |
---|---|---|
LoanAmount | integer | Approved Loan Amount |
TotalTenor | integer | Total Tenor in months. Its including moratorium period. |
MoratoriumPeriod | integer | Moratorium Period in months |
DiscountedCourseFee | integer | Discounted Course Fee as provided |
Borrowers
Applicant
field | type | desc |
---|---|---|
Name | string | Name for Applicant |
Mobile | string | 10 digit mobile number. |
string | Email of Applicant. null if not present |
CoApplicant
For those cases which don't have Co-Applicants the CoApplicant
Field will be empty array
field | type | desc |
---|---|---|
Name | string | Name for Applicant |
Mobile | string | 10 digit mobile number. |
string | Email of Applicant. null if not present |
Disbursement
field | type | desc |
---|---|---|
TranchNumber | integer | Tranch Number |
DisbursementAmount | integer | Total Tenor in months. Its including moratorium period. |
DisbursementDate | string | Date of Disbursement in YYYY-MM-DD |
LoanReference | string | Loan Reference |
DisbursementReference | string | Disbursement Reference Number (UTR Number) |
Events Description
Webhook Event | Description |
---|---|
application.status.change | Triggered when an application status changed to CREATED , APPROVED , REJECTED , READY_FOR_DISBURSAL , PUSHED_FOR_DISBURSAL ,DISBURSED , DROPPED . |
application.loan.disbursed | Triggered when loan has been disbursed. |
Status Description
Status | Description |
---|---|
CREATED | Triggered when Application gets created in Propelld system for review |
APPROVED | Triggered when Loan is Approved from Propelld. |
REJECTED | Triggered when Application is Rejected from Propelld. |
READY_FOR_DISBURSAL | Triggered when cutomer has completed all loan formalities but Application is yet to be pushed to NBFC/Bank for disbursal |
PUSHED_FOR_DISBURSAL | Triggered when Application has been pushed to NBFC/Bank for disbursal |
DISBURSED | Triggered when Loan has been disbursed to Institute |
DROPPED | Triggered when Application is Dropped from Propelld. |
Test Event
{
"Event": "test.event",
"Entities": ["Application"],
"Payload": {
"Application": {
"ApplicationId": 666,
"QuoteId": "5362179f-d56f-40d3-949a-99cf6888cdee",
"Status": "APPROVED",
"CourseId": 541,
"Institute": "Test Institute",
"CourseName": "Artificial Intelligence",
"Notes": null,
"ReferenceNumber": null
}
},
"CreatedOn": "2019-08-06 18:00:00"
}
Application Status Change
{
"Event": "application.status.change",
"Entities": ["Application", "Loan", "Borrowers"],
"Payload": {
"Application": {
"ApplicationId": 666,
"QuoteId": "5362179f-d56f-40d3-949a-99cf6888cdee",
"Status": "APPROVED",
"CourseId": 541,
"Institute": "Test Institute",
"CourseName": "Artificial Intelligence",
"Notes": null,
"ReferenceNumber": null
},
"Loan": {
"LoanAmount": 50000,
"TotalTenor": 12,
"MoratoriumPeriod": 6,
"DiscountedCourseFee": 65000
},
"Borrowers": {
"Applicant": {
"Name": "Jane Doe",
"Mobile": "9999999999",
"Email": "jane.doe@test.com"
},
"CoApplicants": [
{
"Name": "John Doe",
"Mobile": "9999999999",
"Email": "john.doe@test.com"
}
]
}
},
"CreatedOn": "2019-08-06 18:00:00"
}
Loan Disbursed
{
"Event": "application.loan.disbursed",
"Entities": ["Application", "Loan", "Borrowers", "Disbursement"],
"Payload": {
"Application": {
"ApplicationId": 666,
"QuoteId": "5362179f-d56f-40d3-949a-99cf6888cdee",
"Status": "APPROVED",
"CourseId": 541,
"Institute": "Test Institute",
"CourseName": "Artificial Intelligence",
"Notes": null,
"ReferenceNumber": null
},
"Loan": {
"LoanAmount": 50000,
"TotalTenor": 12,
"MoratoriumPeriod": 6,
"DiscountedCourseFee": 65000
},
"Borrowers": {
"Applicant": {
"Name": "Jane Doe",
"Mobile": "9999999999",
"Email": "jane.doe@test.com"
},
"CoApplicants": [
{
"Name": "John Doe",
"Mobile": "9999999999",
"Email": "john.doe@test.com"
}
]
},
"Disbursement": [
{
"LoanReference": "DEL00123002104",
"TranchNumber": 1,
"DisbursementAmount": 50000,
"DisbursementDate": "2019-08-20",
"DisbursementReference": "AIASDO311144141"
}
]
},
"CreatedOn": "2019-08-06 18:00:00"
}