Skip to content

GET_QUOTES

Requests quotes for a product using its configured rating actions. The event definition includes client creation or update before the configured actions, except in batch mode, and supports rating actions such as IOI_RATING, VERISK, VERISK_ALGO, and BUNDLE_RATING.

Request#

HTTPPOST
POST https://api.{ENV}.dais.com/ioi/v3/event/fire

Use the authentication headers described in Authentication and the shared event envelope. Replace text in angle brackets with values from your environment, including question identifiers, answers, and dates. API constants such as GET_QUOTES, ANSWER, and EXTERNAL are literal values.

cURL
curl --location --request POST 'https://api.{ENV}.dais.com/ioi/v3/event/fire' \
--header 'Authorization: Basic <Base64-encoded API key and secret>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "lineId": "<UUID of the product ID>",
  "type": "GET_QUOTES",
  "forceSync": true,
  "payload": {
    "effectiveDate": "2026-01-01",
    "intake": {
      "<Business name question ID>": {
        "type": "ANSWER",
        "qid": "<Business name question ID>",
        "answer": "<Business name>"
      },
      "<Employee count question ID>": {
        "type": "ANSWER",
        "qid": "<Employee count question ID>",
        "answer": "10"
      }
    }
  }
}'
JSON
{
  "lineId": "<UUID of the product ID>",
  "type": "GET_QUOTES",
  "forceSync": true,
  "payload": {
    "effectiveDate": "2026-01-01",
    "intake": {
      "<Business name question ID>": {
        "type": "ANSWER",
        "qid": "<Business name question ID>",
        "answer": "<Business name>"
      },
      "<Employee count question ID>": {
        "type": "ANSWER",
        "qid": "<Employee count question ID>",
        "answer": "10"
      }
    }
  }
}

Envelope Fields#

FieldDescription
typeRequired; GET_QUOTES.
lineIdUUID of the product for this request.
productVersionIdOptional product version UUID.
versionSystemSourceOptional version source: BUILDER or HOSTING.
forceSyncRequests synchronous rating; defaults to false. Supported rating actions return quotes in metadata.quotes as described below.
sourceOptional origin object. When omitted, the public API sets sourceType: EXTERNAL and the authenticated organization ID.
agencyCodesOptional array of carrier agency-code objects; see below.
asConfiguredAtTimestampOptional legacy configuration timestamp selector. This belongs in the envelope, alongside lineId, rather than inside payload.
payloadEvent data described below.

Source and Agency Codes#

A supplied source can contain sourceType, organizationId, storefrontId, personId, and url. Valid sourceType values are TEST, COPILOT, STOREFRONT, EXTERNAL, INTERNAL_CALL, and SCHEDULED_AUTOMATION. For an external integration, use EXTERNAL, or omit source to use the public API default. When using STOREFRONT, supply source.storefrontId.

Each agencyCodes entry is an object, for example:

JSON
{
  "carrierId": "<UUID of the carrier ID>",
  "carrierName": "<Carrier name>",
  "contractCodeSetName": "<Contract code set name>",
  "agencyCodeData": {
    "<Carrier agency code key>": "<Agency code>"
  }
}

The keys inside agencyCodeData depend on the carrier integration.

Payload Fields#

The required column reflects the declared event payload. Configured actions may require additional context.

FieldRequiredDescription
effectiveDateYesQuote effective date, YYYY-MM-DD.
clientIdNoExisting client UUID. Omit when requesting client creation through the configured workflow.
quoteIdNoAssociated quote request UUID.
policyIdNoAssociated policy UUID.
documentsNoExisting document references, with UUID contentId values.
referrerNoReferral string.
intakeNoMap of question identifiers to answer objects. Supply the answers required by the product and actions.
intakeLoopIterationIdsToDeleteNoUUIDs of existing loop iterations to remove.
metadataNoAdditional client metadata.
integrationDataNoAdditional integration data.
forwardingQuoteIdNoQuote UUID used for forwarding.
quoteIntegrationDataNoIntegration data for the quote.
clientIntegrationDataNoIntegration data for the client.

Use the product's actual question identifiers in intake. Answer objects use type and qid; a simple ANSWER stores its value as a string. See Client for the intake structure. The GET_QUOTES payload does not declare a requestSource field; use the appropriate event for renewal or endorsement requests.

Request for an existing client#

Include payload.clientId when the request concerns an existing client. Supply the effective date and the intake required by the product. This example requests asynchronous execution and uses the public API's default external source:

JSON
{
  "lineId": "<UUID of the product ID>",
  "type": "GET_QUOTES",
  "forceSync": false,
  "payload": {
    "clientId": "<UUID of the client ID>",
    "effectiveDate": "2026-01-01",
    "intake": {
      "<Business name question ID>": {
        "type": "ANSWER",
        "qid": "<Business name question ID>",
        "answer": "<Business name>"
      }
    }
  }
}

Omit clientId when requesting client creation through the configured workflow. Keep your application's client identifier separate from the returned trigger identifier and quote request identifiers.

For an explicit source, add this object to the event envelope:

JSON
{
  "source": {
    "sourceType": "EXTERNAL",
    "organizationId": "<UUID of the organization ID>",
    "url": "<Source URL>"
  }
}

Response#

The response is a trigger result. This example illustrates a synchronous response with client context and no rating results; counts and metadata vary with the actions that run.

JSON
{
  "triggerRequestId": "<UUID of the trigger request ID>",
  "executedActionCount": 0,
  "expectedResponseCount": 0,
  "metadata": {
    "CREATE_OR_UPDATE_CLIENT": {
      "clientId": "<UUID of the client ID>",
      "intake": {}
    },
    "quotes": []
  }
}
FieldDescription
triggerRequestIdIdentifier used to track the trigger execution and retrieve its quotes.
executedActionCountNumber of configured actions dispatched; the built-in client creation/update action is not included.
expectedResponseCountNumber of action responses expected; this is not a guaranteed count of successful quotes.
metadataAction-specific results. See the built-in client result and synchronous quote array below.

The built-in client action returns metadata.CREATE_OR_UPDATE_CLIENT with clientId and intake. Save this clientId when creating a client. With batchMode: true, default actions are skipped and this entry instead contains temporary client context; it does not confirm a saved client.

Synchronous and asynchronous flows#

Both execution modes use the same endpoint, event payload, and trigger response. Choose the mode with the envelope's forceSync field:

ModeRequestClient flow
AsynchronousOmit forceSync, or set it to false.Save triggerRequestId, then retrieve the quote results for that trigger. Repeat retrieval while your application is waiting for results.
SynchronousSet forceSync to true.Read metadata.quotes for results from the supported synchronous rating actions, save triggerRequestId, and use quote retrieval when needed.

For synchronous GET_QUOTES, the action service initializes metadata.quotes as an array. The IOI_RATING, VERISK, VERISK_ALGO, and BUNDLE_RATING implementations add their returned quote objects to it. These objects use the shared quote structure; the array can be empty and can include declined results. Inspect each quote's type and messages.

Other configured actions can have their own timing and results, so the synchronous flag does not guarantee that every external integration has completed. The public API does not publish a universal execution timeout.

Retrieve results and poll#

Use the triggerRequestId from the event response to retrieve the results:

cURL
curl --location --request GET 'https://api.{ENV}.dais.com/ioi/v3/quotes/trigger/<UUID of the trigger request ID>' \
--header 'Authorization: Basic <Base64-encoded API key and secret>'

The result separates quoted and declined results into two arrays. An illustrative response with no results is:

JSON
{
  "quoted": [],
  "declined": []
}

For an integration that polls:

  1. Submit the event once and retain its triggerRequestId.
  2. Retrieve results with GET /quotes/trigger/{triggerRequestId}. Read both quoted and declined.
  3. If further results are expected, repeat this GET using an interval and overall deadline appropriate to your integration. Polling does not require firing another GET_QUOTES event.
  4. Track individual quotes by requestId so repeat retrieval does not create duplicate results in your application. If the deadline expires, retain the trigger ID for subsequent retrieval and diagnosis.

The retrieval response has no completion-status field. An empty array, or a count below expectedResponseCount, does not establish whether processing has finished. expectedResponseCount counts action responses rather than guaranteed successful quotes; define completion handling with the configured integration.

Use GET /quote/{quoteRequestId} to retrieve an individual quote. Where an endpoint or event accepts a quote ID, use that quote's requestId; for example, the SELECT_QUOTE event accepts them in payload.quoteIds. Check the quote's type, bindable, messages, and any underwriting or policyholder acceptance requirements before presenting the next step to the user. See Quotes for retrieval parameters and the complete response fields.

Rating actions#

GET_QUOTES supports these rating action types. The product's workflow determines which actions are configured and enabled.

actionTypePurpose
IOI_RATINGSpreadsheet rating through the IOI rating engine.
VERISKVerisk RaaS with adjustments.
VERISK_ALGOVerisk RaaS with advanced adjustments.
BUNDLE_RATINGPackage or bundle rating across multiple products.

Use a returned quote's actionType to identify the rating mechanism and actionId to identify the configured action. A workflow can also contain non-rating actions such as INTAKE_TO_PDF_TO_EMAIL and WEBHOOK, so the executed action count is not a quote count. Integration-specific metadata, raw data, coverage details, and package composition can vary; the action type does not define a fixed metadata schema in this API.

Quote Structure#

Quote objects use requestId as their identifier. term is a premium-term enum such as ANNUAL; a duration is represented separately by quoteDetails.duration. The following is an illustrative quote fragment, not the complete trigger response:

JSON
{
  "requestId": "<UUID of the quote request ID>",
  "type": "QUOTE",
  "term": "ANNUAL",
  "quoteDetails": {
    "premium": {
      "amount": 4200.0,
      "per": "YEAR",
      "taxesAndFees": []
    },
    "duration": {
      "length": 1,
      "scale": "YEAR"
    },
    "coverageTypes": []
  }
}

Coverage groups belong in quoteDetails.coverageTypes, and premium taxes and fees belong in quoteDetails.premium.taxesAndFees. See Quotes for the complete shared contract, supported quote types, identifiers, and retrieval parameters.

A declined quote can carry messages for your application to display. This fragment illustrates the relevant fields:

JSON
{
  "requestId": "<UUID of the quote request ID>",
  "type": "DECLINE",
  "bindable": false,
  "messages": [
    {
      "message": "<Decline reason>",
      "type": "CONSUMER"
    }
  ]
}

Keep quoted and declined results associated with their original trigger and individual requestId values. Use the complete stored quote when passing a quote snapshot to another event.