Employer Health Insurance Setup
This guide walks you through building the employer-facing experience for setting up group health insurance. You’ll learn how to display available plans, request quotes, handle requirements, and activate group policies - all through Kota’s API.
Before starting, ensure you’ve completed:
- Authentication setup - API key configuration
- Employer and employee management - Syncing employer and employee data
- Webhooks configuration - Receiving asynchronous updates
Overview
The employer health insurance setup follows Kota’s intent-based pattern. Two primary intents drive the flow:
- Group Quote Intent - Initiates the quoting process and returns pricing from insurers
- Group Setup Intent - Accepts a quote and establishes the group policy
Each intent may require additional data from employers or employees before completion. The API returns dynamic requirements that your platform must collect and submit.
High-Level Flow
Part 1: Discovery
Before employers can request quotes, they need to see what’s available. This part involves fetching providers and plans to display in your UI.
Step 1: List Providers
Retrieve the list of insurance providers available on your platform. Each provider includes the countries they support.
Endpoint: GET /providers
Response:
Implementation notes:
- Filter providers by country based on your employer’s location
- Store provider IDs for use when fetching plans
- Display provider logos and descriptions to help employers make informed choices
Step 2: List Plans
Retrieve available health insurance plans. Filter by provider and/or country to show relevant options.
Endpoint: GET /plans
Query parameters:
Response:
Implementation notes:
- Display plan details, coverage information, and eligibility criteria
- Show plan documents (IPIDs, terms and conditions) for employer review
- Highlight any eligibility restrictions that might affect the employer’s decision like minimum employees, age, etc.
- Use the
health_insurance.pricingblock to display plan costs per member type - Check
health_insurance.supported_cost_sharing_optionsto determine which cost sharing options to offer in your UI
Step 3: Create a Group
Once the employer selects a plan, create a Group to represent their health insurance setup. The Group ties together the employer, the selected plan, and eventually the group policy.
Endpoint: POST /groups
Request body:
Response:
The Group starts in pending status. It will transition to ready once the group policy is created and active.
Implementation notes:
- Store the
group_idfor use in the Group Quote Intent - Use a descriptive name that helps employers identify the group (e.g., include the plan or provider name)
- The
group_typewill besinglefor a single health insurance policy
Part 2: Group Quote Intent
When an employer selects a plan, create a Group Quote Intent to initiate the quoting process. Different providers have different response times - some provide instant quotes, others may take up to a few days.
Group Quote Intent Lifecycle
Step 4: Create Group Quote Intent
Create a Group Quote Intent when the employer is ready to request pricing for a specific plan.
Endpoint: POST /group_quote_intents
Request body:
The cost_sharing object determines how costs are allocated. The available types depend on the plan - check the health_insurance.supported_cost_sharing_options field on the plan response to see which options are available.
Cost sharing types:
Response:
After creation, the Group Quote Intent enters processing state. Kota evaluates whether additional information is needed.
Step 5: Handle Requirements (if any)
If the Group Quote Intent transitions to action_required, requirements must be fulfilled before a quote can be generated.
Webhook: group_quote_intent.action_required
Fetching requirement details:
Use the Group Quote Intent Requirements API to get all requirements. Each requirement includes a JSON Schema that describes exactly what data is needed.
Endpoint: GET /group_quote_intents/{groupQuoteIntentId}/requirements
Response:
Requirements Examples
Example 1: Canada Life (Health Insurance)
Complex Example: Irish Life (Health Insurance)
Implementation notes:
- Requirements can be for the employer (
object_type: "employer") or employees (object_type: "employee") - The
requirement_typefield indicates what data is needed (e.g.,company_registration,date_of_birth) - Use
is_fulfilledto track which requirements have been completed - The
object_idtells you which employer or employee the requirement applies to
Submitting requirement data:
Endpoint: PUT /requirements/{requirement_id}
Submit requirement data using the requirement’s specific endpoint. Once all requirements are fulfilled, the Group Quote Intent automatically transitions to awaiting_quote.
Step 6: Await Quote
After requirements are satisfied (or if none were needed), the Group Quote Intent enters awaiting_quote state. This means Kota is waiting for the insurer to respond with pricing.
Webhook: group_quote_intent.awaiting_quote
Response times vary by provider. Some providers return quotes almost instantly. Others may take 1-3 business days. Display an appropriate holding screen to set employer expectations.
Step 7: Quote Available
When the insurer responds, the Group Quote Intent transitions to quote_available. You can retrieve the full quote details using the quote endpoint.
Webhook: group_quote_intent.quote_available
Fetching quote details:
Endpoint: GET /group_quote_intents/{groupQuoteIntentId}/quote
Response:
Display the quote to the employer with options to:
- Accept - Proceed to setup (creates a Group Setup Intent)
- Reject - Decline the quote
- Let expire - Take no action (quote expires at
expires_at)
Alternative Outcomes
Quote rejected by insurer:
In some cases, the insurer may decline to provide a quote.
Webhook: group_quote_intent.rejected_by_insurer
Quote expired:
If the employer doesn’t act before expires_at, the quote expires.
Webhook: group_quote_intent.quote_expired
Rejecting a quote:
If the employer decides not to proceed:
Endpoint: POST /group_quote_intents/{groupQuoteIntentId}/reject
Part 3: Group Setup Intent
When the employer accepts a quote, create a Group Setup Intent to establish the group policy with the insurer.
Group Setup Intent Lifecycle
After a successful setup, you’ll receive either group_policy.scheduled (if the coverage start date is in the future) or group_policy.active (if coverage starts immediately). The setup intent can also be rejected by the insurer during final review.
Step 8: Create Group Setup Intent
Accept the quote and initiate policy setup.
Endpoint: POST /group_setup_intents
Request body:
Response:
Creating a Group Setup Intent signals acceptance of the quote. Ensure the employer has explicitly confirmed they want to proceed before making this call.
Important: When a Group Setup Intent is created, all other quotes for this group are automatically rejected. Only one setup can proceed per group.
Step 9: Handle Requirements (if any)
Similar to Group Quote Intents, Group Setup Intents may require additional data. The flow is identical: fetch requirement schemas, collect data, and submit.
Webhook: group_setup_intent.action_required
Step 10: Pending Insurer Approval
After requirements are satisfied, some providers require final approval before activating the policy.
Webhook: group_setup_intent.pending_provider_approval
Display a holding screen indicating the policy is being finalized with the insurer.
Step 11: Group Policy Activated
Once the provider approves (or if no approval was needed), the group policy is created and activated. If the policy start date is in the future, you’ll receive group_policy.scheduled followed by group_policy.active when coverage begins.
Webhook: group_policy.scheduled (if start date is in the future)
Webhook: group_policy.active (when coverage begins)
This completes the employer journey. Display the policy details and provide access to policy documents.
Alternative Outcome: Setup Rejected by Insurer
In some rare cases, the insurer may reject the setup during final review.
Webhook: group_setup_intent.rejected_by_insurer
Webhooks Summary
Your integration should handle these webhooks to drive UI state transitions:
Group Quote Intent Webhooks
Group Setup Intent Webhooks
Group Policy Webhooks
UI States Reference
Map these states to your employer dashboard:
Best Practices
Error Handling
- Always handle the
rejected_by_insurercase for both quotes and setup intents gracefully - Provide clear messaging when quotes expire
- Allow employers to restart the flow if needed
User Experience
- Display provider response time expectations during the quote waiting period
- Show requirement deadlines prominently to prevent timeouts
- Pre-fill requirement forms with any data you already have
Next Steps
Once employers have active group policies, employees can enroll in coverage:
- Employee enrollment - Employees accept coverage through Enrollment Intents
- Dependents and beneficiaries - Employees can add family members during enrollment
- Policy management - Handle renewals, amendments, and cancellations
Resources:
- API Reference - Detailed endpoint documentation
- Webhooks and Events - Event handling best practices
- Key Concepts - Understanding Groups, Policies, and Intents

