Skip to main content

Thatch for Platforms API

Thatch for Platforms is a set of APIs and embeddable components, enabling you to effortlessly bring ICHRA (Individual Coverage Health Reimbursement Arrangement) benefits to your customers.

Deductions

Payroll deductions track the costs of plan premiums to employees.

List employee payroll deductions

Authorizations:
Bearer
query Parameters
employer_id
required
string
Example: employer_id=empl_01j9w59xh2p5d03z0zxgcv2vag

Employer ID

page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

periods[start_after]
string <date>
Example: periods[start_after]=2024-01-01

Periods starting on or after date, in ISO 8601 format

periods[end_before]
string <date>
Example: periods[end_before]=2024-01-01

Periods ending on or before date, in ISO 8601 format

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Employees

Employees work for employers, both of which are managed by partners. Employees enrolled in plans are also represented in Thatch as member objects.

Create an employee

Authorizations:
Bearer
Request Body schema: application/json
required
employer_id
required
string

ID of the employee's employer

first_name
required
string

Employee's first name

last_name
required
string

Employee's last name

personal_email
string

Employee's personal email address (at least one email address must be set)

work_email
string

Employee's work email address (at least one email address must be set)

metadata
object

Set of key-value pairs that you can attach to an API resource. This can be useful for storing additional information about the resource in a structured format. Individual keys can be unset by posting an empty string value ("") to them. All keys can be unset by posting an empty object value ({}) to metadata.

Responses

Request samples

Content type
application/json
{
  • "personal_email": "string",
  • "work_email": "string",
  • "employer_id": "string",
  • "first_name": "string",
  • "last_name": "string",
  • "metadata": { }
}

Response samples

Content type
application/json
{
  • "id": "employee_01j85kpd8yxkabyrm83d3h2ya3",
  • "employer_id": "empl_01j2j3smtwx656y2tbqm7ty6gr",
  • "personal_email": "ana.diaz@gmail.test",
  • "work_email": "ana.diaz@acme.test",
  • "first_name": "Ana",
  • "last_name": "Diaz",
  • "enrollment_events": [
    ],
  • "member_id": "mbr_01j85kpd8yxkabyrm83d3h2ya3",
  • "metadata": {
    }
}

Get an employee

Authorizations:
Bearer
path Parameters
id
required
string

Employee ID

Responses

Response samples

Content type
application/json
{
  • "id": "employee_01j85kpd8yxkabyrm83d3h2ya3",
  • "employer_id": "empl_01j2j3smtwx656y2tbqm7ty6gr",
  • "personal_email": "ana.diaz@gmail.test",
  • "work_email": "ana.diaz@acme.test",
  • "first_name": "Ana",
  • "last_name": "Diaz",
  • "enrollment_events": [
    ],
  • "member_id": "mbr_01j85kpd8yxkabyrm83d3h2ya3",
  • "metadata": {
    }
}

List employees

Authorizations:
Bearer
query Parameters
employer_id
string

Employer ID

page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Update an employee

Authorizations:
Bearer
path Parameters
id
required
string

ID of the employee

Request Body schema: application/json
required
personal_email
string

Employee's personal email address (at least one email address must be set)

work_email
string

Employee's work email address (at least one email address must be set)

first_name
string

Employee's first name

last_name
string

Employee's last name

metadata
object

Set of key-value pairs that you can attach to an API resource. This can be useful for storing additional information about the resource in a structured format. Individual keys can be unset by posting an empty string value ("") to them. All keys can be unset by posting an empty object value ({}) to metadata.

Responses

Request samples

Content type
application/json
{
  • "personal_email": "string",
  • "work_email": "string",
  • "first_name": "string",
  • "last_name": "string",
  • "metadata": { }
}

Response samples

Content type
application/json
{
  • "id": "employee_01j85kpd8yxkabyrm83d3h2ya3",
  • "employer_id": "empl_01j2j3smtwx656y2tbqm7ty6gr",
  • "personal_email": "ana.diaz@gmail.test",
  • "work_email": "ana.diaz@acme.test",
  • "first_name": "Ana",
  • "last_name": "Diaz",
  • "enrollment_events": [
    ],
  • "member_id": "mbr_01j85kpd8yxkabyrm83d3h2ya3",
  • "metadata": {
    }
}

Employer onboarding sessions

Employers onboard into a platform through employer onboarding sessions. After creating a session, provide the claim_url to the onboarding iframe in your app.

Create an employer onboarding session

Authorizations:
Bearer
Request Body schema: application/json
required
employer
required
string

ID of the employer to create an onboarding session for

Responses

Request samples

Content type
application/json
{
  • "employer": "empl_01j2j3smtwx656y2tbqm7ty6gr"
}

Response samples

Content type
application/json
{}

Employers

Platforms onboard employers into Thatch, and have employees enrolled in plans.

Create an employer

Authorizations:
Bearer
Request Body schema: application/json
required
email
required
string

Email address for employer's administrator

name
required
string

Employer's name

business_type
required
string
Enum: "c_corp" "s_corp" "llc" "partnership" "sole_proprietorship" "non_profit"

Employer's business type

ein
required
string

Employer's EIN (Employer Identification Number)

address_line1
required
string

Employer's address (line 1)

city
required
string

Employer's city

state
required
string
Enum: "AK" "AL" "AR" "AZ" "CA" "CO" "CT" "DC" "DE" "FL" "GA" "HI" "IA" "ID" "IL" "IN" "KS" "KY" "LA" "MA" "MD" "ME" "MI" "MN" "MO" "MS" "MT" "NC" "ND" "NE" "NH" "NJ" "NM" "NV" "NY" "OH" "OK" "OR" "PA" "RI" "SC" "SD" "TN" "TX" "UT" "VA" "VT" "WA" "WI" "WV" "WY"

Employer's state

zip
required
string

Employer's ZIP code, with optional +4

dba
string

Employer's DBA (Doing Business As) name

address_line2
string

Employer's address (line 2)

phone_number
string

Employer's phone number

metadata
object

Set of key-value pairs that you can attach to an API resource. This can be useful for storing additional information about the resource in a structured format. Individual keys can be unset by posting an empty string value ("") to them. All keys can be unset by posting an empty object value ({}) to metadata.

Responses

Request samples

Content type
application/json
{
  • "email": "admin@employer.test",
  • "name": "Acme Corp",
  • "business_type": "c_corp",
  • "ein": "12-3456789",
  • "dba": "string",
  • "address_line1": "123 Main St",
  • "address_line2": "",
  • "city": "San Francisco",
  • "state": "CA",
  • "zip": "94108",
  • "phone_number": "415-555-1212",
  • "metadata": { }
}

Response samples

Content type
application/json
{
  • "id": "empl_01j2j3smtwx656y2tbqm7ty6gr",
  • "name": "Acme Corp",
  • "business_type": "c_corp",
  • "ein": "12-3456789",
  • "dba": "string",
  • "address_line1": "123 Main St",
  • "address_line2": "string",
  • "city": "San Francisco",
  • "state": "CA",
  • "zip": "94108",
  • "phone_number": "+14152370005",
  • "metadata": {
    }
}

Get an employer

Authorizations:
Bearer
path Parameters
id
required
string

Employer ID

Responses

Response samples

Content type
application/json
{
  • "id": "empl_01j2j3smtwx656y2tbqm7ty6gr",
  • "name": "Acme Corp",
  • "business_type": "c_corp",
  • "ein": "12-3456789",
  • "dba": "string",
  • "address_line1": "123 Main St",
  • "address_line2": "string",
  • "city": "San Francisco",
  • "state": "CA",
  • "zip": "94108",
  • "phone_number": "+14152370005",
  • "metadata": {
    }
}

List employers

Authorizations:
Bearer
query Parameters
page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Update an employer

Authorizations:
Bearer
path Parameters
id
required
string

ID of the employer

Request Body schema: application/json
required
metadata
object

Set of key-value pairs that you can attach to an API resource. This can be useful for storing additional information about the resource in a structured format. Individual keys can be unset by posting an empty string value ("") to them. All keys can be unset by posting an empty object value ({}) to metadata.

Responses

Request samples

Content type
application/json
{
  • "metadata": { }
}

Response samples

Content type
application/json
{
  • "id": "empl_01j2j3smtwx656y2tbqm7ty6gr",
  • "name": "Acme Corp",
  • "business_type": "c_corp",
  • "ein": "12-3456789",
  • "dba": "string",
  • "address_line1": "123 Main St",
  • "address_line2": "string",
  • "city": "San Francisco",
  • "state": "CA",
  • "zip": "94108",
  • "phone_number": "+14152370005",
  • "metadata": {
    }
}

Enrollments

Enrollments use member objects to track employee coverage status.

Get an enrollment

Authorizations:
Bearer
path Parameters
id
required
string
Example: enrlmt_01j7h53qgy8m2q1f7563hbvpqj

Enrollment ID

Responses

Response samples

Content type
application/json
{
  • "id": "enrlmt_01j7h53qgy8m2q1f7563hbvpqj",
  • "member_id": "mbr_01j7h53qa133q71z25n7a3w0n4",
  • "coverage_types": [
    ],
  • "status": "completed",
  • "status_events": [
    ],
  • "plan_id": "mdpln_01j7h53nf2j0hc5a235b6xmxn4",
  • "plan_code": "standard",
  • "premium": {
    },
  • "broker": {
    },
  • "enrollment_coverages": [
    ]
}

List enrollments

Authorizations:
Bearer
query Parameters
page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

member_id
string
Example: member_id=mbr_01j7h53qa133q71z25n7a3w0n4

Member ID

status
string
Enum: "in_member_cart" "member_confirmed" "submission_processing" "carrier_processing" "completed" "canceled" "broker_created"
Example: status=completed

Enrollment status

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Members

Members represent employees enrolled in plans. Thatch creates member objects automatically, but you can retrieve them (for example, to aid in supporting an enrolled employee.

Get a member

Authorizations:
Bearer
path Parameters
id
required
string

Member ID

Responses

Response samples

Content type
application/json
{
  • "id": "mbr_01j85kpd8yxkabyrm83d3h2ya3",
  • "employee_id": "employee_01j7h53r7gpd0q0wtx4pcfcska",
  • "first_name": "Ana",
  • "last_name": "Diaz",
  • "address_line1": "123 Main St",
  • "address_line2": "string",
  • "city": "San Francisco",
  • "state": "CA",
  • "zip": "94108",
  • "date_of_birth": "1989-07-15"
}

List members

Authorizations:
Bearer
query Parameters
page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Plans

Plans are offered by insurance carriers.

Get a plan

Authorizations:
Bearer
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "mdpln_01j2w394ngkjh3dfqdqzac4ev4",
  • "carrier_name": "Anthem",
  • "friendly_name": "Silver 70 HMO 2850/50",
  • "plan_type": "hmo",
  • "metal_tier": "silver",
  • "deductible": {
    },
  • "premium": {
    },
  • "hios_id": "70285CA1234567"
}

List plans

Authorizations:
Bearer
query Parameters
zip
required
string
Example: zip=94105

Five-digit ZIP code for the entire family

ages[]
required
Array of integers <int32> [ items <int32 > ]
Example: ages[]=33&ages[]=42&ages[]=7

Ages of the prospect's employee and their dependents. The length of this parameter should match the length of relationships parameter.

relationships[]
required
Array of strings
Items Enum: "self" "spouse" "child"
Example: relationships[]=self&relationships[]=spouse&relationships[]=child

Relationships of the prospect employee and their dependents. The length of this parameter should match the length of ages parameter.

year
integer <int32>
Default: ""
Example: year=2025

Plan year, defaults to the current year

page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

List plans, filtered by benchmark

Authorizations:
Bearer
query Parameters
zip
required
string
Example: zip=94105

ZIP code for all family. This should be the 5 digit ZIP code, not the ZIP+4.

age
required
integer <int32>
Example: age=33

Age of the employee

benchmark
required
string
Enum: "score_tier_0" "score_tier_1" "score_tier_2" "score_tier_3"
Example: benchmark=score_tier_0

Plan benchmark

year
integer <int32>
Default: ""
Example: year=2025

Plan year, defaults to the current year

page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Quoting

Quotes allow platforms to quote health coverage cost to prospective employers.

Bulk create employees for the prospect

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

Request Body schema: application/json
required
required
Array of objects
Array
date_of_birth
required
string <date>

Prospect employee's date of birth, in YYYY-MM-DD format

zip
required
string

Prospect employee's ZIP code

required
Array of objects
name
string

Prospect employee's name

Responses

Request samples

Content type
application/json
{
  • "employees": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Create a prospect

Authorizations:
Bearer
Request Body schema: application/json
required
name
required
string

Prospect's name

email
string or null

Prospect's email address

archived
boolean

Prospect's archived (if true) or active (if false) status

Responses

Request samples

Content type
application/json
{
  • "name": "Acme Corp",
  • "email": "prospect@acme.org",
  • "archived": true
}

Response samples

Content type
application/json
{
  • "id": "prospect_01j2w394ngkjh3dfqdqzac4ev4",
  • "name": "Acme Corp",
  • "email": "prospect@acme.org",
  • "archived": false,
  • "created_at": "2024-11-01T00:00:00Z",
  • "updated_at": "2024-11-01T00:00:00Z"
}

Create a quote for a prospect

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

Request Body schema: application/json
required
year
required
integer <int32>

Quote year

benchmark
string
Enum: "score_tier_0" "score_tier_1" "score_tier_2" "score_tier_3"

Benchmark used to generate the cost for this quote

employee_multiplier
number <double>

Percentage of the employee-only premium that the employer covers, from 0.0 - 1.0 (for example, 0.8 means 80%)

first_dependent_multiplier
number <double>

Percentage of the employee-only contribution the employer wants to provide for the first dependent, from 0.0 - 1.0 (for example, 0.5 means 50%)

additional_dependent_multiplier
number <double>

Percentage of the employee-only contribution the employer wants to provide for additional dependents, from 0.0 - 1.0 (for example, 0.3 means 30%)

Responses

Request samples

Content type
application/json
{
  • "year": 2025,
  • "benchmark": "score_tier_0",
  • "employee_multiplier": 0.1,
  • "first_dependent_multiplier": 0.1,
  • "additional_dependent_multiplier": 0.1
}

Response samples

Content type
application/json
{
  • "id": "qte_01j2w592k42n6f86fcpqp9frfr",
  • "benchmark": "score_tier_0",
  • "year": 2025,
  • "employee_multiplier": 0.8,
  • "first_dependent_multiplier": 0.5,
  • "additional_dependent_multiplier": 0.3,
  • "created_at": "2024-11-01T00:00:00Z",
  • "updated_at": "2024-11-01T00:00:00Z",
  • "quoting_prospect_id": "prospect_01j2w592k42n6f86fcpqp9frfr"
}

Create an employee for the prospect

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

Request Body schema: application/json
required
date_of_birth
required
string <date>

Date of birth of the prospect employee, in YYYY-MM-DD format

zip
required
string

Prospect employee's ZPI code

required
Array of objects
name
string

Prospect employee's name

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "date_of_birth": "2019-08-24",
  • "zip": "string",
  • "dependents": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "prospect_ee_01j2w3kcb6dfyaqsw1c460f8jw",
  • "name": "Stephani Hermann",
  • "date_of_birth": "1989-07-15",
  • "zip": "94103",
  • "dependents": [
    ],
  • "quoting_prospect_id": "prospect_01j2w3kcb6dfyaqsw1c460f8jw"
}

Get a prospect

Authorizations:
Bearer
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "prospect_01j2w394ngkjh3dfqdqzac4ev4",
  • "name": "Acme Corp",
  • "email": "prospect@acme.org",
  • "archived": false,
  • "created_at": "2024-11-01T00:00:00Z",
  • "updated_at": "2024-11-01T00:00:00Z"
}

Get a quote, with cost analysis results

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

id
required
string

Quote ID

Responses

Response samples

Content type
application/json
{
  • "id": "qte_01j2w592k42n6f86fcpqp9frfr",
  • "benchmark": "score_tier_0",
  • "year": 2025,
  • "employee_multiplier": 0.8,
  • "first_dependent_multiplier": 0.5,
  • "additional_dependent_multiplier": 0.3,
  • "created_at": "2024-11-01T00:00:00Z",
  • "updated_at": "2024-11-01T00:00:00Z",
  • "quoting_prospect_id": "prospect_01j2w592k42n6f86fcpqp9frfr",
  • "employer_contribution": {
    },
  • "employee_contribution": {
    },
  • "employee_results": [
    ]
}

Get an employee

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

id
required
string

Employee ID

Responses

Response samples

Content type
application/json
{
  • "id": "prospect_ee_01j2w3kcb6dfyaqsw1c460f8jw",
  • "name": "Stephani Hermann",
  • "date_of_birth": "1989-07-15",
  • "zip": "94103",
  • "dependents": [
    ],
  • "quoting_prospect_id": "prospect_01j2w3kcb6dfyaqsw1c460f8jw"
}

List employees of the prospect

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

query Parameters
page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

List prospects

Authorizations:
Bearer
query Parameters
archived
boolean

If specified, filter by active (false) or archived (true) prospects

page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

List quotes for the prospect

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

query Parameters
page[number]
integer <int32> >= 1
Default: 1

Page number

page[size]
integer <int32> [ 1 .. 1000 ]
Default: 20

Number of items per page. Must be between 1 and 1,000 (inclusive). Defaults to 20.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Update a prospect

Authorizations:
Bearer
path Parameters
id
required
string
Request Body schema: application/json
required
name
string

Prospect's name

email
string or null

Prospect's email address

archived
boolean

Prospect's archived (if true) or active (if false) status

Responses

Request samples

Content type
application/json
{
  • "name": "Acme Corp",
  • "email": "prospect@acme.org",
  • "archived": true
}

Response samples

Content type
application/json
{
  • "id": "prospect_01j2w394ngkjh3dfqdqzac4ev4",
  • "name": "Acme Corp",
  • "email": "prospect@acme.org",
  • "archived": false,
  • "created_at": "2024-11-01T00:00:00Z",
  • "updated_at": "2024-11-01T00:00:00Z"
}

Update a quote

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

id
required
string

Quote ID

Request Body schema: application/json
required
year
integer <int32>

Quote year

benchmark
string
Enum: "score_tier_0" "score_tier_1" "score_tier_2" "score_tier_3"

Benchmark used to generate the cost for this quote

employee_multiplier
number <double>

Percentage of the employee-only premium that the employer covers, from 0.0 - 1.0 (for example, 0.8 means 80%)

first_dependent_multiplier
number <double>

Percentage of the employee-only contribution the employer wants to provide for the first dependent, from 0.0 - 1.0 (for example, 0.5 means 50%)

additional_dependent_multiplier
number <double>

Percentage of the employee-only contribution the employer wants to provide for additional dependents, from 0.0 - 1.0 (for example, 0.3 means 30%)

Responses

Request samples

Content type
application/json
{
  • "year": 2025,
  • "benchmark": "score_tier_0",
  • "employee_multiplier": 0.1,
  • "first_dependent_multiplier": 0.1,
  • "additional_dependent_multiplier": 0.1
}

Response samples

Content type
application/json
{
  • "id": "qte_01j2w592k42n6f86fcpqp9frfr",
  • "benchmark": "score_tier_0",
  • "year": 2025,
  • "employee_multiplier": 0.8,
  • "first_dependent_multiplier": 0.5,
  • "additional_dependent_multiplier": 0.3,
  • "created_at": "2024-11-01T00:00:00Z",
  • "updated_at": "2024-11-01T00:00:00Z",
  • "quoting_prospect_id": "prospect_01j2w592k42n6f86fcpqp9frfr"
}

Update an employee

Authorizations:
Bearer
path Parameters
prospect_id
required
string

Prospect ID

id
required
string

Employee ID

Request Body schema: application/json
required
name
string

Prospect employee's name

date_of_birth
string <date>

Prospect employee's date of birth, in YYYY-MM-DD format

zip
string

Prospect employee's ZIP code

Array of objects

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "date_of_birth": "2019-08-24",
  • "zip": "string",
  • "dependents": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "prospect_ee_01j2w3kcb6dfyaqsw1c460f8jw",
  • "name": "Stephani Hermann",
  • "date_of_birth": "1989-07-15",
  • "zip": "94103",
  • "dependents": [
    ],
  • "quoting_prospect_id": "prospect_01j2w3kcb6dfyaqsw1c460f8jw"
}