logo isiQuest External API Documentation
MENU navbar-image

Introduction

Public API for isiQuest external clients (v1).

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Your API token is provided by isiQuest when your integration is set up.

Endpoints

Check API availability.

Returns a simple status payload confirming the external API is reachable. Reference example endpoint for the API documentation setup.

Example request:
curl --request GET \
    --get "https://developpers.isiquest.com/api/v1/health" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://developpers.isiquest.com/api/v1/health"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "status": "ok",
    "version": "v1"
}
 

Request      

GET api/v1/health

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Questionnaires

List questionnaires. Returns a paginated list of questionnaires available to the authenticated client.

requires authentication

Example request:
curl --request GET \
    --get "https://developpers.isiquest.com/api/v1/questionnaires?page=1&per_page=20&status=active" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://developpers.isiquest.com/api/v1/questionnaires"
);

const params = {
    "page": "1",
    "per_page": "20",
    "status": "active",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": 101,
            "title": "Employee engagement 2026",
            "status": "active",
            "responses_count": 243
        },
        {
            "id": 102,
            "title": "Customer satisfaction Q1",
            "status": "closed",
            "responses_count": 1890
        }
    ],
    "meta": {
        "page": 1,
        "per_page": 20,
        "total": 2
    }
}
 

Request      

GET api/v1/questionnaires

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

The page number to retrieve. Example: 1

per_page   integer  optional    

Number of items per page (max 100). Example: 20

status   string  optional    

Filter by status (draft, active, closed). Example: active

Retrieve a questionnaire. Returns the full detail of a single questionnaire, including its questions.

requires authentication

Example request:
curl --request GET \
    --get "https://developpers.isiquest.com/api/v1/questionnaires/101" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://developpers.isiquest.com/api/v1/questionnaires/101"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "id": 101,
    "title": "Employee engagement 2026",
    "status": "active",
    "language": "fr",
    "questions": [
        {
            "id": 1,
            "type": "single_choice",
            "label": "How satisfied are you?"
        },
        {
            "id": 2,
            "type": "open",
            "label": "What would you improve?"
        }
    ]
}
 

Example response (404):


{
    "message": "Questionnaire not found."
}
 

Request      

GET api/v1/questionnaires/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the questionnaire. Example: 101

Create a questionnaire. Creates a new questionnaire in draft status.

requires authentication

Example request:
curl --request POST \
    "https://developpers.isiquest.com/api/v1/questionnaires" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"title\": \"New onboarding survey\",
    \"language\": \"fr\",
    \"max_voters\": 500
}"
const url = new URL(
    "https://developpers.isiquest.com/api/v1/questionnaires"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "title": "New onboarding survey",
    "language": "fr",
    "max_voters": 500
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "id": 103,
    "title": "New onboarding survey",
    "status": "draft",
    "language": "fr"
}
 

Example response (422):


{
    "message": "The title field is required.",
    "errors": {
        "title": [
            "The title field is required."
        ]
    }
}
 

Request      

POST api/v1/questionnaires

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

title   string     

The questionnaire title. Example: New onboarding survey

language   string     

Default language code. Example: fr

max_voters   integer  optional    

Maximum number of respondents. Example: 500

Responses

List questionnaire responses. Returns the individual responses submitted for a given questionnaire.

requires authentication

Example request:
curl --request GET \
    --get "https://developpers.isiquest.com/api/v1/questionnaires/101/responses?since=2026-01-01" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://developpers.isiquest.com/api/v1/questionnaires/101/responses"
);

const params = {
    "since": "2026-01-01",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "response_id": "r_8812",
            "submitted_at": "2026-02-14T10:03:00Z",
            "completed": true
        },
        {
            "response_id": "r_8813",
            "submitted_at": "2026-02-14T11:20:00Z",
            "completed": false
        }
    ],
    "meta": {
        "total": 2
    }
}
 

Request      

GET api/v1/questionnaires/{id}/responses

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the questionnaire. Example: 101

Query Parameters

since   string  optional    

date Only responses submitted after this date (ISO 8601). Example: 2026-01-01

Submit a response. Submits a completed response to a questionnaire on behalf of a respondent.

requires authentication

Example request:
curl --request POST \
    "https://developpers.isiquest.com/api/v1/questionnaires/101/responses" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"respondent_email\": \"jane@example.com\",
    \"answers\": {
        \"1\": \"Very satisfied\",
        \"2\": \"Faster onboarding\"
    }
}"
const url = new URL(
    "https://developpers.isiquest.com/api/v1/questionnaires/101/responses"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "respondent_email": "jane@example.com",
    "answers": {
        "1": "Very satisfied",
        "2": "Faster onboarding"
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "response_id": "r_8900",
    "questionnaire_id": 101,
    "status": "recorded"
}
 

Request      

POST api/v1/questionnaires/{id}/responses

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the questionnaire. Example: 101

Body Parameters

respondent_email   string  optional    

The respondent's email. Example: jane@example.com

answers   object     

Map of question_id to answer value.