Authentication
Requests are authenticated with a partner API key sent as a bearer token. Keys are issued per environment (sandbox and production) to approved partners. Never embed a key in a mobile app or browser. Call the API from your servers.
Header
Authorization: Bearer <YOUR_API_KEY>
Content-Type: application/json
Base URL (illustrative)
# sandbox
https://api.sandbox.topsure.example/v1
POST
/quote
Returns available cover options for a worker in a given country. Prices and benefits come from the configured product and licensed partner for that market.
Request
{
"country": "VN",
"worker_type": "motorcycle_rider",
"plan": "essential",
"billing_period": "monthly"
}
Response
{
"quote_id": "qt_8f21c",
"coverage": "24_7_accidental_death",
"benefit": 30000,
"premium": 4.99,
"currency": "AUD",
"expires_at": "2026-11-01T00:00:00Z"
}
POST
/enrol
Enrols a worker against an accepted quote. Eligibility checks run before the policy is issued by the insurance partner.
Request
{
"quote_id": "qt_8f21c",
"platform_worker_id": "drv_10442",
"premium_collection": "earnings_deduction",
"consent": { "terms_version": "2026-10" }
}
Response
{
"policy_id": "pol_3c9a7",
"policy_status": "pending_activation",
"next_step": "add_beneficiary"
}
GET
/policy
Returns the current policy for a worker, including whether 24/7 protection is active.
Request
GET /policy?policy_id=pol_3c9a7
Response
{
"policy_status": "active",
"coverage": "24_7_accidental_death",
"benefit": 30000,
"currency": "AUD"
}
POST
/beneficiary
Registers or updates the nominated beneficiary and optional Safe Contact. Personal data is passed through to the policy record and is not stored by your platform.
Request
{
"policy_id": "pol_3c9a7",
"relationship": "spouse",
"name": "<BENEFICIARY_NAME>",
"safe_contact": { "channel": "sms" }
}
Response
{
"beneficiary_status": "registered",
"policy_status": "active"
}
POST
/claim
Opens a claim notification. TopSure handles intake and documents; the licensed insurance partner assesses and decides the claim.
Request
{
"policy_id": "pol_3c9a7",
"reported_by": "beneficiary",
"incident_date": "2026-10-02",
"incident_type": "accident"
}
Response
{
"claim_id": "TS-20483",
"status": "submitted",
"documents_required": ["death_certificate", "identity"]
}
GET
/claim/:id
Tracks a claim from submission to decision. No processing time is guaranteed by the API.
Request
GET /claim/TS-20483
Response
{
"claim_id": "TS-20483",
"status": "under_review",
"documents": {
"death_certificate": "received",
"identity": "verified",
"beneficiary": "verified"
},
"assessed_by": "insurance_partner"
}
POST
/cancel
Cancels a policy at the end of the current period, or as local rules require.
Request
{
"policy_id": "pol_3c9a7",
"reason": "worker_request"
}
Response
{
"policy_status": "cancellation_scheduled",
"cover_ends_at": "2026-11-01T00:00:00Z"
}
Webhooks
Subscribe to events so your app always shows the worker's current protection status.
policy.activated
Sent when the insurance partner issues the policy and 24/7 cover starts.
{
"event": "policy.activated",
"policy_id": "pol_3c9a7",
"coverage": "24_7_accidental_death"
}
claim.status_changed
Sent whenever a claim moves between stages.
{
"event": "claim.status_changed",
"claim_id": "TS-20483",
"from": "submitted",
"to": "under_review"
}
Field names, endpoints and responses on this page are illustrative and may change. All figures are examples. Insurance products are provided by appropriately licensed insurance partners and are subject to eligibility, terms, exclusions and local regulation.