The Claim Callback API is provided by our partner, serving as the means by which Qoala shares the latest status of the claim instance. Through this callback API, Qoala will share claim information such as claim number, status, policy details, and customer data. Qoala's system supports several methods of authorization, including HMAC_SHA256, MD5, Bearer, and Basic Auth. Qoala can also support a new authorization method if needed. Qoala will notify the partner when the claim status is updated through this callback API.
Callback API is not a mandatory flow in terms of claim creation; however, it is useful for partners who want to get up-to-date status of the claim.
Callback URL
Each partner can configure a callback URL for claim status webhook. This notification webhook will be triggered every time there is any change in claim status. Please refer to Claim Status section for each status details.
POST {partner-url-path}
partner-url-path = URL from partner to receive webhook notificationThe configuration can be done through at the time of onboarding.
Webhook Signature
Partners can optionally verify the authenticity of notifications sent by Qoala by the header x-api-key
Example:
x-api-key: 6ffbb59b2300aae63f272406069a9788598b792a944a07aba816edb039989a39
Webhook Request
Each time a status is updated then a request with the following details will be made against the specified Callback URL [partner-url-path]
Headers
The following are the details of the request headers of the webhook
| Header | Expected Value |
|---|---|
x-api-key | Refer to Signature section |
Content-Type | application/json |
Body
The following are the details of the request body of the webhook.
| Object Fields | Type | Required | Description |
|---|---|---|---|
number | string | Yes | Unique claim number generated by Qoala |
product_code | string | No | Product code defined by Qoala |
policy_number | string | No | Policy number generated by Qoala |
last_status | string | Yes | Last claim status. Refer to Claim Status section for supported values |
user_channel | string | No | Channel through which the claim was created |
currency_code | string | No | Currency code of the claim amount |
country_code | string | No | Country code |
total_amount | number | No | Total claim amount |
created_at | string | No | Timestamp when the claim was created (ISO 8601) |
updated_at | string | No | Timestamp when the claim was last updated (ISO 8601) |
sum_insured | number | No | Sum insured amount calculated from policy details |
deductible_fee | number | No | Deductible fee amount |
excess_fee | number | No | Excess fee amount |
net_claim_amount | number | No | Net claim amount after deductions |
total_payment | number | No | Total payment amount (excess fee + deductible fee + non-covered cost) |
non_covered_cost | number | No | Non-covered repair cost amount |
policy_details | object | No | Policy information linked to the claim. See policy_details table below |
product_details | object | No | Product and benefit information. See product_details table below |
policy_details
| Field | Type | Required | Description |
|---|---|---|---|
transaction_id | string | No | Partner transaction identifier from the linked policy |
insurance_policy_number | string | No | Insurance policy number assigned by the insurer |
purchased_at | string | No | Timestamp when the policy was purchased (ISO 8601) |
start_protection_at | string | No | Start date and time of the policy protection period (ISO 8601) |
end_protection_at | string | No | End date and time of the policy protection period (ISO 8601) |
product_details
| Field | Type | Required | Description |
|---|---|---|---|
code | string | No | Product code |
name | string | No | Product name |
category | string | No | Product category |
benefit_code | string | No | Benefit code |
benefit_name | string | No | Benefit name |
partner_name | string | No | Partner name |
insurance_name | string | No | Insurance provider name |
timezone | string | No | Product timezone |
Example Request Body
{
"number": "C-20260716-GADGETPARTNER001-ABC12",
"product_code": "G-ADLD-PARTNER-003",
"policy_number": "G-ADLD-PARTNER-003-20260716-INQ4M",
"last_status": "QOALA_CLAIM_APPROVE",
"user_channel": "PARTNERSHIP",
"currency_code": "IDR",
"country_code": "ID",
"total_amount": 1500000,
"created_at": "2026-07-16T08:30:00+07:00",
"updated_at": "2026-07-16T10:00:00+07:00",
"sum_insured": 5000000,
"deductible_fee": 0,
"excess_fee": 0,
"net_claim_amount": 1500000,
"total_payment": 0,
"non_covered_cost": 0,
"policy_details": {
"transaction_id": "TX-20260716-001",
"insurance_policy_number": "INS-123456",
"purchased_at": "2026-07-15T17:00:00+07:00",
"start_protection_at": "2026-07-15T17:00:00+07:00",
"end_protection_at": "2028-07-15T16:59:59+07:00"
},
"product_details": {
"code": "G-ADLD-PARTNER-003",
"name": "Gadget Protection",
"category": "ADLD",
"benefit_code": "BENEFIT_CODE",
"benefit_name": "Accidental Damage",
"partner_name": "Gadget Partner",
"insurance_name": "Insurance Provider",
"timezone": "Asia/Jakarta"
}
}Webhook Response
HTTP response status code from partner will be tracked and
- HTTP status code 200 will be acknowledged by Qoala as notification successfully received. No retry will be done.
- Other HTTP status code will be marked as failed and will be retried. Request will be retried up to 8 times with exponential backoff interval.