Insurance Cloud Insurance CloudOpen API
v1.0Active
Partner developer platform

Insurance Cloud Open API

Build secure, reliable insurance integrations with a clear and versioned API.

Active
Current versionv1.0
Version date27 July 2026
Introduction

About the API #

The Insurance Cloud Open API enables approved partners and external applications to securely connect with the Insurance Cloud platform. It provides standardized access to selected Insurance Cloud services, allowing partners to build reliable integrations and automate insurance workflows.

The API documentation will be released progressively. Each release will introduce additional endpoints and capabilities.

Keep your API credentials secure

API credentials are confidential. Never expose your Insurance Cloud key or passkey in browser-side code, public repositories, screenshots, or application logs.

!
Use HTTPS for every API request

Always send API requests over HTTPS. Unencrypted HTTP can expose credentials, access tokens, customer information, policy data, and payment details in transit.

Environment

Base URL #

The base URL includes the /api prefix. The link is the same account link used to access your Insurance Cloud system.

HTTPShttps://demo.inscloud.net/api
{{base_url}}https://demo.inscloud.net/api
Lifecycle

Versioning #

This documentation describes v1.0, released on 27 July 2026. Future versions and releases will be identified clearly so integrations can adopt new capabilities predictably.

Security

Authentication #

Authenticate with your approved integration credentials to receive an access token. Send that token with subsequent protected requests using the Bearer authorization scheme.

AuthorizationBearer your_access_token
Authentication
POST

Authenticate #

{{base_url}}/auth

Authenticates an approved integration using its Insurance Cloud key and passkey. If the credentials are valid, the endpoint returns an access token that should authorize subsequent API requests.

1
Get your integration credentials

In Insurance Cloud, go to API → API Keys. Copy your Insurance Cloud key and passkey, then store them in secure server-side environment configuration or a secrets manager.

Headers

HeaderValueRequired
Acceptapplication/jsonYes
Content-Typeapplication/jsonYes

Request body

FieldTypeDescription
inscloudkeystring · requiredYour approved Insurance Cloud key.
passkeystring · requiredThe passkey associated with the key.

Examples

Request · JSON
{
  "inscloudkey": "your_inscloud_key",
  "passkey": "your_passkey"
}
200 · Success
{
  "token": "1|your_access_token"
}

Responses

200
Authenticated

Credentials are valid and an access token is returned.

401
Unauthorized

The supplied key or passkey is invalid.

422
Validation error

A required credential field was not supplied.

Messaging

SMS #

Send one or more SMS messages, review sent-message history, and check the available SMS-unit balance. All SMS endpoints are protected and require an access token from the authentication endpoint.

AuthorizationBearer your_access_token
SMS
POST

Send SMS #

{{base_url}}/sms/send

Sends one or more SMS messages in a single request. Each result is reported separately, making partial delivery failures easy to identify.

Headers

HeaderValueRequired
AuthorizationBearer your_access_tokenYes
Acceptapplication/jsonYes
Content-Typeapplication/jsonYes

Request body

FieldTypeDescription
smsarray · requiredAt least one message object.
sms[].phonestring · requiredRecipient phone number, up to 20 characters.
sms[].messagestring · requiredMessage content.
sms[].policy_idinteger · optionalRelated policy ID. Must be at least 1 when supplied.
sms[].transactionstring · optionalMessage-specific transaction label, up to 255 characters.
transactionstring · optionalDefault label for all messages. Defaults to API SMS.

Examples

Request · JSON
{
  "transaction": "Policy notification",
  "sms": [
    {
      "phone": "254718888888",
      "message": "Your policy is ready.",
      "policy_id": 125
    }
  ]
}
200 · Success
{
  "status": "success",
  "message": "1 SMS sent, 0 failed.",
  "summary": {"total": 1, "sent": 1, "failed": 0},
  "results": [
    {
      "index": 0,
      "phone": "254718888888",
      "message": "Your policy is ready.",
      "policy_id": 125,
      "transaction": "Policy notification",
      "sent": true,
      "error": null
    }
  ]
}

Responses

200
All messages sent

Every SMS in the request was accepted successfully.

207
Partial or failed delivery

One or more messages failed. Inspect each item’s sent and error values.

422
Validation error

The payload is missing a required field or contains an invalid value.

SMS
GET

Sent messages #

{{base_url}}/sms/sent

Returns sent SMS records in reverse chronological order, with date filtering and pagination.

Headers

HeaderValueRequired
AuthorizationBearer your_access_tokenYes
Acceptapplication/jsonYes

Query parameters

ParameterTypeDescription
fromdate · optionalStart date. Defaults to the first day of the current month.
todate · optionalEnd date. Defaults to today and cannot be before from.
pageinteger · optionalPage number. Defaults to 1.
per_pageinteger · optionalRecords per page, from 1 to 100. Defaults to 50.

Examples

200 · Success
{
  "status": "success",
  "filters": {"from": "2026-07-01", "to": "2026-07-27"},
  "summary": {
    "total": 1,
    "per_page": 20,
    "current_page": 1,
    "last_page": 1
  },
  "sms": [
    {
      "id": 42,
      "phone": "254718888888",
      "message": "Your policy is ready.",
      "policy_id": 125,
      "transaction": "Policy notification",
      "added_by": 7,
      "created_at": "2026-07-27T08:30:00.000000Z",
      "updated_at": "2026-07-27T08:30:00.000000Z"
    }
  ]
}

Responses

200
Sent-message history

Returns the applied filters, pagination summary, and records in the sms array.

422
Validation error

A date or pagination value is invalid.

SMS
GET

SMS balance #

{{base_url}}/sms/balance

Returns the current SMS-unit balance available to the authenticated integration.

Headers

HeaderValueRequired
AuthorizationBearer your_access_tokenYes
Acceptapplication/jsonYes

Examples

200 · Success
{
  "status": "success",
  "balance": 125
}

Responses

200
Balance returned

The balance field contains the available SMS units.

Payments

M-Pesa Payments #

Initiate an M-Pesa STK Push prompt on a customer’s phone for an account or transaction reference.

AuthorizationBearer your_access_token
1
Configure M-Pesa before using this endpoint

In the Insurance Cloud side menu, go to APIs → M-Pesa. Configure the Consumer Key, Consumer Secret, Short Code, and Passkey, then register the callback URL where required.

M-Pesa Payments
POST

Initiate STK Push #

{{base_url}}/payment/stk/push

Sends an M-Pesa payment prompt to the supplied phone number and records the Safaricom checkout request for callback processing.

Headers

HeaderValueRequired
AuthorizationBearer your_access_tokenYes
Acceptapplication/jsonYes
Content-Typeapplication/jsonYes

Request body

FieldTypeDescription
accountstring · requiredAccount, invoice, risknote, or transaction reference shown in the M-Pesa prompt.
amountnumber · requiredAmount to request. Formatting characters are removed before submission.
phonestring · requiredKenyan phone number in 07XXXXXXXX or 2547XXXXXXXX format.

Examples

Request · JSON
{
  "account": "POL-2026-001",
  "amount": 52736,
  "phone": "0718888888"
}
200 · Request accepted
{
  "merchant_request_id": "29115-34620561-1",
  "checkout_request_id": "ws_CO_280720261230001234"
}

Responses

200
Payment prompt initiated

Returns Safaricom merchant and checkout request IDs. The final payment result is delivered asynchronously to the configured callback.

400
Request failed

Returned for insecure traffic, missing M-Pesa configuration, an invalid phone number, authentication failure, or an STK Push rejection.

Motor certificates

DMVIC motor certificates #

Issue and retrieve DMVIC motor certificates, validate possible double insurance, and inspect an insurer’s DMVIC certificate stock. All endpoints require a valid Insurance Cloud Bearer token.

AuthorizationBearer your_access_token
DMVIC
POST

Issue certificate #

{{base_url}}/dmvic

Issues DMVIC certificates for one or more vehicles linked to the policy identified by the risknote.

Request body

FieldTypeDescription
risknoteinteger · requiredAn existing risknote linked to a valid policy.
emailemail · requiredPolicyholder contact email.
phonestring · requiredPolicyholder phone number containing 9–15 digits.
vehiclesarray · requiredAt least one vehicle.
vehicles[].registrationstring · requiredAn existing vehicle registration attached to the risknote’s policy.
vehicles[].start_datedate · requiredToday or later, within the policy period and not after expiry.
vehicles[].expiringdate · requiredOn or after the start date and not beyond the policy end date.

Examples

Request · JSON
{
  "risknote": 100245,
  "email": "client@example.com",
  "phone": "254718888888",
  "vehicles": [{
    "registration": "KDA 123A",
    "start_date": "2026-07-27",
    "expiring": "2027-07-26"
  }]
}

Responses

200
Certificate issued

Returns success: true after successful issuance.

422
Validation or policy error

The risknote, vehicle association, dates, policy, or DMVIC setup is invalid.

DMVIC
POST

Agent certificate issuance #

{{base_url}}/dmvic/agent

Issues the next eligible certificate stage for an agent-owned policy. Insurance Cloud calculates the certificate period from the policy, instalments, receipts, and certificates already issued.

Additional headers

HeaderValueRequired
X-Agent-Codeyour_agent_codeYes
X-Agent-Keyyour_agent_keyYes

Request body

FieldTypeDescription
policy_idinteger · requiredPolicy belonging to the authenticated agent.
i
Eligibility checks

The policy must have a risknote, vehicle, premium details, a valid remaining certificate period, and sufficient receipts for the current instalment stage.

Responses

200
Certificate issued

The eligible DMVIC certificate stage was issued.

403
Policy access denied

The policy does not belong to the supplied agent.

422
Not eligible

Credentials, policy setup, payment, instalment stage, or certificate period failed validation.

DMVIC
POST

Get certificate #

{{base_url}}/dmvic/get-certificate

Retrieves a previously issued certificate using its DMVIC certificate number.

Request body

FieldTypeDescription
CertificateNumberstring · requiredThe exact DMVIC certificate number.
Binary response

A successful request returns the certificate body using DMVIC’s response content type. Save the response as a file; do not parse it as JSON.

Responses

200
Certificate file

Returns a binary certificate response.

422
Validation error

CertificateNumber was not supplied.

502
DMVIC authentication error

The upstream service did not return an access token.

DMVIC
POST

Validate double insurance #

{{base_url}}/dmvic/double-insurance

Checks whether a vehicle has overlapping insurance for the requested cover period.

Request body

FieldTypeDescription
registrationstring · requiredVehicle registration number.
chassisstring · optionalVehicle chassis number. Registration is used as fallback.
start_datedate · requiredToday or later and not after expiring.
expiringdate · requiredOn or after start_date.

Responses

200
Validation completed

Returns overlapping certificate details when found, or No double insurance found.

422
Validation error

A vehicle or date field is invalid.

DMVIC
POST

Member company stock #

{{base_url}}/dmvic/stock

Returns DMVIC certificate stock information for a configured insurer member company.

Request body

FieldTypeDescription
insurerstring · requiredThe insurer’s configured DMVIC member company ID.

Responses

200
Stock returned

The DMVIC response is returned inside the data array.

422
Unknown insurer

The value does not match a configured insurer DMVIC ID.

Quotations

Reference Data #

Load the IDs and allowed values required by quotation and policy-creation requests. These endpoints supply insurers, branches, risk managers, salespeople, policy taxes, and Motor benefits for use with /motor/save, /standard/save, /medical/save, and /travel/save.

AuthorizationBearer your_access_token
Reference Data
GET

Insurers #

{{base_url}}/insurers

Returns insurer IDs, short and legal names, and a logo URL when available. Use ?search=term to filter by name.

200
Insurers returned

Use data[].id as policy.insurer_id.

Reference Data
GET

Branches #

{{base_url}}/branches

Returns branch IDs, codes, locations, and cities. Use data[].id as client.branch_id.

200
Branches returned
Reference Data
GET

Risk managers #

{{base_url}}/risk-managers

Returns active risk-manager user IDs, names, and email addresses. Use data[].id as client.risk_manager_id.

200
Risk managers returned
Reference Data
GET

Sales people #

{{base_url}}/sales-people

Returns salesperson IDs, names, codes, and branch IDs. Use data[].id as client.sales_person_id when applicable.

200
Salespeople returned
Reference Data
GET

Policy taxes #

{{base_url}}/policy/taxes

Returns configured policy-tax IDs and names. Use data[].id as taxes[].tax_id.

200
Policy taxes returned
Reference Data
GET

Motor benefits #

{{base_url}}/motor/benefits

Returns Motor benefit IDs and names. Use data[].id as vehicles[].benefits[].benefit_id.

200
Motor benefits returned
429
Rate limited

Maximum ten requests per minute per IP.

Underwriting

Quotations and underwriting #

Generate insurer options and convert a selected option into a Motor, Medical, Standard, or Travel policy. Quote endpoints calculate options; /save_quote stores a quotation; product /save endpoints create policies.

Motor
POST

Generate motor quote #

{{base_url}}/motor/quote

Returns matching insurer rates, benefits, taxes, markup, instalments, and limits of liability.

FieldTypeDescription
classstring · requiredMotor, Tuktuk, or Motorcycle.
coveragestring · requiredUsage class such as Private, a specific Commercial class, or a specific PSV class.
scopestring · requiredComprehensive or TPO.
cover_periodstring · requiredannual or tor; defaults to annual.
year, value, tonnage, pllnumber · conditionalRequired when the selected rate or benefit calculation uses the value.
insurer_idinteger[] · optionalRestrict results to one or more insurers.

Responses

200
Options returned

Matching plans are returned in options.

422
Invalid criteria or no rate

Review the validation errors or returned quote criteria.

Motor
POST

Save motor quotation #

{{base_url}}/motor/save_quote

Stores the customer, vehicle, and one or more calculated insurer options as a quotation. This does not create a policy.

ObjectRequired contentDescription
clientname, email, phone, idnoOptional agentcode links the quotation to an agent.
vehiclevalue, year, reg_noAlso accepts coverage, scope, subcover, tonnage, make, and model.
quotes[]insurer_id, rate, basic, taxes, totalCalculated options; benefits may contain benefit_name and amount.
200
Quotation saved

Returns the saved quotation details and options.

422
Validation or persistence error
Motor
POST

Create motor policy #

{{base_url}}/motor/save

Creates the client and motor policy from the selected quote option, including vehicles, taxes, and selected benefits.

ObjectRequired contentDescription
clientname, email, phone, idno, risk_manager_id, branch_idOptional PIN and sales person.
policydates, insurer_id, class, coverage, scope, total_basic, taxes, premium, premium_instalmentsInstalments must be 1–4.
vehicles[]coverage, regno, value, basic_premium, rateMake and model are required for Comprehensive cover.
taxes[]tax_id, rate, amountEach tax must exist in policy-tax setup.
200
Policy created

Returns policy ID, risknote, client number, and client key.

429
Rate limited

Maximum three attempts per 15 seconds per IP.

Medical
GET

Medical limits #

{{base_url}}/medical/limits

Returns the unique configured inpatient limits in ascending order. Limited to ten requests per minute per IP.

200
Limits returned

Returns an array of id and limit objects.

Medical
POST

Generate medical quote #

{{base_url}}/medical/quote

Calculates available medical plans using principal age, spouse age, number of children, and inpatient limit.

FieldTypeDescription
principal_agenumber · requiredPrincipal member’s age.
spouse_agenumber · requiredUse 0 when no spouse is included.
childrennumber · requiredNumber of children.
limit_from, limit_tonumber · requiredRequested inpatient limit range.

Responses

200
Medical options returned

Returns matching insurer plans and benefit options in options.

422
Validation error

One or more required ages, child count, or limit values are invalid.

Medical
POST

Create medical policy #

{{base_url}}/medical/save

Creates a medical policy for a client and family members using the selected insurer plan.

ObjectRequired contentDescription
clientname, email, phone, idno, risk_manager_id, branch_idCustomer details.
members[]name, type, dob, product_namePrincipal, spouse, and child records.
policydates, insurer_id, inpatient_limit, basic, taxes, premiumSelected plan and premium totals.
taxes[]tax_id, rate, amountApplied policy taxes.
200
Policy created

Returns policy ID, risknote, client number, and key.

Standard
GET

Standard products #

{{base_url}}/standard/products

Lists supported standard product IDs and names.

200
Products returned

Returns products currently configured for IDs 20, 27, 29, 35, and 49.

Standard
GET

Generate standard quote #

{{base_url}}/standard/quote

Returns insurer options, premiums, benefits, logo URLs, and brochures for a standard product.

Query parameterTypeDescription
product_idinteger · requiredProduct returned by /standard/products.
insurer_idinteger[] · optionalLimit options to selected insurers.
ageinteger · optionalNon-negative age used to select an age-band premium.
200
Options returned
Standard
POST

Create standard policy #

{{base_url}}/standard/save

Creates a policy for a supported standard product with its taxes and optional benefit schedule.

ObjectRequired contentDescription
clientname, email, phone, idno, risk_manager_id, branch_idCustomer details.
policyproduct_id, dates, insurer_id, coverName, basicPremium, sumInsured, taxes, premiumProduct ID must be supported.
taxes[], benefits[]arraysTaxes and optional schedule items.
200
Policy created
Travel
POST

Generate travel quote #

{{base_url}}/travel/quote

Returns matching insurer plans based on destination, dates, rate type, and traveller count.

FieldTypeDescription
rate_typestring · requiredConfigured normal, student, or inbound rate type.
traveling_from, traveling_tostring · requiredOrigin and destination country.
number_of_travelersinteger · requiredAt least 1.
departure_date, return_datedate · requiredReturn cannot be before departure.
200
Travel options returned
Travel
POST

Create travel policy #

{{base_url}}/travel/save

Creates a travel policy for the selected quote and stores each traveller and beneficiary record.

ObjectRequired contentDescription
clientname, email, phone, idno, risk_manager_id, branch_idCustomer details.
policydates, insurer_id, basicPremium, taxes, premium, sumInsured, coverNameOptional quoteId links the source quote.
travel_infodeparture, return, travelling_from, travelling_to, trip_typeJourney information.
travellers[]nameDOB and identity, contact, passport, and beneficiary fields are supported.
200
Policy created

Returns risknote, client number, and client key.

CRM

Prospects #

Create a prospect (lead) in the CRM, with an optional product breakdown and assignee list. This mirrors the "Add Prospect" form in Insurance Cloud.

AuthorizationBearer your_access_token
Prospects
POST

Create prospect #

{{base_url}}/prospects

Creates a single prospect. Only p_name and status are required — everything else is optional.

Headers

HeaderValueRequired
AuthorizationBearer your_access_tokenYes
Acceptapplication/jsonYes
Content-Typeapplication/jsonYes

Request body

FieldTypeDescription
p_namestring · requiredProspect name.
statusstring · requiredProspect status label.
emailstring · optionalProspect email address.
phonestring · optionalProspect phone number, up to 50 characters.
sectorstring · optionalBusiness sector / nature of occupation.
insurer_idinteger · optionalPreferred insurer ID.
alt_namestring · optionalAlternative contact name.
alt_phonestring · optionalAlternative contact phone.
alt_emailstring · optionalAlternative contact email.
start_datedate · optionalExpected cover start date.
due_datedate · optionalExpected close date.
follow_up_datedate · optionalNext follow-up date.
notesstring · optionalFree-text notes.
ratingstring · optionalProspect rating/priority label.
business_source_idinteger · optionalBusiness source ID.
prospect_type_idinteger · optionalClient category / type ID.
productsarray · optionalProduct breakdown rows.
products[].productstring · required with productsProduct name.
products[].product_idinteger · optionalProduct ID, when known.
products[].comm_ratenumeric · optionalCommission rate.
products[].premiumnumeric · optionalExpected premium for this product.
products[].commissionnumeric · optionalExpected commission for this product.
assign_toarray of integers · optionalUser IDs to assign the prospect to.

Examples

Request · JSON
{
  "p_name": "Jane Doe",
  "status": "New",
  "email": "jane@example.com",
  "phone": "254718888888",
  "sector": "Retail",
  "products": [
    {
      "product": "Motor Comprehensive",
      "comm_rate": 10,
      "premium": 50000,
      "commission": 5000
    }
  ],
  "assign_to": [7]
}
201 · Created
{
  "status": "success",
  "message": "Prospect created successfully.",
  "prospect": {
    "id": 154,
    "p_name": "Jane Doe",
    "status": "New",
    "expected_prem": 50000,
    "expected_comm": 5000,
    "created_at": "2026-08-28T09:12:00+00:00"
  }
}

Responses

201
Prospect created

Returns the new prospect's ID and key fields.

422
Validation error

A required field is missing or a value is invalid.

500
Server error

The prospect could not be created. Nothing was saved.

ERP data access

ERP Records #

Retrieve paginated client, policy, and claim records available to the authenticated ERP account.

AuthorizationBearer your_access_token
i
Record visibility

ERP employees can access all records. Salespeople see their assigned records. Agents see records associated through client-agent or agent-production relationships. Access is always determined by the authenticated account.

ERP Records
GET

List clients #

{{base_url}}/erp/clients

Returns clients visible to the authenticated ERP employee, salesperson, or agent, ordered by client name.

Query parameters

ParameterTypeDescription
pageinteger · optionalPage number. Defaults to 1.
per_pageinteger · optionalRecords per page, from 1 to 100. Defaults to 15.

Response data

Each client includes contact and identity details, address information, the assigned salesperson, and associated agents. Pagination is returned in meta and links.

200
Clients returned
422
Invalid pagination
429
Rate limited

Maximum five requests per minute.

ERP Records
GET

List policies #

{{base_url}}/erp/policies

Returns policies visible to the authenticated account, ordered by most recent start date.

Query parameters

ParameterTypeDescription
statusinteger · required0 or 1 filters by status; 2 returns all statuses.
startingdate · optionalPolicy start-date range beginning.
endingdate · optionalRange end, on or after starting. Date filtering applies when both dates are supplied.
pageinteger · optionalPage number. Defaults to 1.
per_pageinteger · optionalRecords per page, from 1 to 100. Defaults to 15.

Response data

Policy records include insurer, client, product, cover dates, risknote, premium, receipts, balance, salesperson, and agents.

200
Policies returned
422
Invalid filters
429
Rate limited

Maximum five requests per minute.

ERP Records
GET

List claims #

{{base_url}}/erp/claims

Returns claims for policies visible to the authenticated account, ordered by most recent incident date.

Query parameters

ParameterTypeDescription
startingdate · optionalReported-date range beginning.
endingdate · optionalReported-date range end. Supply both dates to filter.
typestring · optionalLegal or Non Legal.
pageinteger · optionalPage number. Defaults to 1.
per_pageinteger · optionalRecords per page, from 1 to 100. Defaults to 20.

Response data

Claim records include policy and insurer references, incident and reporting dates, status and progress, client, claimant, amounts, salesperson, and agents.

200
Claims returned
422
Invalid filters
429
Rate limited

Maximum five requests per minute.

Roadmap

More capabilities are coming

Additional endpoint groups and workflows will appear here as they are released.