Developers

API reference

Every endpoint, with its parameters, request bodies and responses. Requests go to https://app.polisync.in/api/public/v1 and need an API key, as described in the overview.

New here?

Start with the overview: authentication, errors, rate limits and idempotency apply to every endpoint below.

Connection

Check that your key works.

GET/me

Check your connection

Confirms the key works and shows the workspace it belongs to and what it is allowed to do. A good first call.

Needs scope: any valid key.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/me" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": {
    "workspace": "Patel Insurance Services",
    "plan": "Enterprise",
    "key": {
      "name": "Website enquiry form",
      "prefix": "psk_live_ab12",
      "expiresAt": "2027-01-24T00:00:00.000Z",
      "scopes": [
        "customer:read",
        "customer:create",
        "policy:read"
      ]
    }
  }
}

Customers

People and companies you insure.

GET/customers

List customers

Needs scope: customer:read.

PAN is returned masked unless the key has the customer:pan scope.

Query parameters

FieldTypeDescription
pageinteger
limitinteger
order"asc" | "desc"
updatedSincestring
sort"createdAt" | "updatedAt" | "name"Field to sort by.
searchstringMatches part of the name, email or phone number.
emailstringExact email address (case-insensitive). Useful to avoid creating duplicates.
phonestringExact phone number in +91 format.
agencyIdstringOnly customers of the agency with this id.
status"active" | "inactive"Only customers with this status.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/customers?search=patel&limit=20" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": [
    {
      "id": "cmv1a2b3c0001xyzcustomer",
      "name": "Ramesh Patel",
      "type": "individual",
      "phone": "+919876543210",
      "altPhone": null,
      "email": "ramesh.patel@gmail.com",
      "dateOfBirth": "1985-03-14",
      "gender": "male",
      "address": "12 Shanti Nagar",
      "city": "Surat",
      "state": "Gujarat",
      "pin": "395007",
      "country": "IN",
      "pan": "ABCDE****F",
      "agencyId": "cmv1a2b3c0002xyzagency",
      "status": "active",
      "consentGiven": true,
      "consentDate": "2026-10-26T09:30:00.000Z",
      "createdAt": "2026-10-26T09:30:00.000Z",
      "updatedAt": "2026-10-26T09:30:00.000Z"
    }
  ],
  "pagination": {
    "total": 1,
    "page": 1,
    "limit": 20,
    "totalPages": 1
  }
}
GET/customers/{id}

Get a customer

Needs scope: customer:read.

Path parameters

NameDescription
idThe customer id.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/customers/cmv1a2b3c0001xyzcustomer" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0001xyzcustomer",
    "name": "Ramesh Patel",
    "type": "individual",
    "phone": "+919876543210",
    "altPhone": null,
    "email": "ramesh.patel@gmail.com",
    "dateOfBirth": "1985-03-14",
    "gender": "male",
    "address": "12 Shanti Nagar",
    "city": "Surat",
    "state": "Gujarat",
    "pin": "395007",
    "country": "IN",
    "pan": "ABCDE****F",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "status": "active",
    "consentGiven": true,
    "consentDate": "2026-10-26T09:30:00.000Z",
    "createdAt": "2026-10-26T09:30:00.000Z",
    "updatedAt": "2026-10-26T09:30:00.000Z"
  }
}
POST/customers

Create a customer

Adds a customer. You must send consentGiven: true to confirm the customer agreed to their data being stored, as India's DPDP Act requires. Polisync records that the consent came through the API, with the key and the caller's IP address.

Needs scope: customer:create. Accepts an Idempotency-Key header.

Phone numbers must be Indian mobile numbers in +91 format. Disposable email addresses are rejected.

Search by email or phone first if you want to avoid duplicates.

Request body

FieldTypeDescription
namerequiredstring
typerequired"individual" | "company"individual for a person, company for a business
phonerequiredstringIndian mobile number in +91 format, for example +919876543210
altPhonestring or null
emailstring or null
dateOfBirthstring or null
gender"male" | "female" | "other" or null
addressstring or null
countrystring or null
citystring or null
statestring or null
pinstring or null
panstring or null
agencyIdstring or null
consentGivenrequiredtrueMust be true. You confirm the customer agreed to their data being stored (India's DPDP Act).

Example request

curl -X POST "https://app.polisync.in/api/public/v1/customers" \
  -H "Authorization: Bearer $POLISYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: unique-request-id-123" \
  -d '{
  "name": "Ramesh Patel",
  "type": "individual",
  "phone": "+919876543210",
  "email": "ramesh.patel@gmail.com",
  "dateOfBirth": "1985-03-14",
  "city": "Surat",
  "state": "Gujarat",
  "agencyId": "cmv1a2b3c0002xyzagency",
  "consentGiven": true
}'

Response 201

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0001xyzcustomer",
    "name": "Ramesh Patel",
    "type": "individual",
    "phone": "+919876543210",
    "altPhone": null,
    "email": "ramesh.patel@gmail.com",
    "dateOfBirth": "1985-03-14",
    "gender": "male",
    "address": "12 Shanti Nagar",
    "city": "Surat",
    "state": "Gujarat",
    "pin": "395007",
    "country": "IN",
    "pan": "ABCDE****F",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "status": "active",
    "consentGiven": true,
    "consentDate": "2026-10-26T09:30:00.000Z",
    "createdAt": "2026-10-26T09:30:00.000Z",
    "updatedAt": "2026-10-26T09:30:00.000Z"
  }
}
PATCH/customers/{id}

Update a customer

Send only the fields you want to change. Send null to clear an optional field.

Needs scope: customer:update.

Path parameters

NameDescription
idThe customer id.

Request body

FieldTypeDescription
namestring
type"individual" | "company"individual for a person, company for a business
phonestringIndian mobile number in +91 format, for example +919876543210
altPhonestring or null
emailstring or null
dateOfBirthstring or null
gender"male" | "female" | "other" or null
addressstring or null
countrystring or null
citystring or null
statestring or null
pinstring or null
panstring or null
agencyIdstring or null

Example request

curl -X PATCH "https://app.polisync.in/api/public/v1/customers/cmv1a2b3c0001xyzcustomer" \
  -H "Authorization: Bearer $POLISYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "city": "Ahmedabad",
  "email": null
}'

Response 200

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0001xyzcustomer",
    "name": "Ramesh Patel",
    "type": "individual",
    "phone": "+919876543210",
    "altPhone": null,
    "email": "ramesh.patel@gmail.com",
    "dateOfBirth": "1985-03-14",
    "gender": "male",
    "address": "12 Shanti Nagar",
    "city": "Surat",
    "state": "Gujarat",
    "pin": "395007",
    "country": "IN",
    "pan": "ABCDE****F",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "status": "active",
    "consentGiven": true,
    "consentDate": "2026-10-26T09:30:00.000Z",
    "createdAt": "2026-10-26T09:30:00.000Z",
    "updatedAt": "2026-10-26T09:30:00.000Z"
  }
}

Policies

Insurance policies, with nominees.

GET/policies

List policies

Needs scope: policy:read.

Nominees are left out of lists to keep them small. Fetch one policy to see them.

Query parameters

FieldTypeDescription
pageinteger
limitinteger
order"asc" | "desc"
updatedSincestring
sort"createdAt" | "updatedAt" | "expiryDate"Field to sort by.
searchstringMatches part of the policy number or plan name.
customerIdstringOnly policies of the customer with this id.
agencyIdstringOnly policies of the agency with this id.
insurerIdstringOnly policies with the insurer with this id.
status"active" | "expired" | "cancelled"Only policies with this status.
insuranceType"life" | "health" | "motor" | "pa" | "wc" | "travel" | "other"Only this type of insurance.
expiryFromstringExpiry date on or after this day (YYYY-MM-DD).
expiryTostringExpiry date on or before this day (YYYY-MM-DD).

Example request

curl -X GET "https://app.polisync.in/api/public/v1/policies?status=active&expiryTo=2026-12-31" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": [
    {
      "id": "cmv1a2b3c0003xyzpolicy",
      "policyNumber": "HLT-2026-004512",
      "insuranceType": "health",
      "customerId": "cmv1a2b3c0001xyzcustomer",
      "agencyId": "cmv1a2b3c0002xyzagency",
      "insurerId": "cmr23hrx5000nxemeinsurer",
      "insurerName": "Star Health and Allied Insurance Co. Ltd.",
      "planName": "Family Health Optima",
      "premium": 18500,
      "sumInsured": 1000000,
      "firstYearCommission": 2775,
      "startDate": "2026-11-01",
      "expiryDate": "2027-10-31",
      "paymentMode": "annual",
      "status": "active",
      "notes": null,
      "typeFields": {},
      "nominees": [
        {
          "id": "cmv1a2b3c0004xyznominee",
          "name": "Sunita Patel",
          "dateOfBirth": "1988-07-02",
          "relation": "spouse",
          "sharePercent": 100,
          "phone": "+919876500001"
        }
      ],
      "createdAt": "2026-10-26T09:41:00.000Z",
      "updatedAt": "2026-10-26T09:41:00.000Z"
    }
  ],
  "pagination": {
    "total": 1,
    "page": 1,
    "limit": 20,
    "totalPages": 1
  }
}
GET/policies/{id}

Get a policy

Needs scope: policy:read.

Path parameters

NameDescription
idThe policy id.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/policies/cmv1a2b3c0003xyzpolicy" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0003xyzpolicy",
    "policyNumber": "HLT-2026-004512",
    "insuranceType": "health",
    "customerId": "cmv1a2b3c0001xyzcustomer",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "insurerId": "cmr23hrx5000nxemeinsurer",
    "insurerName": "Star Health and Allied Insurance Co. Ltd.",
    "planName": "Family Health Optima",
    "premium": 18500,
    "sumInsured": 1000000,
    "firstYearCommission": 2775,
    "startDate": "2026-11-01",
    "expiryDate": "2027-10-31",
    "paymentMode": "annual",
    "status": "active",
    "notes": null,
    "typeFields": {},
    "nominees": [
      {
        "id": "cmv1a2b3c0004xyznominee",
        "name": "Sunita Patel",
        "dateOfBirth": "1988-07-02",
        "relation": "spouse",
        "sharePercent": 100,
        "phone": "+919876500001"
      }
    ],
    "createdAt": "2026-10-26T09:41:00.000Z",
    "updatedAt": "2026-10-26T09:41:00.000Z"
  }
}
POST/policies

Create a policy

Adds a policy and opens its renewal automatically. The customer and agency must already exist in your workspace, and the insurer id comes from GET /insurers. Your plan's policy limit applies.

Needs scope: policy:create. Accepts an Idempotency-Key header.

policyNumber must be unique in your workspace; a duplicate returns 409 conflict.

To renew a general insurance policy, create the new policy with renewFromPolicyId set to the old one. The old policy is closed and linked.

Request body

FieldTypeDescription
agencyIdrequiredstringId of one of your agencies. It must be active.
customerIdrequiredstringId of one of your customers
policyNumberrequiredstringUnique within your workspace
insuranceTyperequired"life" | "health" | "motor" | "pa" | "wc" | "travel" | "other"
insurerIdrequiredstringId from GET /insurers
planNamestringThe insurer's product name
premiumrequirednumberRupees
sumInsuredrequirednumberRupees
firstYearCommissionnumber or null
startDaterequiredstringYYYY-MM-DD
expiryDaterequiredstringYYYY-MM-DD. Must be after startDate.
paymentMode"monthly" | "quarterly" | "half_yearly" | "annual" | "single"How the premium is paid. Defaults to annual.
notesstring or null
typeFieldsobjectExtra details for the insurance type, such as a vehicle number
nomineesarray of object
nominees[].namerequiredstring
nominees[].dateOfBirthstring or null
nominees[].relationrequired"spouse" | "child" | "parent" | "sibling" | "other"
nominees[].sharePercentrequirednumberPercent of the benefit. All nominees on a policy must total 100.
nominees[].phonestring or null
shareWithPolicyholderbooleanShow the policy in the customer portal. Needs a plan with the portal and a customer email.
renewFromPolicyIdstringThe policy this one renews (general insurance). The old one is closed and linked.

Example request

curl -X POST "https://app.polisync.in/api/public/v1/policies" \
  -H "Authorization: Bearer $POLISYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: unique-request-id-123" \
  -d '{
  "agencyId": "cmv1a2b3c0002xyzagency",
  "customerId": "cmv1a2b3c0001xyzcustomer",
  "policyNumber": "HLT-2026-004512",
  "insuranceType": "health",
  "insurerId": "cmr23hrx5000nxemeinsurer",
  "planName": "Family Health Optima",
  "premium": 18500,
  "sumInsured": 1000000,
  "startDate": "2026-11-01",
  "expiryDate": "2027-10-31",
  "paymentMode": "annual",
  "nominees": [
    {
      "name": "Sunita Patel",
      "relation": "spouse",
      "sharePercent": 100
    }
  ]
}'

Response 201

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0003xyzpolicy",
    "policyNumber": "HLT-2026-004512",
    "insuranceType": "health",
    "customerId": "cmv1a2b3c0001xyzcustomer",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "insurerId": "cmr23hrx5000nxemeinsurer",
    "insurerName": "Star Health and Allied Insurance Co. Ltd.",
    "planName": "Family Health Optima",
    "premium": 18500,
    "sumInsured": 1000000,
    "firstYearCommission": 2775,
    "startDate": "2026-11-01",
    "expiryDate": "2027-10-31",
    "paymentMode": "annual",
    "status": "active",
    "notes": null,
    "typeFields": {},
    "nominees": [
      {
        "id": "cmv1a2b3c0004xyznominee",
        "name": "Sunita Patel",
        "dateOfBirth": "1988-07-02",
        "relation": "spouse",
        "sharePercent": 100,
        "phone": "+919876500001"
      }
    ],
    "createdAt": "2026-10-26T09:41:00.000Z",
    "updatedAt": "2026-10-26T09:41:00.000Z"
  }
}
PATCH/policies/{id}

Update a policy

Send only the fields you want to change. Changing expiryDate also moves the open renewal. If you send nominees, they replace the existing ones.

Needs scope: policy:update.

Path parameters

NameDescription
idThe policy id.

Request body

FieldTypeDescription
agencyIdstring
customerIdstring
policyNumberstringUnique within your workspace
insuranceType"life" | "health" | "motor" | "pa" | "wc" | "travel" | "other"
insurerIdstringId from GET /insurers
planNamestringThe insurer's product name
premiumnumberRupees
sumInsurednumberRupees
firstYearCommissionnumber or null
startDatestringYYYY-MM-DD
expiryDatestringYYYY-MM-DD. Must be after startDate.
paymentMode"monthly" | "quarterly" | "half_yearly" | "annual" | "single"How the premium is paid. Defaults to annual.
status"active" | "expired" | "cancelled"
notesstring
typeFieldsobjectExtra details for the insurance type, such as a vehicle number
nomineesarray of object
nominees[].namerequiredstring
nominees[].dateOfBirthstring or null
nominees[].relationrequired"spouse" | "child" | "parent" | "sibling" | "other"
nominees[].sharePercentrequirednumberPercent of the benefit. All nominees on a policy must total 100.
nominees[].phonestring or null
shareWithPolicyholderbooleanShow the policy in the customer portal. Needs a plan with the portal and a customer email.

Example request

curl -X PATCH "https://app.polisync.in/api/public/v1/policies/cmv1a2b3c0003xyzpolicy" \
  -H "Authorization: Bearer $POLISYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "premium": 19000,
  "status": "cancelled"
}'

Response 200

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0003xyzpolicy",
    "policyNumber": "HLT-2026-004512",
    "insuranceType": "health",
    "customerId": "cmv1a2b3c0001xyzcustomer",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "insurerId": "cmr23hrx5000nxemeinsurer",
    "insurerName": "Star Health and Allied Insurance Co. Ltd.",
    "planName": "Family Health Optima",
    "premium": 18500,
    "sumInsured": 1000000,
    "firstYearCommission": 2775,
    "startDate": "2026-11-01",
    "expiryDate": "2027-10-31",
    "paymentMode": "annual",
    "status": "active",
    "notes": null,
    "typeFields": {},
    "nominees": [
      {
        "id": "cmv1a2b3c0004xyznominee",
        "name": "Sunita Patel",
        "dateOfBirth": "1988-07-02",
        "relation": "spouse",
        "sharePercent": 100,
        "phone": "+919876500001"
      }
    ],
    "createdAt": "2026-10-26T09:41:00.000Z",
    "updatedAt": "2026-10-26T09:41:00.000Z"
  }
}

Renewals

The renewal tracker.

GET/renewals

List renewals

The renewal tracker. Renewals are created and advanced by Polisync; you read them here and record them in the app or by updating the policy.

Needs scope: renewal:read.

Query parameters

FieldTypeDescription
pageinteger
limitinteger
order"asc" | "desc"
updatedSincestring
sort"expiryDate" | "updatedAt"Field to sort by. Expiry date sorts soonest first unless you set order.
view"active" | "history" | "all"active is the working book, history is renewed and lapsed, all is everything.
policyIdstringOnly renewals of the policy with this id.
expiryFromstringDue on or after this day (YYYY-MM-DD).
expiryTostringDue on or before this day (YYYY-MM-DD).

Example request

curl -X GET "https://app.polisync.in/api/public/v1/renewals?view=active&expiryTo=2026-11-30" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": [
    {
      "id": "cmv1a2b3c0005xyzrenewal",
      "policyId": "cmv1a2b3c0003xyzpolicy",
      "policyNumber": "HLT-2026-004512",
      "customerId": "cmv1a2b3c0001xyzcustomer",
      "insuranceType": "health",
      "expiryDate": "2027-10-31",
      "daysLeft": 370,
      "status": "active",
      "stage": "upcoming",
      "mode": "reissue",
      "graceDaysLeft": 30,
      "renewedAt": null,
      "renewedPolicyId": null,
      "commissionEarned": null,
      "createdAt": "2026-10-26T09:41:00.000Z",
      "updatedAt": "2026-10-26T09:41:00.000Z"
    }
  ],
  "pagination": {
    "total": 1,
    "page": 1,
    "limit": 20,
    "totalPages": 1
  }
}

Claims

Claims, their timeline and IRDAI deadlines.

GET/claims

List claims

Needs scope: claim:read.

Query parameters

FieldTypeDescription
pageinteger
limitinteger
order"asc" | "desc"
updatedSincestring
sort"createdAt" | "updatedAt" | "incidentDate" | "nextFollowUpAt"Field to sort by.
status"open" | "closed" or "reported" | "documents_pending" | "submitted" | "under_review" | "query_raised" | "approved" | "settled" | "rejected" | "escalated" | "closed"open means still being worked, closed means settled or closed, or give one exact status.
claimType"health_cashless" | "health_reimbursement" | "life_death" | "life_maturity" | "motor_own_damage" | "motor_third_party" | "motor_theft" | "other"Only this type of claim.
policyIdstringOnly claims on the policy with this id.
customerIdstringOnly claims of the customer with this id.
agencyIdstringOnly claims of the agency with this id.
overdue"true"Only claims where the insurer has passed an IRDAI deadline.
followUpDue"true"Only open claims whose follow-up date is today or earlier.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/claims?status=open&overdue=true" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": [
    {
      "id": "cmv1a2b3c0006xyzclaim",
      "policyId": "cmv1a2b3c0003xyzpolicy",
      "customerId": "cmv1a2b3c0001xyzcustomer",
      "agencyId": "cmv1a2b3c0002xyzagency",
      "claimType": "health_reimbursement",
      "claimTypeLabel": "Health: reimbursement",
      "status": "submitted",
      "claimNumber": "CLM-884213",
      "incidentDate": "2026-10-20",
      "intimatedAt": "2026-10-21",
      "submittedAt": "2026-10-22",
      "surveyReportAt": null,
      "underInvestigation": false,
      "amountClaimed": 85000,
      "amountApproved": null,
      "amountSettled": null,
      "settledAt": null,
      "rejectionReason": null,
      "providerName": "City Hospital",
      "handlerName": null,
      "handlerContact": null,
      "description": "Hospitalised for 3 days",
      "nextFollowUpAt": "2026-10-30",
      "closedAt": null,
      "deadlines": [
        {
          "key": "health_reimbursement_settle",
          "label": "Insurer to settle",
          "rule": "Within 15 days of the claim being submitted",
          "startsOn": "2026-10-22",
          "dueOn": "2026-11-06",
          "daysLeft": 11,
          "state": "running",
          "interestDue": false
        }
      ],
      "createdAt": "2026-10-21T08:15:00.000Z",
      "updatedAt": "2026-10-22T10:02:00.000Z"
    }
  ],
  "pagination": {
    "total": 1,
    "page": 1,
    "limit": 20,
    "totalPages": 1
  }
}
GET/claims/{id}

Get a claim

Needs scope: claim:read.

Path parameters

NameDescription
idThe claim id.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/claims/cmv1a2b3c0006xyzclaim" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0006xyzclaim",
    "policyId": "cmv1a2b3c0003xyzpolicy",
    "customerId": "cmv1a2b3c0001xyzcustomer",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "claimType": "health_reimbursement",
    "claimTypeLabel": "Health: reimbursement",
    "status": "submitted",
    "claimNumber": "CLM-884213",
    "incidentDate": "2026-10-20",
    "intimatedAt": "2026-10-21",
    "submittedAt": "2026-10-22",
    "surveyReportAt": null,
    "underInvestigation": false,
    "amountClaimed": 85000,
    "amountApproved": null,
    "amountSettled": null,
    "settledAt": null,
    "rejectionReason": null,
    "providerName": "City Hospital",
    "handlerName": null,
    "handlerContact": null,
    "description": "Hospitalised for 3 days",
    "nextFollowUpAt": "2026-10-30",
    "closedAt": null,
    "deadlines": [
      {
        "key": "health_reimbursement_settle",
        "label": "Insurer to settle",
        "rule": "Within 15 days of the claim being submitted",
        "startsOn": "2026-10-22",
        "dueOn": "2026-11-06",
        "daysLeft": 11,
        "state": "running",
        "interestDue": false
      }
    ],
    "createdAt": "2026-10-21T08:15:00.000Z",
    "updatedAt": "2026-10-22T10:02:00.000Z"
  }
}
POST/claims

Report a claim

Logs a claim against a policy. The customer and agency come from the policy. The claim is assigned to the person who created the API key. The insurer, not Polisync, decides a claim; Polisync tracks the documents, follow-ups and IRDAI deadlines.

Needs scope: claim:create. Accepts an Idempotency-Key header.

claimType must suit the policy: a health policy takes health_cashless or health_reimbursement (or other).

Request body

FieldTypeDescription
policyIdrequiredstring
claimTyperequired"health_cashless" | "health_reimbursement" | "life_death" | "life_maturity" | "motor_own_damage" | "motor_third_party" | "motor_theft" | "other"
incidentDaterequiredstring
claimNumberstring or null
intimatedAtstring or null
submittedAtstring or null
surveyReportAtstring or null
underInvestigationboolean
amountClaimednumber or null
amountApprovednumber or null
amountSettlednumber or null
rejectionReasonstring or null
providerNamestring or null
handlerNamestring or null
handlerContactstring or null
descriptionstring or null
nextFollowUpAtstring or null
status"reported" | "documents_pending" | "submitted" | "under_review" | "query_raised" | "approved" | "settled" | "rejected" | "escalated" | "closed"

Example request

curl -X POST "https://app.polisync.in/api/public/v1/claims" \
  -H "Authorization: Bearer $POLISYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: unique-request-id-123" \
  -d '{
  "policyId": "cmv1a2b3c0003xyzpolicy",
  "claimType": "health_reimbursement",
  "incidentDate": "2026-10-20",
  "intimatedAt": "2026-10-21",
  "submittedAt": "2026-10-22",
  "amountClaimed": 85000,
  "providerName": "City Hospital",
  "description": "Hospitalised for 3 days"
}'

Response 201

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0006xyzclaim",
    "policyId": "cmv1a2b3c0003xyzpolicy",
    "customerId": "cmv1a2b3c0001xyzcustomer",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "claimType": "health_reimbursement",
    "claimTypeLabel": "Health: reimbursement",
    "status": "submitted",
    "claimNumber": "CLM-884213",
    "incidentDate": "2026-10-20",
    "intimatedAt": "2026-10-21",
    "submittedAt": "2026-10-22",
    "surveyReportAt": null,
    "underInvestigation": false,
    "amountClaimed": 85000,
    "amountApproved": null,
    "amountSettled": null,
    "settledAt": null,
    "rejectionReason": null,
    "providerName": "City Hospital",
    "handlerName": null,
    "handlerContact": null,
    "description": "Hospitalised for 3 days",
    "nextFollowUpAt": "2026-10-30",
    "closedAt": null,
    "deadlines": [
      {
        "key": "health_reimbursement_settle",
        "label": "Insurer to settle",
        "rule": "Within 15 days of the claim being submitted",
        "startsOn": "2026-10-22",
        "dueOn": "2026-11-06",
        "daysLeft": 11,
        "state": "running",
        "interestDue": false
      }
    ],
    "createdAt": "2026-10-21T08:15:00.000Z",
    "updatedAt": "2026-10-22T10:02:00.000Z"
  }
}
PATCH/claims/{id}

Update a claim

Send only the fields you want to change. Changing status adds an entry to the claim's timeline, and settled or closed stamp their dates automatically. The deadline clocks are recalculated from the dates you send.

Needs scope: claim:update.

Path parameters

NameDescription
idThe claim id.

Request body

FieldTypeDescription
claimNumberstring or null
intimatedAtstring or null
submittedAtstring or null
surveyReportAtstring or null
underInvestigationboolean
amountClaimednumber or null
amountApprovednumber or null
amountSettlednumber or null
rejectionReasonstring or null
providerNamestring or null
handlerNamestring or null
handlerContactstring or null
descriptionstring or null
nextFollowUpAtstring or null
status"reported" | "documents_pending" | "submitted" | "under_review" | "query_raised" | "approved" | "settled" | "rejected" | "escalated" | "closed"
statusNotestring
incidentDatestring

Example request

curl -X PATCH "https://app.polisync.in/api/public/v1/claims/cmv1a2b3c0006xyzclaim" \
  -H "Authorization: Bearer $POLISYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "status": "approved",
  "amountApproved": 80000,
  "statusNote": "TPA approved the claim"
}'

Response 200

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0006xyzclaim",
    "policyId": "cmv1a2b3c0003xyzpolicy",
    "customerId": "cmv1a2b3c0001xyzcustomer",
    "agencyId": "cmv1a2b3c0002xyzagency",
    "claimType": "health_reimbursement",
    "claimTypeLabel": "Health: reimbursement",
    "status": "submitted",
    "claimNumber": "CLM-884213",
    "incidentDate": "2026-10-20",
    "intimatedAt": "2026-10-21",
    "submittedAt": "2026-10-22",
    "surveyReportAt": null,
    "underInvestigation": false,
    "amountClaimed": 85000,
    "amountApproved": null,
    "amountSettled": null,
    "settledAt": null,
    "rejectionReason": null,
    "providerName": "City Hospital",
    "handlerName": null,
    "handlerContact": null,
    "description": "Hospitalised for 3 days",
    "nextFollowUpAt": "2026-10-30",
    "closedAt": null,
    "deadlines": [
      {
        "key": "health_reimbursement_settle",
        "label": "Insurer to settle",
        "rule": "Within 15 days of the claim being submitted",
        "startsOn": "2026-10-22",
        "dueOn": "2026-11-06",
        "daysLeft": 11,
        "state": "running",
        "interestDue": false
      }
    ],
    "createdAt": "2026-10-21T08:15:00.000Z",
    "updatedAt": "2026-10-22T10:02:00.000Z"
  }
}
GET/claims/{id}/events

Get a claim's timeline

Status changes, edits, notes and calls, newest first (up to 200).

Needs scope: claim:read.

Path parameters

NameDescription
idThe claim id.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/claims/cmv1a2b3c0006xyzclaim/events" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": [
    {
      "id": "cmv1a2b3c0007xyzevent",
      "type": "status_change",
      "fromStatus": "reported",
      "toStatus": "submitted",
      "note": "Submitted to the TPA",
      "createdAt": "2026-10-22T10:02:00.000Z"
    }
  ]
}
POST/claims/{id}/events

Add a note to a claim

Adds a note, call log or follow-up to the timeline. You can set the next follow-up date in the same request.

Needs scope: claim:update. Accepts an Idempotency-Key header.

Path parameters

NameDescription
idThe claim id.

Request body

FieldTypeDescription
typerequired"note" | "call" | "follow_up"
noterequiredstring
nextFollowUpAtstring or null

Example request

curl -X POST "https://app.polisync.in/api/public/v1/claims/cmv1a2b3c0006xyzclaim/events" \
  -H "Authorization: Bearer $POLISYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: unique-request-id-123" \
  -d '{
  "type": "call",
  "note": "Spoke to the TPA. Payment expected this week.",
  "nextFollowUpAt": "2026-10-30"
}'

Response 201

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0007xyzevent",
    "type": "status_change",
    "fromStatus": "reported",
    "toStatus": "submitted",
    "note": "Submitted to the TPA",
    "createdAt": "2026-10-22T10:02:00.000Z"
  }
}

Agencies

Your agency codes and licences.

GET/agencies

List agencies

Needs scope: agency:read.

Query parameters

FieldTypeDescription
pageinteger
limitinteger
order"asc" | "desc"
updatedSincestring
sort"createdAt" | "updatedAt" | "name"Field to sort by.
status"active" | "inactive"Only agencies with this status.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/agencies" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": [
    {
      "id": "cmv1a2b3c0002xyzagency",
      "name": "Patel Insurance Services",
      "type": "non_corporate",
      "agentName": "Ramesh Patel",
      "agentCode": "AG-10442",
      "insurerId": null,
      "address": "Ring Road",
      "city": "Surat",
      "state": "Gujarat",
      "pin": "395002",
      "country": "IN",
      "status": "active",
      "createdAt": "2026-01-12T05:00:00.000Z",
      "updatedAt": "2026-01-12T05:00:00.000Z"
    }
  ],
  "pagination": {
    "total": 1,
    "page": 1,
    "limit": 20,
    "totalPages": 1
  }
}
GET/agencies/{id}

Get an agency

Needs scope: agency:read.

Path parameters

NameDescription
idThe agency id.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/agencies/cmv1a2b3c0002xyzagency" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": {
    "id": "cmv1a2b3c0002xyzagency",
    "name": "Patel Insurance Services",
    "type": "non_corporate",
    "agentName": "Ramesh Patel",
    "agentCode": "AG-10442",
    "insurerId": null,
    "address": "Ring Road",
    "city": "Surat",
    "state": "Gujarat",
    "pin": "395002",
    "country": "IN",
    "status": "active",
    "createdAt": "2026-01-12T05:00:00.000Z",
    "updatedAt": "2026-01-12T05:00:00.000Z"
  }
}

Insurers

The shared insurer directory.

GET/insurers

List insurers

The shared insurer directory. Use the id as insurerId when you create a policy. Any valid key can read it.

Needs scope: any valid key.

Example request

curl -X GET "https://app.polisync.in/api/public/v1/insurers" \
  -H "Authorization: Bearer $POLISYNC_API_KEY"

Response 200

application/json
{
  "success": true,
  "data": [
    {
      "id": "cmr23hrx5000nxemeinsurer",
      "name": "Star Health and Allied Insurance Co. Ltd.",
      "types": [
        "health"
      ],
      "website": "https://www.starhealth.in",
      "supportEmail": null,
      "carePhone": null,
      "status": "active"
    }
  ]
}

Objects

The records the API returns. Fields marked "or null" are always present and null when there is no value.

Customer

A customer (policyholder).

FieldTypeDescription
idrequiredstringPolisync id of the customer
namerequiredstring
typerequired"individual" | "company"
phonerequiredstringMobile number in +91 format
altPhonerequiredstring or null
emailrequiredstring or nullStored in lowercase
dateOfBirthrequiredstring or null
genderrequired"male" | "female" | "other" or null
addressrequiredstring or null
cityrequiredstring or null
staterequiredstring or null
pinrequiredstring or null
countryrequiredstring or nullISO country code, IN by default
panrequiredstring or nullPAN, masked as ABCDE****F unless the key has the full PAN scope
agencyIdrequiredstring or null
statusrequired"active" | "inactive"
consentGivenrequiredbooleanDPDP consent recorded for this customer
consentDaterequiredstring or null
createdAtrequiredstringISO 8601 timestamp, UTC
updatedAtrequiredstringISO 8601 timestamp, UTC
Customer example
{
  "id": "cmv1a2b3c0001xyzcustomer",
  "name": "Ramesh Patel",
  "type": "individual",
  "phone": "+919876543210",
  "altPhone": null,
  "email": "ramesh.patel@gmail.com",
  "dateOfBirth": "1985-03-14",
  "gender": "male",
  "address": "12 Shanti Nagar",
  "city": "Surat",
  "state": "Gujarat",
  "pin": "395007",
  "country": "IN",
  "pan": "ABCDE****F",
  "agencyId": "cmv1a2b3c0002xyzagency",
  "status": "active",
  "consentGiven": true,
  "consentDate": "2026-10-26T09:30:00.000Z",
  "createdAt": "2026-10-26T09:30:00.000Z",
  "updatedAt": "2026-10-26T09:30:00.000Z"
}

Policy

An insurance policy.

FieldTypeDescription
idrequiredstringPolisync id of the policy
policyNumberrequiredstringUnique within your workspace
insuranceTyperequired"life" | "health" | "motor" | "pa" | "wc" | "travel" | "other"
customerIdrequiredstring
agencyIdrequiredstring
insurerIdrequiredstringId from GET /insurers
insurerNamerequiredstring
planNamerequiredstring
premiumrequirednumberRupees
sumInsuredrequirednumberRupees
firstYearCommissionrequirednumber or nullRupees
startDaterequiredstringDate, YYYY-MM-DD
expiryDaterequiredstringExpiry date, or the next premium due date for a continuing life policy
paymentModerequired"monthly" | "quarterly" | "half_yearly" | "annual" | "single"
statusrequired"active" | "expired" | "cancelled"
notesrequiredstring or null
typeFieldsrequiredobject or nullExtra details that depend on the insurance type, such as vehicle number
nomineesarray of objectIncluded when you fetch one policy or write one; left out of lists
nominees[].idrequiredstringPolisync id of the nominee
nominees[].namerequiredstring
nominees[].dateOfBirthrequiredstring or null
nominees[].relationrequired"spouse" | "child" | "parent" | "sibling" | "other"
nominees[].sharePercentrequirednumberShare of the benefit. All nominees on a policy total 100.
nominees[].phonerequiredstring or null
createdAtrequiredstringISO 8601 timestamp, UTC
updatedAtrequiredstringISO 8601 timestamp, UTC
Policy example
{
  "id": "cmv1a2b3c0003xyzpolicy",
  "policyNumber": "HLT-2026-004512",
  "insuranceType": "health",
  "customerId": "cmv1a2b3c0001xyzcustomer",
  "agencyId": "cmv1a2b3c0002xyzagency",
  "insurerId": "cmr23hrx5000nxemeinsurer",
  "insurerName": "Star Health and Allied Insurance Co. Ltd.",
  "planName": "Family Health Optima",
  "premium": 18500,
  "sumInsured": 1000000,
  "firstYearCommission": 2775,
  "startDate": "2026-11-01",
  "expiryDate": "2027-10-31",
  "paymentMode": "annual",
  "status": "active",
  "notes": null,
  "typeFields": {},
  "nominees": [
    {
      "id": "cmv1a2b3c0004xyznominee",
      "name": "Sunita Patel",
      "dateOfBirth": "1988-07-02",
      "relation": "spouse",
      "sharePercent": 100,
      "phone": "+919876500001"
    }
  ],
  "createdAt": "2026-10-26T09:41:00.000Z",
  "updatedAt": "2026-10-26T09:41:00.000Z"
}

Nominee

A nominee on a policy.

FieldTypeDescription
idrequiredstringPolisync id of the nominee
namerequiredstring
dateOfBirthrequiredstring or null
relationrequired"spouse" | "child" | "parent" | "sibling" | "other"
sharePercentrequirednumberShare of the benefit. All nominees on a policy total 100.
phonerequiredstring or null
Nominee example
{
  "id": "cmv1a2b3c0004xyznominee",
  "name": "Sunita Patel",
  "dateOfBirth": "1988-07-02",
  "relation": "spouse",
  "sharePercent": 100,
  "phone": "+919876500001"
}

Renewal

One renewal or premium cycle of a policy.

FieldTypeDescription
idrequiredstringPolisync id of the renewal
policyIdrequiredstring
policyNumberrequiredstring
customerIdrequiredstring
insuranceTyperequired"life" | "health" | "motor" | "pa" | "wc" | "travel" | "other"
expiryDaterequiredstringThe due date of this cycle
daysLeftrequiredintegerDays until due, never below 0
statusrequired"active" | "renewed" | "lapsed"
stagerequired"upcoming" | "due_soon" | "in_grace" | "overdue" | "renewed_on_time" | "renewed_late" | "lapsed"Where the renewal stands, worked out from the dates and the grace period
moderequired"continuing" | "reissue"continuing is life (same policy, next premium), reissue is general insurance (a new policy each year)
graceDaysLeftrequiredinteger
renewedAtrequiredstring or null
renewedPolicyIdrequiredstring or nullFor reissued policies, the new policy
commissionEarnedrequirednumber or null
createdAtrequiredstringISO 8601 timestamp, UTC
updatedAtrequiredstringISO 8601 timestamp, UTC
Renewal example
{
  "id": "cmv1a2b3c0005xyzrenewal",
  "policyId": "cmv1a2b3c0003xyzpolicy",
  "policyNumber": "HLT-2026-004512",
  "customerId": "cmv1a2b3c0001xyzcustomer",
  "insuranceType": "health",
  "expiryDate": "2027-10-31",
  "daysLeft": 370,
  "status": "active",
  "stage": "upcoming",
  "mode": "reissue",
  "graceDaysLeft": 30,
  "renewedAt": null,
  "renewedPolicyId": null,
  "commissionEarned": null,
  "createdAt": "2026-10-26T09:41:00.000Z",
  "updatedAt": "2026-10-26T09:41:00.000Z"
}

Claim

A claim being tracked.

FieldTypeDescription
idrequiredstringPolisync id of the claim
policyIdrequiredstring
customerIdrequiredstring
agencyIdrequiredstring
claimTyperequired"health_cashless" | "health_reimbursement" | "life_death" | "life_maturity" | "motor_own_damage" | "motor_third_party" | "motor_theft" | "other"
claimTypeLabelrequiredstring
statusrequired"reported" | "documents_pending" | "submitted" | "under_review" | "query_raised" | "approved" | "settled" | "rejected" | "escalated" | "closed"
claimNumberrequiredstring or nullThe insurer's claim number
incidentDaterequiredstringDate, YYYY-MM-DD
intimatedAtrequiredstring or nullWhen the insurer was told
submittedAtrequiredstring or nullWhen the documents were submitted
surveyReportAtrequiredstring or null
underInvestigationrequiredboolean
amountClaimedrequirednumber or null
amountApprovedrequirednumber or null
amountSettledrequirednumber or null
settledAtrequiredstring or null
rejectionReasonrequiredstring or null
providerNamerequiredstring or nullHospital or garage
handlerNamerequiredstring or nullTPA, surveyor or insurer officer
handlerContactrequiredstring or null
descriptionrequiredstring or null
nextFollowUpAtrequiredstring or null
closedAtrequiredstring or null
deadlinesrequiredarray of object
deadlines[].keyrequiredstring
deadlines[].labelrequiredstring
deadlines[].rulerequiredstringThe IRDAI timeline in words
deadlines[].startsOnrequiredstring or nullThe date the clock starts from; null until you enter it
deadlines[].dueOnrequiredstring or null
deadlines[].daysLeftrequiredinteger or nullNegative once overdue
deadlines[].staterequired"waiting" | "running" | "due_soon" | "overdue" | "stopped"
deadlines[].interestDuerequiredbooleanTrue once overdue: interest at the bank rate plus 2% is payable
createdAtrequiredstringISO 8601 timestamp, UTC
updatedAtrequiredstringISO 8601 timestamp, UTC
Claim example
{
  "id": "cmv1a2b3c0006xyzclaim",
  "policyId": "cmv1a2b3c0003xyzpolicy",
  "customerId": "cmv1a2b3c0001xyzcustomer",
  "agencyId": "cmv1a2b3c0002xyzagency",
  "claimType": "health_reimbursement",
  "claimTypeLabel": "Health: reimbursement",
  "status": "submitted",
  "claimNumber": "CLM-884213",
  "incidentDate": "2026-10-20",
  "intimatedAt": "2026-10-21",
  "submittedAt": "2026-10-22",
  "surveyReportAt": null,
  "underInvestigation": false,
  "amountClaimed": 85000,
  "amountApproved": null,
  "amountSettled": null,
  "settledAt": null,
  "rejectionReason": null,
  "providerName": "City Hospital",
  "handlerName": null,
  "handlerContact": null,
  "description": "Hospitalised for 3 days",
  "nextFollowUpAt": "2026-10-30",
  "closedAt": null,
  "deadlines": [
    {
      "key": "health_reimbursement_settle",
      "label": "Insurer to settle",
      "rule": "Within 15 days of the claim being submitted",
      "startsOn": "2026-10-22",
      "dueOn": "2026-11-06",
      "daysLeft": 11,
      "state": "running",
      "interestDue": false
    }
  ],
  "createdAt": "2026-10-21T08:15:00.000Z",
  "updatedAt": "2026-10-22T10:02:00.000Z"
}

Deadline

An insurer deadline worked out from the claim's dates.

FieldTypeDescription
keyrequiredstring
labelrequiredstring
rulerequiredstringThe IRDAI timeline in words
startsOnrequiredstring or nullThe date the clock starts from; null until you enter it
dueOnrequiredstring or null
daysLeftrequiredinteger or nullNegative once overdue
staterequired"waiting" | "running" | "due_soon" | "overdue" | "stopped"
interestDuerequiredbooleanTrue once overdue: interest at the bank rate plus 2% is payable
Deadline example
{
  "key": "health_reimbursement_settle",
  "label": "Insurer to settle",
  "rule": "Within 15 days of the claim being submitted",
  "startsOn": "2026-10-22",
  "dueOn": "2026-11-06",
  "daysLeft": 11,
  "state": "running",
  "interestDue": false
}

ClaimEvent

One entry in a claim's timeline.

FieldTypeDescription
idrequiredstringPolisync id of the timeline entry
typerequired"created" | "status_change" | "note" | "call" | "follow_up" | "document_added" | "document_removed" | "field_update"
fromStatusrequiredstring or null
toStatusrequiredstring or null
noterequiredstring or null
createdAtrequiredstringISO 8601 timestamp, UTC
ClaimEvent example
{
  "id": "cmv1a2b3c0007xyzevent",
  "type": "status_change",
  "fromStatus": "reported",
  "toStatus": "submitted",
  "note": "Submitted to the TPA",
  "createdAt": "2026-10-22T10:02:00.000Z"
}

Agency

An agency: the licence or code you sell under.

FieldTypeDescription
idrequiredstringPolisync id of the agency
namerequiredstring
typerequired"corporate" | "non_corporate"
agentNamerequiredstring
agentCoderequiredstring or null
insurerIdrequiredstring or null
addressrequiredstring or null
cityrequiredstring or null
staterequiredstring or null
pinrequiredstring or null
countryrequiredstring or null
statusrequired"active" | "inactive"
createdAtrequiredstringISO 8601 timestamp, UTC
updatedAtrequiredstringISO 8601 timestamp, UTC
Agency example
{
  "id": "cmv1a2b3c0002xyzagency",
  "name": "Patel Insurance Services",
  "type": "non_corporate",
  "agentName": "Ramesh Patel",
  "agentCode": "AG-10442",
  "insurerId": null,
  "address": "Ring Road",
  "city": "Surat",
  "state": "Gujarat",
  "pin": "395002",
  "country": "IN",
  "status": "active",
  "createdAt": "2026-01-12T05:00:00.000Z",
  "updatedAt": "2026-01-12T05:00:00.000Z"
}

Insurer

An insurer from the shared Polisync directory.

FieldTypeDescription
idrequiredstringPolisync id of the insurer
namerequiredstring
typesrequiredarray of stringInsurance types the insurer offers
websiterequiredstring or null
supportEmailrequiredstring or null
carePhonerequiredstring or null
statusrequiredstring
Insurer example
{
  "id": "cmr23hrx5000nxemeinsurer",
  "name": "Star Health and Allied Insurance Co. Ltd.",
  "types": [
    "health"
  ],
  "website": "https://www.starhealth.in",
  "supportEmail": null,
  "carePhone": null,
  "status": "active"
}