Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/coverwhaleinsurancesolutions:coverwhaleinsurancesolutions-submissions-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Coverwhaleinsurancesolutions Submissions API
version: '1.0'
contact:
name: Cover Whale API Team
description: 'Operations tagged Submissions across 2 of this provider''s published API definitions: coverwhaleinsurancesolutions-openapi.json, coverwhaleinsurancesolutions-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.coverwhale.dev/v1
security:
- AccessToken: []
tags:
- name: Submissions
paths:
/submission/{displayId}:
get:
tags:
- Submissions
summary: Get Submission Status
description: 'Retrieve the current status and details of a submission by its display ID.
The response uses a two-part model: `submissionStatus.status` reflects the **latest transaction** (which may be an in-progress endorsement), while `coverages`, `vehicles`, `drivers`, `insuredInformation`, and `premiumFinanceDetails` reflect the **effective (last-bound) policy**. This means a pending endorsement is visible in `status` without blanking out the coverage the bound policy still provides. `account_standing` reports whether that effective policy is `Active`, `Canceled`, or `Not In Force`.
When a submission is pending cancellation/cancelled the cancellation reason is included in the `submissionStatus` fields returned.'
operationId: getSubmissionStatus
parameters:
- name: Content-Type
in: header
required: true
schema:
type: string
example: application/json
- name: Accept
in: header
required: true
schema:
type: string
example: application/json
- name: AccessToken
in: header
required: true
schema:
type: string
example: eyJraWQiOiJnRk5oTTh2RnRKWXVDVXU1S........
- name: displayId
in: path
description: Submission display ID
required: true
schema:
type: string
example: '2261310'
- name: include
in: query
required: false
schema:
type: string
example: documents
description: Comma-separated list of extra sections to include. When omitted, documents are NOT returned (faster — ideal for status polling). Pass `documents` to include a `documents` section with signed S3 download URLs keyed by transaction (`new_business`, `endorsement_1`, ...).
responses:
'200':
description: quote success
content:
application/json:
schema:
properties:
insuredInformation:
description: Return the insured information
type: array
items:
properties:
legal_name:
type: string
example: Alexander & Alexander, Inc.
mailing_address:
type: string
example: 9524 N TRASK STREET
mailing_city:
type: string
example: TAMPA
mailing_state:
type: string
example: FL
mailing_zip:
type: string
example: '33624'
type: object
submissionStatus:
description: Current status of the submission. `status`, `calculated_status`, and `account_standing` are recomputed on every request (never cached) so they always reflect live state.
type: array
items:
properties:
submission_number:
type: string
example: '2261310'
status:
type: string
description: Status of the LATEST transaction, which may be an in-progress endorsement (e.g. `In Review`, `Quoted`) even while the bound policy remains in force. The `coverages`, `vehicles`, `drivers`, and `insuredInformation` sections continue to reflect the effective (last-bound) policy, so a pending endorsement never blanks them out.
example: Request to Bind
pending_status:
type: string
description: Pending action awaiting the partner/insured, or `None` when there is nothing pending.
example: None
calculated_status:
type: string
description: Human-readable status badge mirroring the Cover Whale agent portal (e.g. `Bound`, `Cancel Requested`, `Pending Cancellation`, `In progress`, `Expired`). Derived from the latest transaction and recomputed per request.
example: Bound
account_standing:
type: string
description: Standing of the effective policy, derived from the new-business record. `Active` = policy is bound and not canceled; `Canceled` = policy has been canceled; `Not In Force` = not yet bound (or no policy).
enum:
- Active
- Canceled
- Not In Force
example: Active
cancellation_reason:
type: string
description: 'Reason the policy is being, or has been, canceled. **Present only when `status` is `Request to Cancel` or `Canceled`** - for every other status the key is omitted from the response entirely, rather than returned empty.
This is the raw stored value, so parse it defensively. It is usually a single reason code (`non_payment`), but it can also be a comma-separated list of codes (`non_payment,insured_broker_request`) or a JSON-encoded array (`["non_payment"]`). An empty string means the canceling transaction carries no recorded reason.
Codes seen most often are `non_payment`, `insured_broker_request`, `material_changes`, `does_not_meet_uw_guidelines`, `binding_requirements` and `bind_documents_not_provided`. Treat the set as open rather than fixed.'
example: non_payment
type: object
coverages:
description: Return the coverages and the policy values and information
type: array
items:
properties:
al:
type: array
items:
properties:
limit:
type: number
example: '100000'
premium:
type: number
example: '0'
deductible:
type: number
example: '0'
policy_number:
type: string
example: CAY00000001-1
policy_effective_date:
type: string
example: '2022-12-15'
format: date
policy_expiration_date:
type: string
example: '2023-12-15'
format: date
carrier:
type: string
example: Everspan Indemnity Insurance Company
carrier_naic:
type: number
example: '0'
type: object
apd:
type: array
items:
properties:
limit:
type: number
example: '100000'
premium:
type: number
example: '0'
deductible:
type: number
example: '0'
policy_number:
type: string
example: CAY00000001-1
policy_effective_date:
type: string
example: '2022-12-15'
format: date
policy_expiration_date:
type: string
example: '2023-12-15'
format: date
carrier:
type: string
example: Everspan Indemnity Insurance Company
carrier_naic:
type: number
example: '0'
type: object
mtc:
type: array
items:
properties:
limit:
type: number
example: '100000'
premium:
type: number
example: '0'
deductible:
type: number
example: '0'
policy_number:
type: string
example: CAY00000001-1
policy_effective_date:
type: string
example: '2022-12-15'
format: date
policy_expiration_date:
type: string
example: '2023-12-15'
format: date
carrier:
type: string
example: Everspan Indemnity Insurance Company
carrier_naic:
type: number
example: '0'
type: object
tgl:
type: array
items:
properties:
limit:
type: number
example: '100000'
premium:
type: number
example: '0'
deductible:
type: number
example: '0'
policy_number:
type: string
example: CAY00000001-1
policy_effective_date:
type: string
example: '2022-12-15'
format: date
policy_expiration_date:
type: string
example: '2023-12-15'
format: date
carrier:
type: string
example: Everspan Indemnity Insurance Company
carrier_naic:
type: number
example: '0'
type: object
ntl:
type: array
items:
properties:
limit:
type: number
example: '100000'
premium:
type: number
example: '0'
deductible:
type: number
example: '0'
policy_number:
type: string
example: CAY00000001-1
policy_effective_date:
type: string
example: '2022-12-15'
format: date
policy_expiration_date:
type: string
example: '2023-12-15'
format: date
carrier:
type: string
example: Everspan Indemnity Insurance Company
carrier_naic:
type: number
example: '0'
type: object
type: object
vehicles:
description: Return the vehicles and trailers of the submission
type: array
items:
properties:
equipment_type:
type: string
example: Vehicle
vin:
type: string
example: 21S45D1S45
includeAPDTowing:
type: string
example: Y
make:
type: string
example: VOLVO TRUCK
year:
type: number
example: '2017'
model:
type: string
example: VNL
value:
type: number
example: '50000'
body_type:
type: string
example: box_truck
deductible:
type: number
example: '1000'
loss_payee:
type: number
example: '0'
type: object
broker:
description: Return the broker information
type: array
items:
properties:
first_name:
type: string
example: firstname_1041
last_name:
type: string
example: lastname_1041
agency_name:
type: string
example: M.J. Hall and Company
address:
type: string
example: user_1041@example.com
phone:
type: string
example: '8183371513'
type: object
type: object
example:
insuredInformation:
legal_name: Alexander & Alexander, Inc.
mailing_address: ''
mailing_city: null
mailing_state: CA
mailing_zip: null
submissionStatus:
submission_number: '2261310'
status: Request to Bind
pending_status: None
calculated_status: Bind Requested (Underwriting Review)
account_standing: Not In Force
coverages:
al:
limit: 1000000
premium: '17300.00'
deductible: null
policy_number: null
policy_effective_date: '2022-12-15'
policy_expiration_date: '2023-12-15'
carrier: Everspan Indemnity Insurance Company
carrier_naic: 0
apd:
limit: 50000
premium: '2500.00'
deductible: 1000
policy_number: null
policy_effective_date: '2022-12-15'
policy_expiration_date: '2023-12-15'
carrier: Everspan Indemnity Insurance Company
carrier_naic: 0
mtc:
limit: 100000
premium: '5000.00'
deductible: 100
policy_number: null
policy_effective_date: '2022-12-15'
policy_expiration_date: '2023-12-15'
carrier: Canopius US Insurance
carrier_naic: 0
vehicles:
- equipment_type: Vehicle
vin: 21S45D1S45
make: VOLVO TRUCK
year: 2017
model: VNL
value: 50000
body_type: box_truck
deductible: 1000
loss_payee: null
broker:
first_name: firstname_1041
last_name: lastname_1041
agency_name: M.J. Hall and Company
address: user_1041@example.com
phone: '8183371513'
retailAgent: []
'404':
description: error
content:
application/json:
schema:
properties:
error:
description: Submission not found.
type: string
type: object
example:
error: Submission not found.
servers:
- url: https://api.coverwhale.dev/v1
/submission/{displayId}/transactions:
get:
tags:
- Submissions
summary: List Submission Transactions
description: 'List every transaction on a submission (new business plus each endorsement, reinstatement, and cancellation) with a lightweight status summary. Use this to track how a policy has changed over time without pulling each transaction''s full detail.
Results are scoped to the calling partner''s own submissions. A display ID that does not exist, or that belongs to another company, returns `404` — existence is never revealed to a non-owner.'
operationId: getSubmissionTransactions
parameters:
- name: Content-Type
in: header
required: true
schema:
type: string
example: application/json
- name: Accept
in: header
required: true
schema:
type: string
example: application/json
- name: AccessToken
in: header
required: true
schema:
type: string
example: eyJraWQiOiJnRk5oTTh2RnRKWXVDVXU1S........
- name: displayId
in: path
description: Submission display ID
required: true
schema:
type: string
example: '2261310'
responses:
'200':
description: Transaction list
content:
application/json:
schema:
properties:
display_id:
type: string
example: '2261310'
transaction_count:
description: Total number of transactions on the submission (new business + endorsements + reinstatements + cancellations).
type: integer
example: 3
endorsement_count:
description: Number of bound endorsement transactions (excludes in-progress/quoted endorsements).
type: integer
example: 2
transactions:
type: array
items:
properties:
transaction_number:
description: Sequential transaction index. `0` is always new business; `1`, `2`, ... are subsequent endorsements/reinstatements/cancellations.
type: integer
example: 0
transaction_type:
type: string
enum:
- NEW_BUSINESS
- RENEWAL
- ENDORSEMENT
- CANCELLATION
- REINSTATEMENT
example: NEW_BUSINESS
status:
description: Status of this transaction (e.g. `Bound`, `Quoted`, `In Review`, `Canceled`, `Reversed`).
type: string
example: Bound
effective_date:
type: string
format: date
example: '2025-10-03'
type: object
type: object
example:
display_id: '2261310'
transaction_count: 3
endorsement_count: 2
transactions:
- transaction_number: 0
transaction_type: NEW_BUSINESS
status: Bound
effective_date: '2025-10-03'
- transaction_number: 1
transaction_type: ENDORSEMENT
status: Bound
effective_date: '2025-11-04'
- transaction_number: 2
transaction_type: ENDORSEMENT
status: Quoted
effective_date: '2026-01-06'
'404':
description: Submission not found, or not owned by the calling partner
content:
application/json:
schema:
properties:
error:
type: string
type: object
example:
error: Submission not found
servers:
- url: https://api.coverwhale.dev/v1
/submission/{displayId}/public-reply:
post:
tags:
- Submissions
summary: Post a Public Reply
description: 'Post a public reply / note back onto a submission — the inbound counterpart to the outbound `submission.public_reply` webhook. The note is recorded on the submission and is visible to Cover Whale staff on the account''s Notes tab; it does not trigger a webhook back to you.
Scoped to the calling partner''s own submissions. A display ID that does not exist, or that belongs to another company, returns `404` — existence is never revealed to a non-owner.'
operationId: postSubmissionPublicReply
parameters:
- name: Content-Type
in: header
required: true
schema:
type: string
example: application/json
- name: Accept
in: header
required: true
schema:
type: string
example: application/json
- name: AccessToken
in: header
required: true
schema:
type: string
example: eyJraWQiOiJnRk5oTTh2RnRKWXVDVXU1S........
- name: displayId
in: path
description: Submission display ID
required: true
schema:
type: string
example: '2261310'
requestBody:
required: true
content:
application/json:
schema:
properties:
content:
description: The reply text to record on the submission. Required, up to 5000 characters. HTML is sanitized on write.
type: string
example: Please add the trailer VIN 1UYVS2538 to this policy.
required:
- content
type: object
responses:
'201':
description: Reply recorded
content:
application/json:
schema:
properties:
status:
type: string
example: success
note_id:
type: integer
example: 987654
type: object
'404':
description: Submission not found, or not owned by the calling partner
content:
application/json:
schema:
properties:
error:
type: string
type: object
example:
error: Submission not found
'422':
description: Validation error (e.g. missing or empty content)
content:
application/json:
schema:
properties:
message:
type: string
errors:
type: object
type: object
example:
message: The content field is required.
errors:
content:
- The content field is required.
servers:
- url: https://api.coverwhale.dev/v1
/submission/{displayId}/notes/{id}:
get:
tags:
- Submissions
summary: Get a Public Reply Note
description: 'Retrieve the body of a single public reply note by its note ID — the pull counterpart to the content-free `submission.public_reply` webhook. The webhook tells you *that* a reply happened and gives you a `note_id`; this endpoint returns the text.
**Only public replies are retrievable.** Internal notes are never returned. A note ID that does not exist, identifies an internal note, belongs to a different submission than the `displayId` you passed, or belongs to another company all return the same `404` with the same body — the responses are deliberately indistinguishable, so a non-public note''s existence is never revealed.
Company scoping is an **exact** match on the calling partner''s own company, mirroring the webhook side: you can resolve exactly the note IDs you were pushed, and no others. A parent company cannot read a child company''s note even where broader visibility exists elsewhere in the platform.'
operationId: getSubmissionNote
parameters:
- name: Accept
in: header
required: true
schema:
type: string
example: application/json
- name: AccessToken
in: header
required: true
schema:
type: string
example: eyJraWQiOiJnRk5oTTh2RnRKWXVDVXU1S........
- name: displayId
in: path
description: Submission display ID. Must be the submission the note belongs to.
required: true
schema:
type: string
example: '2261310'
- name: id
in: path
description: Note ID, as delivered in the `note_id` field of a `submission.public_reply` webhook.
required: true
schema:
type: string
example: '884213'
responses:
'200':
description: Public reply note
content:
application/json:
schema:
properties:
note_id:
description: The note's ID, echoed back as a string.
type: string
example: '884213'
display_id:
description: The submission the note belongs to.
type: string
example: '2261310'
body:
description: The reply text. There is no separate subject field.
type: string
example: Your down payment has been received — coverage is active.
occurred_at:
description: When the note was created. ISO 8601 with offset.
type: string
format: date-time
example: '2026-07-06T20:41:07+00:00'
type: object
'401':
description: Unauthorized — missing or invalid AccessToken
'404':
description: Not found. Returned identically for a missing note, an internal (non-public) note, a display ID that does not match the note, and a note belonging to another company.
content:
application/json:
schema:
properties:
error:
type: string
example: Not found.
type: object
servers:
- url: https://api.coverwhale.dev/v1
components:
securitySchemes:
AccessToken:
type: apiKey
description: JWT returned as AccessToken by the /authentication endpoint (the Cognito ID token carrying the email claim). It expires after 3600 seconds.
name: AccessToken
in: header
x-refined-from:
- coverwhaleinsurancesolutions-openapi.json
- coverwhaleinsurancesolutions-openapi.json