Insurance Cloud Open API
Build secure, reliable insurance integrations with a clear and versioned API.
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.
API credentials are confidential. Never expose your Insurance Cloud key or passkey in browser-side code, public repositories, screenshots, or application logs.
Always send API requests over HTTPS. Unencrypted HTTP can expose credentials, access tokens, customer information, policy data, and payment details in transit.
Base URL #
The base URL includes the /api prefix. The link is the same account link used to access your Insurance Cloud system.
https://demo.inscloud.net/apihttps://demo.inscloud.net/apiVersioning #
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.
Authentication #
Authenticate with your approved integration credentials to receive an access token. Send that token with subsequent protected requests using the Bearer authorization scheme.
Bearer your_access_tokenAuthenticate #
{{base_url}}/authAuthenticates 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.
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
Acceptapplication/jsonYesContent-Typeapplication/jsonYesRequest body
inscloudkeystring · requiredYour approved Insurance Cloud key.passkeystring · requiredThe passkey associated with the key.Examples
{
"inscloudkey": "your_inscloud_key",
"passkey": "your_passkey"
}
{
"token": "1|your_access_token"
}
Responses
Credentials are valid and an access token is returned.
The supplied key or passkey is invalid.
A required credential field was not supplied.
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.
Bearer your_access_tokenSend SMS #
{{base_url}}/sms/sendSends one or more SMS messages in a single request. Each result is reported separately, making partial delivery failures easy to identify.
Headers
AuthorizationBearer your_access_tokenYesAcceptapplication/jsonYesContent-Typeapplication/jsonYesRequest body
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
{
"transaction": "Policy notification",
"sms": [
{
"phone": "254718888888",
"message": "Your policy is ready.",
"policy_id": 125
}
]
}
{
"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
Every SMS in the request was accepted successfully.
One or more messages failed. Inspect each item’s sent and error values.
The payload is missing a required field or contains an invalid value.
Sent messages #
{{base_url}}/sms/sentReturns sent SMS records in reverse chronological order, with date filtering and pagination.
Headers
AuthorizationBearer your_access_tokenYesAcceptapplication/jsonYesQuery parameters
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
{
"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
Returns the applied filters, pagination summary, and records in the sms array.
A date or pagination value is invalid.
SMS balance #
{{base_url}}/sms/balanceReturns the current SMS-unit balance available to the authenticated integration.
Headers
AuthorizationBearer your_access_tokenYesAcceptapplication/jsonYesExamples
{
"status": "success",
"balance": 125
}
Responses
The balance field contains the available SMS units.
M-Pesa Payments #
Initiate an M-Pesa STK Push prompt on a customer’s phone for an account or transaction reference.
Bearer your_access_tokenIn 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.
Initiate STK Push #
{{base_url}}/payment/stk/pushSends an M-Pesa payment prompt to the supplied phone number and records the Safaricom checkout request for callback processing.
Headers
AuthorizationBearer your_access_tokenYesAcceptapplication/jsonYesContent-Typeapplication/jsonYesRequest body
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
{
"account": "POL-2026-001",
"amount": 52736,
"phone": "0718888888"
}
{
"merchant_request_id": "29115-34620561-1",
"checkout_request_id": "ws_CO_280720261230001234"
}
Responses
Returns Safaricom merchant and checkout request IDs. The final payment result is delivered asynchronously to the configured callback.
Returned for insecure traffic, missing M-Pesa configuration, an invalid phone number, authentication failure, or an STK Push rejection.
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.
Bearer your_access_tokenIssue certificate #
{{base_url}}/dmvicIssues DMVIC certificates for one or more vehicles linked to the policy identified by the risknote.
Request body
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
{
"risknote": 100245,
"email": "client@example.com",
"phone": "254718888888",
"vehicles": [{
"registration": "KDA 123A",
"start_date": "2026-07-27",
"expiring": "2027-07-26"
}]
}
Responses
Returns success: true after successful issuance.
The risknote, vehicle association, dates, policy, or DMVIC setup is invalid.
Agent certificate issuance #
{{base_url}}/dmvic/agentIssues 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
X-Agent-Codeyour_agent_codeYesX-Agent-Keyyour_agent_keyYesRequest body
policy_idinteger · requiredPolicy belonging to the authenticated agent.The policy must have a risknote, vehicle, premium details, a valid remaining certificate period, and sufficient receipts for the current instalment stage.
Responses
The eligible DMVIC certificate stage was issued.
The policy does not belong to the supplied agent.
Credentials, policy setup, payment, instalment stage, or certificate period failed validation.
Get certificate #
{{base_url}}/dmvic/get-certificateRetrieves a previously issued certificate using its DMVIC certificate number.
Request body
CertificateNumberstring · requiredThe exact DMVIC certificate number.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
Returns a binary certificate response.
CertificateNumber was not supplied.
The upstream service did not return an access token.
Validate double insurance #
{{base_url}}/dmvic/double-insuranceChecks whether a vehicle has overlapping insurance for the requested cover period.
Request body
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
Returns overlapping certificate details when found, or No double insurance found.
A vehicle or date field is invalid.
Member company stock #
{{base_url}}/dmvic/stockReturns DMVIC certificate stock information for a configured insurer member company.
Request body
insurerstring · requiredThe insurer’s configured DMVIC member company ID.Responses
The DMVIC response is returned inside the data array.
The value does not match a configured insurer DMVIC ID.
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.
Bearer your_access_tokenInsurers #
{{base_url}}/insurersReturns insurer IDs, short and legal names, and a logo URL when available. Use ?search=term to filter by name.
Use data[].id as policy.insurer_id.
Branches #
{{base_url}}/branchesReturns branch IDs, codes, locations, and cities. Use data[].id as client.branch_id.
Risk managers #
{{base_url}}/risk-managersReturns active risk-manager user IDs, names, and email addresses. Use data[].id as client.risk_manager_id.
Sales people #
{{base_url}}/sales-peopleReturns salesperson IDs, names, codes, and branch IDs. Use data[].id as client.sales_person_id when applicable.
Policy taxes #
{{base_url}}/policy/taxesReturns configured policy-tax IDs and names. Use data[].id as taxes[].tax_id.
Motor benefits #
{{base_url}}/motor/benefitsReturns Motor benefit IDs and names. Use data[].id as vehicles[].benefits[].benefit_id.
Maximum ten requests per minute per IP.
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.
Generate motor quote #
{{base_url}}/motor/quoteReturns matching insurer rates, benefits, taxes, markup, instalments, and limits of liability.
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
Matching plans are returned in options.
Review the validation errors or returned quote criteria.
Save motor quotation #
{{base_url}}/motor/save_quoteStores the customer, vehicle, and one or more calculated insurer options as a quotation. This does not create a policy.
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.Returns the saved quotation details and options.
Create motor policy #
{{base_url}}/motor/saveCreates the client and motor policy from the selected quote option, including vehicles, taxes, and selected benefits.
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.Returns policy ID, risknote, client number, and client key.
Maximum three attempts per 15 seconds per IP.
Medical limits #
{{base_url}}/medical/limitsReturns the unique configured inpatient limits in ascending order. Limited to ten requests per minute per IP.
Returns an array of id and limit objects.
Generate medical quote #
{{base_url}}/medical/quoteCalculates available medical plans using principal age, spouse age, number of children, and inpatient limit.
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
Returns matching insurer plans and benefit options in options.
One or more required ages, child count, or limit values are invalid.
Create medical policy #
{{base_url}}/medical/saveCreates a medical policy for a client and family members using the selected insurer plan.
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.Returns policy ID, risknote, client number, and key.
Standard products #
{{base_url}}/standard/productsLists supported standard product IDs and names.
Returns products currently configured for IDs 20, 27, 29, 35, and 49.
Generate standard quote #
{{base_url}}/standard/quoteReturns insurer options, premiums, benefits, logo URLs, and brochures for a standard product.
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.Create standard policy #
{{base_url}}/standard/saveCreates a policy for a supported standard product with its taxes and optional benefit schedule.
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.Generate travel quote #
{{base_url}}/travel/quoteReturns matching insurer plans based on destination, dates, rate type, and traveller count.
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.Create travel policy #
{{base_url}}/travel/saveCreates a travel policy for the selected quote and stores each traveller and beneficiary record.
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.Returns risknote, client number, and client key.
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.
Bearer your_access_tokenCreate prospect #
{{base_url}}/prospectsCreates a single prospect. Only p_name and status are required — everything else is optional.
Headers
AuthorizationBearer your_access_tokenYesAcceptapplication/jsonYesContent-Typeapplication/jsonYesRequest body
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
{
"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]
}
{
"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
Returns the new prospect's ID and key fields.
A required field is missing or a value is invalid.
The prospect could not be created. Nothing was saved.
ERP Records #
Retrieve paginated client, policy, and claim records available to the authenticated ERP account.
Bearer your_access_tokenERP 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.
List clients #
{{base_url}}/erp/clientsReturns clients visible to the authenticated ERP employee, salesperson, or agent, ordered by client name.
Query parameters
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.
Maximum five requests per minute.
List policies #
{{base_url}}/erp/policiesReturns policies visible to the authenticated account, ordered by most recent start date.
Query parameters
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.
Maximum five requests per minute.
List claims #
{{base_url}}/erp/claimsReturns claims for policies visible to the authenticated account, ordered by most recent incident date.
Query parameters
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.
Maximum five requests per minute.
More capabilities are coming
Additional endpoint groups and workflows will appear here as they are released.