Survey API

Internal API — not for external integrators

This surface belongs to the Olanzo portal and landing pages. It is not part of the public API product: it has no published specification, no versioning commitment and no support guarantee, and it can change without notice. If you are building an integration, none of the endpoints below are for you — start at the Authenticate guide instead.

This page exists so our own developers can find the surface without reading the controllers. It covers survey authoring — surveys, pages, questions and categories — the anonymous routes a respondent's browser calls while filling one in, and the analytics behind the portal's survey dashboards.

Two of these route groups behave very differently

Everything under /Survey and /Insights expects a signed-in session. The five survey-taking routes do not — they are called by a member of the public's browser, which holds no credential.

Download for AI review

Copy or download this guide as Markdown to paste into an AI assistant for help integrating against it.

Environment

You are reading the reference for the host that served this page, and every example below points at it.

PropertyValue
Environment
Base URLhttps://survey-dev.jirafix.net
No published host list

Unlike the public products, Survey has no entry in the deployment host list. It is reached internally, and the address above is simply the one you opened.

Authentication

The authoring and analytics routes expect a signed-in portal session. The survey-taking routes are anonymous by design.

Check before assuming a route is protected

This service's authentication registration is commented out in its startup configuration, so do not assume a given route is enforcing what its attributes suggest. Confirm against the running service before relying on it for anything sensitive.

Survey-taking (anonymous)

These are what a respondent's browser calls while filling in a survey. They take no token, because the person answering has no account. Our landing-page scripts are the caller.

Publicly reachable

Anything reachable without a credential is reachable by anyone. Treat what these accept and return accordingly, and do not extend them to carry anything a respondent should not be able to send or see.

POST /Survey/StartSurvey

Starts a survey session and returns its session id.

The first call a respondent's browser makes. The session id it returns is what every later call carries.

Responses

StatusMeaning
200The operation succeeded.
curl -X POST https://survey-dev.jirafix.net/Survey/StartSurvey
POST /Survey/SavePageViews

Records that the respondent viewed a page of the survey.

Responses

StatusMeaning
200The operation succeeded.
curl -X POST https://survey-dev.jirafix.net/Survey/SavePageViews
POST /Survey/SingleResponse

Saves one answer.

Responses

StatusMeaning
200The operation succeeded.
curl -X POST https://survey-dev.jirafix.net/Survey/SingleResponse
POST /Survey/KafkaSingleResponse/{rowuid}

Saves one answer through the streaming path.

Responses

StatusMeaning
200The operation succeeded.
curl -X POST https://survey-dev.jirafix.net/Survey/KafkaSingleResponse/{rowuid}
PUT /Survey/FinalSurvey/{surveyId}/{sessionId}

Marks a survey session complete.

Called when the respondent finishes. Until this lands, the session counts as in progress.

Responses

StatusMeaning
200The operation succeeded.
curl -X PUT https://survey-dev.jirafix.net/Survey/FinalSurvey/{surveyId}/{sessionId}

Surveys

Create, list, duplicate and delete surveys.

GET /Survey/SurveyList

Lists the surveys on the account.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Survey/SurveyList \
  -H "Authorization: Bearer <token>"
POST /Survey

Creates a survey.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Survey \
  -H "Authorization: Bearer <token>"
DELETE /Survey

Deletes a survey.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X DELETE https://survey-dev.jirafix.net/Survey \
  -H "Authorization: Bearer <token>"
POST /Survey/DuplicateSurvey

Copies an existing survey, including its pages and questions.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Survey/DuplicateSurvey \
  -H "Authorization: Bearer <token>"
GET /Survey/ErrorLog/{journal_type}/{entitytype}

Reads the authoring error log for a survey entity type.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Survey/ErrorLog/{journal_type}/{entitytype} \
  -H "Authorization: Bearer <token>"

Pages

A survey is made of pages, and questions belong to pages.

GET /Survey/Pages/{surveyId}

Lists the pages of a survey.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Survey/Pages/{surveyId} \
  -H "Authorization: Bearer <token>"
POST /Survey/Pages/{surveyId}

Adds a page.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Survey/Pages/{surveyId} \
  -H "Authorization: Bearer <token>"
PUT /Survey/Pages/{pageid}/{surveyId}

Replaces a page.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X PUT https://survey-dev.jirafix.net/Survey/Pages/{pageid}/{surveyId} \
  -H "Authorization: Bearer <token>"
PATCH /Survey/Pages/{pageid}/{surveyId}

Updates part of a page.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X PATCH https://survey-dev.jirafix.net/Survey/Pages/{pageid}/{surveyId} \
  -H "Authorization: Bearer <token>"
DELETE /Survey/Pages/{pageId}/{surveyid}

Removes a page.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X DELETE https://survey-dev.jirafix.net/Survey/Pages/{pageId}/{surveyid} \
  -H "Authorization: Bearer <token>"

Questions

Questions and the question types available to them.

GET /Survey/Questions/{surveyId}

Lists a survey's questions.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Survey/Questions/{surveyId} \
  -H "Authorization: Bearer <token>"
POST /Survey/Question

Adds a question.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Survey/Question \
  -H "Authorization: Bearer <token>"
DELETE /Survey/Question/{surveyId}/{questionId}

Removes a question.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X DELETE https://survey-dev.jirafix.net/Survey/Question/{surveyId}/{questionId} \
  -H "Authorization: Bearer <token>"
PATCH /Survey/SyncQuestionDisplaySeqeuence/{surveyId}

Re-orders a survey's questions.

Note the spelling of the path segment — Seqeuence. It is misspelled in the route itself, so it has to be called that way.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X PATCH https://survey-dev.jirafix.net/Survey/SyncQuestionDisplaySeqeuence/{surveyId} \
  -H "Authorization: Bearer <token>"
GET /Survey/QuestionType

Lists the available question types.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Survey/QuestionType \
  -H "Authorization: Bearer <token>"
POST /Survey/QuestionType/{region}

Adds a question type for a region.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Survey/QuestionType/{region} \
  -H "Authorization: Bearer <token>"
DELETE /Survey/QuestionType/{id}

Removes a question type.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X DELETE https://survey-dev.jirafix.net/Survey/QuestionType/{id} \
  -H "Authorization: Bearer <token>"

Categories

Categories group surveys within an account.

GET /Survey/{surveyid}/Category

Lists a survey's categories.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Survey/{surveyid}/Category \
  -H "Authorization: Bearer <token>"
POST /Survey/{surveyid}/Category

Adds a category.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Survey/{surveyid}/Category \
  -H "Authorization: Bearer <token>"
PUT /Survey/{surveyid}/Category/{categoryid}

Updates a category.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X PUT https://survey-dev.jirafix.net/Survey/{surveyid}/Category/{categoryid} \
  -H "Authorization: Bearer <token>"
DELETE /Survey/{surveyid}/Category/{categoryId}

Removes a category.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X DELETE https://survey-dev.jirafix.net/Survey/{surveyid}/Category/{categoryId} \
  -H "Authorization: Bearer <token>"

Responses

The answers people have given.

GET /Survey/UserSurveyResponses

Reads survey responses.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Survey/UserSurveyResponses \
  -H "Authorization: Bearer <token>"
POST /Survey/UserSurveyResponses

Saves survey responses on behalf of a user.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Survey/UserSurveyResponses \
  -H "Authorization: Bearer <token>"

Survey analytics

Everything under /Insights backs the portal's survey dashboards. These are mostly POST even when reading, because the filter travels in the body.

POST /Insights/Survey_list

Lists surveys for the analytics views.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey_list \
  -H "Authorization: Bearer <token>"
POST /Insights/SurveyKPIData

Headline figures across surveys.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/SurveyKPIData \
  -H "Authorization: Bearer <token>"
POST /Insights/SyncSurveyLookup

Refreshes the analytics lookup data.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/SyncSurveyLookup \
  -H "Authorization: Bearer <token>"
POST /Insights/targetSourceCount/{id}

Counts the target audience for a survey.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/targetSourceCount/{id} \
  -H "Authorization: Bearer <token>"

Dashboard tiles

The KPI tiles on a survey's dashboard, and which of them a user has pinned.

POST /Insights/Survey/{id}/KPI

Reads the KPI set for one survey.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey/{id}/KPI \
  -H "Authorization: Bearer <token>"
PUT /Insights/Survey/{id}/KPI/Pin

Pins a KPI tile.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X PUT https://survey-dev.jirafix.net/Insights/Survey/{id}/KPI/Pin \
  -H "Authorization: Bearer <token>"
PUT /Insights/Survey/{id}/KPI/Pin/{pinId}

Updates a pinned tile.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X PUT https://survey-dev.jirafix.net/Insights/Survey/{id}/KPI/Pin/{pinId} \
  -H "Authorization: Bearer <token>"
DELETE /Insights/Survey/{id}/KPI/Pin/{pinId}

Unpins a tile.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X DELETE https://survey-dev.jirafix.net/Insights/Survey/{id}/KPI/Pin/{pinId} \
  -H "Authorization: Bearer <token>"
POST /Insights/Survey/{id}/Kpi/Source

Breaks a KPI down by traffic source.

Note the casing — Kpi here, KPI on the routes above. Both spellings are live and are not interchangeable.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey/{id}/Kpi/Source \
  -H "Authorization: Bearer <token>"

Breakdowns

How one survey performed, cut various ways.

POST /Insights/Survey/{id}/visitors

Visitor counts.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey/{id}/visitors \
  -H "Authorization: Bearer <token>"
POST /Insights/Survey/{id}/performance

Performance over time.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey/{id}/performance \
  -H "Authorization: Bearer <token>"
POST /Insights/Survey/{id}/Responses

Response totals.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey/{id}/Responses \
  -H "Authorization: Bearer <token>"
POST /Insights/Survey/{id}/Engagement

Engagement figures.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey/{id}/Engagement \
  -H "Authorization: Bearer <token>"
POST /Insights/Survey/{id}/Device

Breakdown by device.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey/{id}/Device \
  -H "Authorization: Bearer <token>"
POST /Insights/Survey/{surveyid}/engagementChart

Engagement as a chart series.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/Survey/{surveyid}/engagementChart \
  -H "Authorization: Bearer <token>"

Recipients and answers

Per-recipient detail behind a survey distribution.

GET /Insights/GetSurveyAnswer/{surveyId}

Reads the answers given to a survey.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Insights/GetSurveyAnswer/{surveyId} \
  -H "Authorization: Bearer <token>"
POST /Insights/GetSurveyRecipientDetails/{surveyId}

Reads recipient-level detail.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X POST https://survey-dev.jirafix.net/Insights/GetSurveyRecipientDetails/{surveyId} \
  -H "Authorization: Bearer <token>"
GET /Insights/distribution/Survey/{queueId}/{datacategory}/{kpistatusId}/Recipients

Lists recipients in one KPI category of a distribution.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Insights/distribution/Survey/{queueId}/{datacategory}/{kpistatusId}/Recipients \
  -H "Authorization: Bearer <token>"
GET /Insights/distribution/Survey/{surveyId}/{queueId}/{recipient}/PageViews

Reads one recipient's page views.

Responses

StatusMeaning
200The operation succeeded.
401Missing or invalid token.
curl -X GET https://survey-dev.jirafix.net/Insights/distribution/Survey/{surveyId}/{queueId}/{recipient}/PageViews \
  -H "Authorization: Bearer <token>"

Errors

This service predates the response conventions the public APIs follow, and its error shapes are not consistent across controllers. Read the body rather than relying on the status code alone.

StatusWhat it generally means
200The call succeeded. An empty result is still a 200.
400The request could not be read, or a required value was missing.
401No valid session on a route that expects one.