Skip to content

Product and Questions

Obtain the product UUID from the organization providing the product before requesting questions or quotes. The API also calls this identifier a lineId.

Retrieve Product Questions#

HTTPPOST
POST https://api.{ENV}.dais.com/ioi/v3/product/{productId}/questions
cURL
curl --location --request POST 'https://api.{ENV}.dais.com/ioi/v3/product/<UUID of the product ID>/questions' \
--header 'Authorization: Basic <Base64-encoded API key and secret>' \
--header 'Content-Type: application/json' \
--data-raw '{}'

For request options, the response structure, and examples, see the Product Questions reference.

The response contains a single product object. A product can have both a display containing its questions and a lines array of child products. Traverse the tree to collect questions from each product's display.sections[].subsections[].questions[].

JSON
{
  "lineId": "<UUID of the product ID>",
  "lineName": "<Product name>",
  "generatesQuotes": true,
  "supportedEvents": {},
  "toc": [],
  "product": {
    "id": "<UUID of the product ID>",
    "title": "<Title>",
    "display": {
      "sections": [
        {
          "title": "<Title>",
          "subsections": [
            {
              "title": "<Title>",
              "questions": [
                {
                  "qid": "client.name",
                  "lineId": "<UUID of the product ID>",
                  "question": "<Question text>",
                  "required": true,
                  "answerType": "TEXT",
                  "visible": true
                }
              ]
            }
          ]
        }
      ]
    },
    "lines": []
  }
}

Question and Answer Data#

Question definitions use question for the text and answerType for the control type. Choice questions can provide answerChoices; conditional questions can provide condition. A default value appears in defaultAnswer.

For looping questions, read loopDefinitionDto and the nested loopQuestions. Use the returned definition to construct answer data in the client answer format.

Intake answers are a separate map keyed by qid:

JSON
{
  "client.name": {
    "type": "ANSWER",
    "qid": "client.name",
    "answer": "<Answer for client.name>"
  }
}

The same map format is accepted in the question request's answers field, the client endpoint's clientData, and the quote event's intake.

QID Reuse#

A QID identifies an answer across the product's question sets. Reuse a QID when two questions intentionally refer to the same information, such as the client's name. Use different QIDs when answers must remain independent.

For example, two products can both request client.name and read the same supplied answer. Loop answers additionally carry iteration identifiers to distinguish repeated records.

Hosted Product Versions#

To retrieve the deployment timeline for a product, use GET /ioi/v3/product/{product_id}/hosted-versions. See Get Hosted Product Versions for environment keys, deployment dates, and version fields.