Questionnaires
Questionnaires are answered by drivers on tasks (e.g. delivery confirmation, condition checks). Custom Link exposes two commands to retrieve those answers — both retrieve-only; there is no corresponding store command, since answers are submitted by drivers through a different surface, not Custom Link. MendriX Mobile (our own driver app) is the primary source of these answers, but any fleet management system a driver actually uses — including third-party telematics/board-computer integrations, or a custom app built against the Driver API — can submit them too.
When to use
Section titled “When to use”| Situation | Command |
|---|---|
| Retrieve structured question/answer pairs for tasks (recommended) | RequestQuestionnaireAnswers |
| Retrieve the raw questionnaire-report XML blob for tasks (legacy) | RequestTaskQuestionnaire |
Structured answers (preferred)
Section titled “Structured answers (preferred)”<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkRequestQuestionnaireAnswers Type="TEoCustomLinkRequestQuestionnaireAnswers"> <Nested>False</Nested> <Filter Type="TEoFilterQuestionnaireAnswers"> <TaskIdsCsv>2219,2220</TaskIdsCsv> </Filter></EoCustomLinkRequestQuestionnaireAnswers>| Filter field | Type | Description |
|---|---|---|
TaskIdsCsv | string (CSV) | Task Ids to retrieve questionnaire answers for. |
Response fields (TEoCustomLinkQuestionnaireAnswer)
Section titled “Response fields (TEoCustomLinkQuestionnaireAnswer)”One row per answered question, per task:
| Field | Type | Description |
|---|---|---|
QuestionnaireId | int | Database Id of the questionnaire this answer belongs to. |
Moment | dateTime | When the questionnaire was submitted. |
GoodId | int | Database Id of the good, if the question was good-specific. |
TaskId | int | Database Id of the task. |
QuestionId | int | Database Id of the question. |
QuestionKey | string | Stable key for the question (e.g. Payment_COD), useful for matching across questionnaire versions. |
Question | string | The question text as shown to the driver. |
AnswerId | int | Database Id of this stored answer record — not a reference to a choice/option definition. |
AnswerIndex | int | Ordinal position (0-based) of this answer within the batch of answers submitted together in one questionnaire response — not an index into an option list. |
AnswerType | string | The kind of answer (e.g. Select, free text, numeric). |
AnswerValues | string | The answered value(s), format depends on AnswerType. |
Example response:
<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkResponseQuestionnaireAnswers Type="TEoCustomLinkResponseQuestionnaireAnswers"> <Data Type="TEoCustomLinkQuestionnaireAnswerList"> <_TEoListBase_Items> <EoCustomLinkQuestionnaireAnswer Type="TEoCustomLinkQuestionnaireAnswer"> <QuestionnaireId>2</QuestionnaireId> <Moment>2026-07-22T10:28:22+02:00</Moment> <GoodId>917</GoodId> <TaskId>2219</TaskId> <QuestionId>6</QuestionId> <QuestionKey>Payment_COD</QuestionKey> <Question>Is the cash-on-delivery amount fully paid?</Question> <AnswerId>5</AnswerId> <AnswerIndex>0</AnswerIndex> <AnswerType>Select</AnswerType> <AnswerValues>[0]</AnswerValues> </EoCustomLinkQuestionnaireAnswer> </_TEoListBase_Items> </Data></EoCustomLinkResponseQuestionnaireAnswers>Scenarios
Section titled “Scenarios”Scenario: check whether cash-on-delivery was confirmed. Filter by the
delivery task’s Id, then look for the answer whose QuestionKey matches
your tenant’s COD-confirmation question — match on QuestionKey, not
QuestionId, since the numeric Id can differ between questionnaire
versions/tenants.
Scenario: retrieve answers for multiple tasks in one call. Set
TaskIdsCsv to a comma-separated list of task Ids — the response
contains one row per answered question per task, distinguishable by
TaskId.
Legacy XML blob
Section titled “Legacy XML blob”RequestTaskQuestionnaire returns the raw questionnaire-report XML
submitted by whichever driver app or fleet management system answered
the questionnaire — MendriX Mobile is the primary source, but the same
storage path can be reached from other systems too — keyed by task, one
blob per task.
<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkRequestTaskQuestionnaire Type="TEoCustomLinkRequestTaskQuestionnaire"> <KeysExplicitAsCsv>437,438</KeysExplicitAsCsv></EoCustomLinkRequestTaskQuestionnaire><?xml version="1.0" encoding="windows-1252"?><EoCustomLinkResponseTaskQuestionnaire Type="TEoCustomLinkResponseTaskQuestionnaire"> <Data Type="TEoCustomLinkTaskQuestionnaireList"> <_TEoListBase_Items> <EoCustomLinkTaskQuestionnaire Type="TEoCustomLinkTaskQuestionnaire"> <TaskId>437</TaskId> <XML><questionnaireReport> <questionnaireId>CUTK-SUCCEED</questionnaireId> <questionnaireVersion>2</questionnaireVersion> <timestamp>2026-07-22T10:14:41Z</timestamp> <answer> <questionId>TERMINAL</questionId> <answerOptionId>1</answerOptionId> </answer> </questionnaireReport></XML> </EoCustomLinkTaskQuestionnaire> </_TEoListBase_Items> </Data></EoCustomLinkResponseTaskQuestionnaire>The <XML> element contains a nested, unescaped questionnaire-report
document — parse it as a separate XML document per task, keyed by
questionId. This format predates RequestQuestionnaireAnswers and is
harder to work with (no stable question keys, requires understanding the
report’s internal structure); new integrations should use the structured
command above instead.
Gotchas
Section titled “Gotchas”- No store command exists — questionnaire answers come from drivers’ devices, not from Custom Link integrators. These commands are read-only.
- Match on
QuestionKey, notQuestionId, when using the structured command — the numeric Id isn’t guaranteed stable across questionnaire versions. - The legacy blob’s internal structure isn’t described by
GdxEoStructures.xsd— it’s a separate, questionnaire-specific report format, not a standard Eo type.
Related commands
Section titled “Related commands”- Order intake — tasks belong to orders.
- Command reference — every Custom Link command.