---
title: Rest API
slug: technical-docs/rest-api
description: Learn how to integrate IntelliProve's API into your application and gain insights into mental and physical health. This comprehensive documentation covers everything from obtaining user details to managing patient data. Explore code examples, endpoints, a
icon: 🌍
docTags: 
createdAt: 2022-12-02T16:13:25.000Z
---

# Introduction

The IntelliProve API is organised around [REST](http://en.wikipedia.org/wiki/Representational_State_Transfer). Our API has predictable resource-oriented URLs, accepts [JSON-encoded](https://en.wikipedia.org/wiki/JSON) request bodies, returns [JSON-encoded](http://www.json.org/) responses, and uses standard HTTP response codes, authentication, and verbs.

```none
https://engine.intelliprove.com
```

*Examples:*
POST https\://engine.intelliprove.com/v2/users
GET https\://engine.intelliprove.com/v2/users

:::hint{type="info"}
If you're new to this developer portal, we recommend starting with the [product documentation](docId\:d-z1x_fGlae_0R7HCnUTh) to get familiar with the main product concepts and functionalities. To integrate the plug-in into your platform and get started performing [Face Scans](docId\:mw6gpbZekcj_-_LZrQjLL), follow our [Getting started](docId\:qghLDn2mLA8w9rpKEigWn) guide.
:::



# Authentication

The IntelliProve API supports both **API keys** and JWT **Action Tokens** to authenticate HTTP requests.

All API requests must be made over [HTTPS](http://en.wikipedia.org/wiki/HTTP_Secure). Calls made over plain HTTP will fail.

Authentication and permission roles are defined per resource. The API key provides full access, while an action token provides a temporary form of authentication only compatible with a selection of the API endpoints. Refer to the table below for an overview.

::Image[]{src="https://api.archbee.com/api/optimize/_0R_DnpmBBLLXmaoWvG2u/7voyzcCJ7bCX7ihjTmWGO_image.png" size="68" width="1198" height="1688" position="center" darkWidth="1198" darkHeight="1688" showCaption="false"}

## API Keys

API Keys are distributed when you sign up for a plan with IntelliProve. They can't be created manually.

Upon agreement, you'll receive at least two API keys. Development API keys, which can be used during development, are aliased with a "-DEV" suffix.

| **Alias**         | **API Key&#x20;**(non-working examples)    |
| ----------------- | ------------------------------------------ |
| COMPANY\_NAME-DEV | `KUsWnp2vRGCfW8XPYJZeQdh-eT!n-Ms.UcyaETy3` |
| COMPANY\_NAME     | `fWeBpZ9CKaKb7pnk@vGtkQDjZFQ_U2g@GZu_Z74X` |

API keys should be provided using **Header-based API Key Authentication**:

:::CodeblockTabs
HTTP Headers

```none
x-api-key: <your-api-key>
```
:::

:::hint{type="warning"}
Your API keys carry many privileges and have no expiry date, so be sure to **keep them secure**! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth.
:::

### User linking when using API keys

Some API resources are user-specific, which means they are tied to a [User](docId\:BiuPVixvHltbukKLR2ATI). When accessing these resources with **API Key authentication**, you must explicitly specify **which user** the request should apply to. This is done by providing the **External User ID** in the request.

Specify the `external_user_id` using a **query parameter**:

```none
"&external_user_id=<your-external-user-id>"
```

Or, specify `external_user_id` using a **body parameter**:

:::CodeblockTabs
Request Body

```json
{
   "user_external_id": "<your-external-user-id>",
   ...
}
```
:::

:::hint{type="info"}
How to provide the `external_user_id` depends on the type of endpoint. Each endpoint clearly specifies whether it should be provided as query parameter or body parameter.
:::

## Action Tokens

Action tokens can be created using the IntelliProve API with a valid API key. Use the [Create user action token](docId\:BiuPVixvHltbukKLR2ATI) endpoint to do this.

Unlike API keys, User Action Tokens are always linked to a [User](docId\:BiuPVixvHltbukKLR2ATI), specified when creating the action token.&#x20;

Provide the action token in your request using the **Header-based Token Authentication**:

:::CodeblockTabs
HTTP Headers

```none
Authorization: Token <action-token-for-user>
```
:::

### When to use

Action tokens are specifically designed to be used in frontend code, as they have restricted access and automatically expire after a predefined timespan. However, they may also be used in backend code for certain usecases.

Action tokens can be used **for selected API endpoints** — an overview can be found in the table under [Authentication](docId\:BiuPVixvHltbukKLR2ATI).&#x20;

:::hint{type="warning"}
When using an action token, the `external_user_id` should not be specified in the request anymore, since it is already embedded in the token.
:::

When using action tokens, always  created the token right before a User performs an **action** in your front-end – hence the name ***Action Token.&#x20;***&#x54;his action token can be used while the user is performing the action (for example, consult the results of a Face Scan). If a user leaves a page and does another action, a new action token should be created.

## &#x20;Authentication Summary

|                           | **API key**                                           | **Action token**                                                                                                                                                  |
| ------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Scope**                 | Full access to all data.                              | Limited access to user-specific data.                                                                                                                             |
| **Lifetime and creation** | Created when you sign up for a plan. Does not expire. | Created by you using your API key. Expires after a few hours. Recommended to create and use within the scope of a user's action(s) on a page of your application. |
| **Usage**                 | Used for M2M communication.                           | Used for performing action induced by the frontend.                                                                                                               |
| **Link to user**          | Link manually via `external_user_id`.                 |  Automatically linked, `external_user_id` should not be passed in the request.                                                                                    |

# &#x20;Localisation

## Languages

Some endpoints support localized content. You can request a specific language by providing the language code in the relevant parameter

| **Language** | **Code** |
| ------------ | -------- |
| Dutch        | nl       |
| Danish       | da       |
| English      | en       |
| French       | fr       |
| German       | de       |
| Spanish      | es       |
| Swedish      | sv       |

When no language is provided, the default language is used.

## Unit systems

IntelliProve supports both the metric and imperial unit system for displaying data to users.
All data is stored in the metric system but can be converted to the imperial unit system if desired. The preference can be set for your entire account as a customer, or per user. If no preference is set, all responses default to the metric unit system.

### Order of unit system selection

::Image[Setting preference]{src="https://api.archbee.com/api/optimize/_0R_DnpmBBLLXmaoWvG2u/0KtnMO_jibFrgUCkvF2uD_image.png" size="86" width="1952" height="680" position="center" darkWidth="1952" darkHeight="680" showCaption="false"}

The preferred account-wide unit system setting can be communicated with your Customer Success Manager. A user's preferred unit system can be set using the [Users](https://docs.intelliprove.com/technical-docs/rest-api#users) endpoints.

## Errors

In general, Status Codes in the **2xx** range indicate success. Codes in the **4xx** range indicate an error that failed given the information provided (e.g., a required parameter was omitted or the request format is invalid, etc.). Codes in the **5xx** range indicate an error with IntelliProve’s servers.

| **Status Code**                 | **Description**                                                |
| ------------------------------- | -------------------------------------------------------------- |
| 200 - *OK*                      | Everything worked as expected                                  |
| 204 - *No Content*              | The request is correct, but there is no content to be returned |
| 400 - *Bad Request*             | The request was unacceptable                                   |
| 401 - *Not Authorized*          | No valid authentication provided                               |
| 403 - *Forbidden*               | Invalid permissions to perform the request                     |
| 404 - *Not Found*               | The request resource or endpoint does not exist                |
| 422 - *Unprocessable*           | One or more fields in the request body are invalid             |
| 500, 502, 503 - *Server Errors* | Something went wrong on our end                                |

The **4xx&#x20;**&#x61;nd **5xx** errors can be handled programmatically and include an error description that briefly explains the error reported.

:::CodeblockTabs
Error Format

```json
{
    "detail": "User not found!"
}
```
:::

An exception is made for the **422** errors, which give detailed information on which request parameter failed the validation.

:::CodeblockTabs
Validation Error Format

```json
{
    "detail": [
        {
            "loc": [
                "body",
                "data"
            ],
            "msg": "field required",
            "type": "value_error.missing"
        }
    ]
}
```
:::



# Users

**The User Object**

A User is a unique end-user accessing IntelliProve's services through your platform or app. Each User must be created once, enabling IntelliProve to track their Face Scans and build a personalized Health Profile.&#x20;

When creating a user, you choose your own `external_user_id` (referred to as "External User ID"). Make sure it is an **URL-encoded value**.

Once created, you can reference Users by their `external_user_id`.

| **User object properties**                          | **Description**                                                                                                                                                                       |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `user_id`<br />*uuid*                               | Unique, IntelliProve internal User ID, assigned to each end user.                                                                                                                     |
| `external_user_id`<br />*nullable string*           | The unique ID you choose when creating an IntelliProve User. Stored in your own backend and used when requesting user data. Referred to as **External User ID** in the documentation. |
| `customer`<br />*read-only string*                  | Your company's name, which the end user is linked to.                                                                                                                                 |
| `birth_date`<br />*nullable date object*            | Date of birth in YYYY-MM-dd format                                                                                                                                                    |
| `sex`<br />*nullable string enum*                   | Sex at birth<br />Values: "M", "F"                                                                                                                                                    |
| `language`<br />*nullable string enum*              | Two-letter language code<br />Values: "en", "nl", "fr", "da", "sv"                                                                                                                    |
| `preferred_unit_system`<br />*nullable string enum* | The preferred unit system for this user.<br />Values: "metric", "imperial"                                                                                                            |

:::hint{type="info"}
**Note on External User IDs****
We do not store the values you provide for the `external_user_id` directly. We only store a hashed version of the value you provided. This "security first"-approach is great for privacy and safety, but it does limit us from returning the value of `external_user_id` back to you. So make sure that you use a **unique** and **persisted** value for the `external_user_id` that you provide. The user's email address could be a good example of this.&#x20;

The External User ID can be changed after creating a user. See: [Update existing User](docId\:BiuPVixvHltbukKLR2ATI)
:::

:::ApiMethodV2
```json
{
  "tab": "examples",
  "url": "https://engine.intelliprove.com/v2/users",
  "name": "Create new User",
  "method": "POST",
  "request": {
    "pathParameters": [],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "Your API key"
      }
    ],
    "bodyDataParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "value": "brecht-test",
        "": "required"
      },
      {
        "name": "birth_date",
        "kind": "optional",
        "type": "string",
        "description": "User birth date in YYYY-MM-dd notation",
        "value": "1997-11-03",
        "": "1997-11-03"
      },
      {
        "name": "sex",
        "kind": "optional",
        "type": "string",
        "description": "Sex at birth value (M or F)",
        "value": "M",
        "": "M"
      },
      {
        "name": "language",
        "kind": "optional",
        "type": "string",
        "description": "Two-letter language code for preferred user language (default: en)",
        "children": []
      },
      {
        "name": "preferred_unit_system",
        "kind": "optional",
        "type": "string",
        "description": "The preferred unit system for this user. \"metric\" or \"imperial\"",
        "": "The preferred unit system for this user. \"metric\" or \"imperial\""
      }
    ],
    "formDataParameters": []
  },
  "results": {
    "languages": [
      {
        "id": "Xr-_rBdKtJ3tm9MpxEtUJ",
        "language": "201",
        "code": "{\n    \"user_id\": \"df55e9ab-77b9-4b32-bd83-d76de23f6f3d\",\n    \"customer\": \"<your-company-name>\",\n    \"external_user_id\": \"your_user_id\",\n    \"birth_date\": \"1964-01-12\",\n    \"sex\": \"M\",\n    \"language\": \"en\",\n    \"preferred_unit_system\": \"imperial\"\n}",
        "customLabel": ""
      },
      {
        "id": "TbOZok-npO3VfDXLbbIh9",
        "language": "401",
        "code": "{\n    \"detail\": \"Missing or invalid authentication credentials.\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "Xr-_rBdKtJ3tm9MpxEtUJ"
  },
  "examples": {
    "languages": [
      {
        "id": "tx21Iy5FxPrFPR243fMyk",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "tx21Iy5FxPrFPR243fMyk"
  },
  "description": "Create a new user with the provided user details.",
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "create-new-user",
  "legacyHash": "SrIJP7Z3aKUF-huzkhylB"
}
```
:::

:::hint{type="info"}
The `external_user_id` parameter is your own unique ID for the user.

The `language`parameter can be used to set the user's preferred language. If it is, this language will be used as default language for that user, e.g. when displaying widgets or for a [plug-in](docId\:wCS2Y1mG2PQnL4r4Mgg_Z) component, without having to explictly provide it there anymore.
:::

***

:::ApiMethodV2
```json
{
  "name": "Get User Details",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/users",
  "description": "Get user details by user ID or external user ID.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "bJ8kS_8-oqU8g1KVJV0ik",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "bJ8kS_8-oqU8g1KVJV0ik"
  },
  "results": {
    "languages": [
      {
        "id": "MeXA4-TxpZuV_R-bx741v",
        "language": "200",
        "code": "{\n    \"user_id\": \"df55e9ab-77b9-4b32-bd83-d76de23f6f3d\",\n    \"customer\": \"<customer-name>\",\n    \"birth_date\": \"1964-01-12\",\n    \"sex\": \"M\",\n   \"weight\": {\n        \"value\": 91,\n        \"unit\": \"kg\"\n    },\n    \"height\": {\n        \"value\": 183,\n        \"unit\": \"cm\"\n    },\n    \"hypertension\": 1,\n    \"language\": \"en\",\n    \"preferred_unit_system\": \"metric\"\n}",
        "customLabel": ""
      },
      {
        "id": "-PEPrBNT2VYuKLV8SR4HS",
        "language": "401",
        "code": "{\n    \"detail\": \"Missing or invalid authentication credentials.\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "MeXA4-TxpZuV_R-bx741v"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-user-details",
  "legacyHash": "sOsqsIbK0hKTSbii8bsDy"
}
```
:::

***

:::ApiMethodV2
```json
{
  "name": "Update existing User",
  "method": "PUT",
  "url": "https://engine.intelliprove.com/v2/users/:user_id",
  "description": "Update a User's information. All fields that are not provided in the body will be left unchanged.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "bJ8kS_8-oqU8g1KVJV0ik",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "bJ8kS_8-oqU8g1KVJV0ik"
  },
  "results": {
    "languages": [
      {
        "id": "MeXA4-TxpZuV_R-bx741v",
        "language": "200",
        "code": "{\n    \"user_id\": \"df55e9ab-77b9-4b32-bd83-d76de23f6f3d\",\n    \"customer\": \"<customer-name>\",\n    \"birth_date\": \"1964-01-15\",\n    \"sex\": \"F\",\n    \"language\": \"nl\",\n    \"preferred_unit_system\": \"metric\"\n}",
        "customLabel": ""
      },
      {
        "id": "2YnlHMc4b7yo8Qe3UTw3t",
        "language": "401",
        "code": "{\n    \"detail\": \"Missing or invalid authentication credentials.\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "MeXA4-TxpZuV_R-bx741v"
  },
  "request": {
    "pathParameters": [
      {
        "name": "user_id",
        "kind": "required",
        "type": "string",
        "description": "IntelliProve internal User ID. Obtain via 'Get User Details' endpoint.",
        "": "IntelliProve internal User ID. Obtain via 'Get User Details' endpoint."
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [
      {
        "name": "external_user_id",
        "kind": "optional",
        "type": "string",
        "description": "New external User ID",
        "": "New external User ID"
      },
      {
        "name": "birth_date",
        "kind": "optional",
        "type": "string",
        "description": "User birth date in YYYY-MM-dd notation",
        "children": []
      },
      {
        "name": "sex",
        "kind": "optional",
        "type": "string",
        "description": "Sex at birth value (M or F)",
        "children": []
      },
      {
        "name": "language",
        "kind": "optional",
        "type": "string",
        "description": "Two-letter language code for preferred user language (default: en)",
        "children": []
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "hasTryItOut": false,
  "autoGeneratedAnchorSlug": "update-existing-user",
  "legacyHash": "wouKIfRAXSM-Hx5ftUbtF"
}
```
:::

:::hint{type="info"}
You can obtain the IntelliProve`user_id` via the the 'Get User Details' API endpoint, providing your own unique ID for the user via the`external_user_id` parameter.
:::

***

:::ApiMethodV2
```json
{
  "tab": "examples",
  "url": "https://engine.intelliprove.com/v2/users/authenticate",
  "name": "Create user action token",
  "method": "POST",
  "request": {
    "pathParameters": [],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      }
    ],
    "formDataParameters": []
  },
  "results": {
    "languages": [
      {
        "id": "KctN4gzloT_SdN_T_Cyop",
        "code": "{\n    \"token\": \"<ACTION_TOKEN>\"\n}",
        "language": "201",
        "customLabel": ""
      },
      {
        "id": "a5J1Ma31hQ8YyA_MCHN3O",
        "language": "401",
        "code": "{\n    \"detail\": \"Missing or invalid authentication credentials.\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "KctN4gzloT_SdN_T_Cyop"
  },
  "examples": {
    "languages": [
      {
        "id": "s0McDUwkInbnrG9pa-tHB",
        "code": "",
        "language": "json",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "s0McDUwkInbnrG9pa-tHB"
  },
  "description": "Create a new action token for a user based on the external user ID.",
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "create-user-action-token",
  "legacyHash": "mzKIh1cI380eBuHo46bao"
}
```
:::

***

:::ApiMethodV2
```json
{
  "tab": "examples",
  "url": "https://engine.intelliprove.com/v2/users/",
  "name": "Delete user",
  "method": "DELETE",
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "user_id",
        "kind": "required",
        "type": "string",
        "description": "IntelliProve internal User ID. Obtain via 'Get User Details' endpoint.",
        "": "IntelliProve internal User ID. Obtain via 'Get User Details' endpoint."
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "results": {
    "languages": [
      {
        "id": "KctN4gzloT_SdN_T_Cyop",
        "code": "",
        "language": "204",
        "customLabel": ""
      },
      {
        "id": "3HfDVO9HJTKEsgfJmuccR",
        "language": "401",
        "code": "{\n    \"detail\": \"Missing or invalid authentication credentials.\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "KctN4gzloT_SdN_T_Cyop"
  },
  "examples": {
    "languages": [
      {
        "id": "s0McDUwkInbnrG9pa-tHB",
        "code": "",
        "language": "json",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "s0McDUwkInbnrG9pa-tHB"
  },
  "description": "Delete all user data, including user profiles and face scan results, based on the user ID.",
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "hasTryItOut": false,
  "autoGeneratedAnchorSlug": "delete-user",
  "legacyHash": "an8XrbtQRy7DTqWB2JRzi"
}
```
:::

# Face Scan

To request a Face Scan URL, the user performing the scan must be created with IntelliProve. This only needs to be done once for each user and can be done with the [Create New User](docId\:BiuPVixvHltbukKLR2ATI) API endpoint. To create the user, you must provide a unique reference for the user as a query parameter: `external_user_id`.&#x20;

:::ApiMethodV2
```json
{
  "name": "Get Face Scan URL",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/userjourneys/scan",
  "description": "Get the Face Scan URL for a specific user based on the user ID or external user reference.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "se4aeD7spl3rfAvYNYBk9",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "se4aeD7spl3rfAvYNYBk9"
  },
  "results": {
    "languages": [
      {
        "id": "wZSEOVY__ZhyimuELNr_d",
        "language": "200",
        "code": "\"<FaceScan_URL>\"",
        "customLabel": ""
      },
      {
        "id": "sHm5UZeClVRG1HjjdZzBK",
        "language": "401",
        "code": "{\n    \"detail\": \"Missing or invalid authentication credentials.\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "wZSEOVY__ZhyimuELNr_d"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      },
      {
        "name": "language",
        "kind": "optional",
        "type": "string",
        "description": "Two-letter language code for overriding user-level preferred language",
        "children": []
      },
      {
        "name": "expire_at",
        "kind": "optional",
        "type": "string",
        "description": "Expiry datetime timestamp. In ISO format (e.g. 2025-04-01T00:00:00)",
        "": "Expiry datetime timestamp. In ISO format (e.g. 2025-04-01T00:00:00)"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-face-scan-url",
  "legacyHash": "EWe_zY3iB2RoAkF0OSHx8"
}
```
:::

:::hint{type="danger"}
**Note**: The URL provided in the response may change over time. This applies not only to the `action token`, which is unique for each request, but also to the subdomain, which may update with new versions of the plug-in. To prevent issues, avoid hardcoding any part of the URL. Always use the full response URL as provided.

Additionally, ensure that your HTML security headers (e.g., Content Security Policy headers) allow all **intelliprove.com** subdomains. This is essential for the proper functioning of the IntelliProve plug-in and future updates.
:::

:::hint{type="info"}
Please note that the `language`, when specified here, overrides the default language set for the user, specified when [creating the user](docId\:BiuPVixvHltbukKLR2ATI).
:::

# Biomarkers

:::ApiMethodV2
```json
{
  "name": "Get Face Scan Biomarkers",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/face_scans/:face_scan_id",
  "description": "Get Biomarkers for a specific Face Scan, using the Face Scan ID.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "ZXQM3VYIgfRnc3vs3312K",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "ZXQM3VYIgfRnc3vs3312K"
  },
  "results": {
    "languages": [
      {
        "id": "9bmCZnQvm1yn2yYvkHgyU",
        "language": "200",
        "code": "{\n  \"face_scan_id\": \"ea23e5cd-22c8-1e54-bd82-e89de12a7e1b\"\n  \"heart_rate\": 56,\n  \"respiratory_rate\": 12,\n  \"heart_rate_variability\": 123,\n  \"resonant_breathing_score\": 18,\n  \"systolic_blood_pressure\": 128,\n  \"diastolic_blood_pressure\": 77,\n  \"timestamp_epoch\": 1742919213,\n  \"timestamp\": \"2025-03-25T17:13:33.147258+01:00\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "9bmCZnQvm1yn2yYvkHgyU"
  },
  "request": {
    "pathParameters": [
      {
        "name": "face_scan_id",
        "kind": "required",
        "type": "String",
        "description": "Face Scan UUID",
        "children": []
      }
    ],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-face-scan-biomarkers",
  "legacyHash": "D7vCqczBuzE-0VVYKN8UT"
}
```
:::

***

:::ApiMethodV2
```json
{
  "name": "Get multiple Face Scan Biomarkers",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/face_scans/",
  "description": "Get the Biomarkers from multiple Face Scans of a user by specifying start date, end date and count. The user is specified through the action token.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "ZXQM3VYIgfRnc3vs3312K",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "ZXQM3VYIgfRnc3vs3312K"
  },
  "results": {
    "languages": [
      {
        "id": "9bmCZnQvm1yn2yYvkHgyU",
        "language": "200",
        "customLabel": "",
        "code": "[\n  {\n    \"face_scan_id\": \"ea23e5cd-22c8-1e54-bd82-e89de12a7e1b\"\n    \"heart_rate\": 65,\n    \"respiratory_rate\": 12,\n    \"heart_rate_variability\": 123,\n    \"resonant_breathing_score\": 18,\n    \"systolic_blood_pressure\": 128,\n    \"diastolic_blood_pressure\": 77,\n    \"timestamp_epoch\": 1742919213,\n    \"timestamp\": \"2025-03-25T17:13:33.147258+01:00\"\n  },\n  ...\n]"
      }
    ],
    "selectedLanguageId": "9bmCZnQvm1yn2yYvkHgyU"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "start",
        "kind": "optional",
        "type": "string",
        "description": "Start date, all returned face scans will be after this date time. ISO Format",
        "": "Start date, all returned face scans will be after this date time. ISO Format"
      },
      {
        "name": "end",
        "kind": "optional",
        "type": "string",
        "description": "End date, all returned face scans will be before this date time. ISO Format",
        "": "End date, all returned face scans will be before this date time. ISO Format"
      },
      {
        "name": "order",
        "kind": "optional",
        "type": "string",
        "description": "Order of the returned face scans: 'asc' or 'desc'. Default: 'asc'",
        "": "Order of the returned face scans: 'asc' or 'desc'. Default: 'asc'"
      },
      {
        "name": "count",
        "kind": "optional",
        "type": "string",
        "description": "Max number of face scans to return. Defaults to 10.",
        "": "Max number of face scans to return. Defaults to 10."
      },
      {
        "name": "external_user_id",
        "kind": "optional",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "external_user_id"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-multiple-face-scan-biomarkers",
  "legacyHash": "UjUx3l_YsmpdXTt1NJkJS"
}
```
:::

***

:::ApiMethodV2
```json
{
  "name": "Get Latest Face Scan Biomarkers",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/face_scans/latest",
  "description": "Get the Biomarkers from the latest Face Scan(s) of a user. The user is specified through the action token. The count can be specified to request more than one Face Scan.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "ZXQM3VYIgfRnc3vs3312K",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "ZXQM3VYIgfRnc3vs3312K"
  },
  "results": {
    "languages": [
      {
        "id": "9bmCZnQvm1yn2yYvkHgyU",
        "language": "200",
        "customLabel": "",
        "code": "[\n  {\n    \"face_scan_id\": \"ea23e5cd-22c8-1e54-bd82-e89de12a7e1b\"\n    \"heart_rate\": 65,\n    \"respiratory_rate\": 12,\n    \"heart_rate_variability\": 123,\n    \"resonant_breathing_score\": 18,\n    \"systolic_blood_pressure\": 128,\n    \"diastolic_blood_pressure\": 77,\n    \"timestamp_epoch\": 1742919213,\n    \"timestamp\": \"2025-03-25T17:13:33.147258+01:00\"\n  },\n  ...\n]"
      }
    ],
    "selectedLanguageId": "9bmCZnQvm1yn2yYvkHgyU"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "count",
        "kind": "optional",
        "type": "string",
        "description": "Last x number of measurements.\nDefault = 1",
        "": "Last x number of measurements.\nDefault = 1"
      },
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-latest-face-scan-biomarkers",
  "legacyHash": "N_lEAubtAdOPSsMMFYO4F"
}
```
:::

# Metrics

Use this endpoint to get Health Metric data for users.

:::ApiMethodV2
```json
{
  "name": "Get Health metrics",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/metrics",
  "description": "Get the metrics for a single user.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "LY-K8enKJy3XdFr9FL8N0",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "LY-K8enKJy3XdFr9FL8N0"
  },
  "results": {
    "languages": [
      {
        "id": "ExKhp1CP6MNfc8lAcXNPm",
        "language": "200",
        "code": "{\n  \"metrics\": {\n    \"energy_balance\": {\n      \"score\": 82.13,\n      \"confidence\": 80.0\n    },\n    \"general_fitness\": {\n      \"score\": 71.08,\n      \"confidence\": 60.0\n    },\n    \"hypertension\": {\n      \"score\": 92.0,\n      \"confidence\": 33.33\n    },\n    \"mental_health_risk\": {\n      \"score\": 49.85,\n      \"confidence\": 66.67\n    },\n    \"mental_stress\": {\n      \"score\": 86.56,\n      \"confidence\": 70.0\n    },\n    \"sleep_quality\": null\n  },\n  \"last_update\": \"2025-10-13T14:49:02.111245+02:00\"\n}",
        "customLabel": ""
      },
      {
        "id": "DAg4PRqG3IhNdon3NIIDP",
        "language": "204",
        "code": "",
        "customLabel": ""
      },
      {
        "id": "B3-mCfSzQgfgF_sxOc8O0",
        "language": "400",
        "code": "{\n  \"detail\": \"Invalid UUID provided!\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "ExKhp1CP6MNfc8lAcXNPm"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-health-metrics",
  "legacyHash": "wp0oPbizXhP21HJZjTzsz"
}
```
:::

:::hint{type="info"}
All `score` and `confidence` values are percentages between 0 and 100, accurate to 2 decimal places.

If a metric is `null`, like `sleep_quality` in the example above, no data is available for this user on this metric.
:::

# Wellbeing topics

Get scores related to the different [wellbeing topics.](docId\:z2QnAeG2rU_3T3hBhW8Rh)&#x20;

:::ApiMethodV2
```json
{
  "name": "Get wellbeing scores",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/userprofiles/wellbeing",
  "description": "Get all the wellbeing scores for a user. A score is a value between 0-100, representing a percentage, per topic. The user is specified through the action token.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "se4aeD7spl3rfAvYNYBk9",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "se4aeD7spl3rfAvYNYBk9"
  },
  "results": {
    "languages": [
      {
        "id": "wZSEOVY__ZhyimuELNr_d",
        "language": "200",
        "code": "{\n  \"mental\": <mental-score>, // e.g. 82\n  \"physical\": <physical-score>, // e.g. 82\n  \"energy_sleep\": <energy-sleep-score>, // e.g. 82\n  \"status_label\": <label> // e.g. \"GGG\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "wZSEOVY__ZhyimuELNr_d"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-wellbeing-scores",
  "legacyHash": "Kr4eeRzYwUdOqsu5hpTaR"
}
```
:::

:::hint{type="info"}
**Important note on the scores:**

- The score is a value between 0 and 100
- A score around 50% means average for that user, taking into account their age and sex.
- A score below 50% is considered below average, i.e. suboptimal.
- A score above 50% is considered above average, i.e. optimal.

Make sure to take this into account when visualizing the scores in your app.
More information about the wellbeing topics: [Understanding Wellbeing Topics](docId\:z2QnAeG2rU_3T3hBhW8Rh).

**On the status label:**

- The response also includes a `status_label` field, which provides a quick interpretation of the scores in the following order: \[physical, mental, energy\_sleep]. For example, a value of "GLN" means "optimal physical score, suboptimal mental health score, average energy & sleep score".
- The possible values are: Unknown = 'U', suboptimal = 'L',  Normal/average = 'N'. Optimal = 'G'
:::

# Questions

The following endpoints are related to questions regarding user details such as age, weight or sex. These are used  build an accurate baseline profile for each user and are essential for the calculation of metrics. Questions during the Face Scan allow the user to directly provide this information. However, if you already have this information, you can provide it to us via the API. The question will then not be asked in the Face Scan flow anymore.

Refer to the [Plug-in components](docId\:djhYobp_3w-87jKk0o1Ho) documentation for more information.

***

:::ApiMethodV2
```json
{
  "name": "Get all question lookup keys",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/questions/all",
  "description": "Get a list of all supported question lookup keys.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "LY-K8enKJy3XdFr9FL8N0",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "LY-K8enKJy3XdFr9FL8N0"
  },
  "results": {
    "languages": [
      {
        "id": "ExKhp1CP6MNfc8lAcXNPm",
        "language": "200",
        "customLabel": "",
        "code": "[\n    \"height\",\n    \"weight\",\n    \"balance_coordination\",\n    \"hours_sport_week\",\n    \"daily_activities\",\n    \"nightly_wake_ups\",\n    \"feeling_stressed_last_month\",\n    \"struggling_irritations_last_month\",\n    \"things_your_way_last_month\",\n    \"average_sleep_hours\",\n    ...\n]"
      }
    ],
    "selectedLanguageId": "ExKhp1CP6MNfc8lAcXNPm"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-all-question-lookup-keys",
  "legacyHash": "3IPpdEgG0H4LBUqgUtkM2"
}
```
:::

:::hint{type="info"}
This endpoint returns all availble lookup keys and is not customer or user specific.
:::

***

:::ApiMethodV2
```json
{
  "name": "Get all answered questions",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/questions/answered",
  "description": "Get a list of all the questions a user has answered.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "LY-K8enKJy3XdFr9FL8N0",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "LY-K8enKJy3XdFr9FL8N0"
  },
  "results": {
    "languages": [
      {
        "id": "ExKhp1CP6MNfc8lAcXNPm",
        "language": "200",
        "code": "{\n  \"items\": [\n    {\n      \"question_lookup_key\": \"things_your_way_last_month\",\n      \"answer\": 4,\n      \"score\": 40,\n      \"health_scan_id\": \"f8a706bf-022a-...\",\n      \"local_timestamp\": \"1970-01-01T10:00:00.000000+02:00\"\n    },\n    {\n      \"question_lookup_key\": \"parental_hypertension\",\n      \"answer\": 1,\n      \"score\": null,\n      \"health_scan_id\": \"f8a706bf-022a-...\",\n      \"local_timestamp\": \"1970-01-01T10:00:00.000000+02:00\"\n    },\n    {\n      \"question_lookup_key\": \"smoking\",\n      \"answer\": 1,\n      \"score\": 95,\n      \"health_scan_id\": \"f8a706bf-022a-...\",\n      \"local_timestamp\": \"1970-01-01T10:00:00.000000+02:00\"\n    },\n    ...\n  ],\n  \"pagination\": {\n    \"page\": 1,\n    \"page_size\": 10,\n    \"total_pages\": 1,\n    \"total_items\": 20,\n    \"next_page\": null\n  }\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "ExKhp1CP6MNfc8lAcXNPm"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "optional",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "External User ID, chosen when creating the user"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-all-answered-questions",
  "legacyHash": "zzu8brCuNF9U7LivCcE43"
}
```
:::

***

:::ApiMethodV2
```json
{
  "name": "Save question answer",
  "method": "POST",
  "url": "https://engine.intelliprove.com/v2/questions/answer",
  "description": "Save an answer to a question for one of your users",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "LY-K8enKJy3XdFr9FL8N0",
        "language": "json",
        "code": "{\n    \"value\": 24,\n    \"lookup_key\": \"age\",\n    \"timezone\": \"Europe/Brussels\"\n}",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "LY-K8enKJy3XdFr9FL8N0"
  },
  "results": {
    "languages": [
      {
        "id": "ExKhp1CP6MNfc8lAcXNPm",
        "language": "201",
        "customLabel": "",
        "code": "{\n    \"lookup_key\": \"age\",\n    \"value\": 24,\n    \"user_id\": \"df55e9ab-77b9-4b32-bd83-d76de23f6f3d\"\n}"
      }
    ],
    "selectedLanguageId": "ExKhp1CP6MNfc8lAcXNPm"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "optional",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "External User ID, chosen when creating the user"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "hasTryItOut": false,
  "autoGeneratedAnchorSlug": "save-question-answer",
  "legacyHash": "YLc5GukpJFA93CuE2fA9I"
}
```
:::

:::hint{type="info"}
The `value` field always expects an `integer` value. For more information on the different `lookup keys` and possible `values` for each question, refer to the IntelliProve Admin Tool.
:::

***

:::ApiMethodV2
```json
{
  "name": "Save multiple question answers",
  "method": "POST",
  "url": "https://engine.intelliprove.com/v2/questions/answer/many",
  "description": "Save an answer to a question for one of your users",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "LY-K8enKJy3XdFr9FL8N0",
        "language": "json",
        "code": "[\n  {\n     \"value\": 24,\n     \"lookup_key\": \"age\",\n     \"timezone\": \"Europe/Brussels\"\n  },\n  ...\n]",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "LY-K8enKJy3XdFr9FL8N0"
  },
  "results": {
    "languages": [
      {
        "id": "ExKhp1CP6MNfc8lAcXNPm",
        "language": "201",
        "customLabel": "",
        "code": "[\n  {\n    \"lookup_key\": \"age\",\n    \"value\": 24,\n    \"user_id\": \"df55e9ab-77b9-4b32-bd83-d76de23f6f3d\"\n  },\n  ...\n]"
      }
    ],
    "selectedLanguageId": "ExKhp1CP6MNfc8lAcXNPm"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "optional",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "External User ID, chosen when creating the user"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "optional",
        "type": "string",
        "description": "Your API key",
        "": "Your API key"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "hasTryItOut": false,
  "autoGeneratedAnchorSlug": "save-multiple-question-answers",
  "legacyHash": "bdI2fL5Lu08q09vThMvEp"
}
```
:::

:::hint{type="info"}
For more information on the different `lookup keys` and possible `values`, refer to the IntelliProve Admin Tool.
:::

# Dashboards

These API endpoints provide easy ways to generate URLs to personalised user dashboards. Each generated URL includes a temporary, user-specific access token that grants limited-time access to the dashboard.

:::hint{type="info"}
All the dashboard endpoints can only be accessed using the API Key.
:::

:::ApiMethodV2
```json
{
  "name": "Get Health dashboard URL",
  "method": "POST",
  "url": "https://engine.intelliprove.com/v2/dashboards/health",
  "description": "Request a one-time URL for the users personal health dashboard by user ID or external user ID.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "LY-K8enKJy3XdFr9FL8N0",
        "language": "json",
        "code": "{\n    \"external_user_id\": \"user.email@example.com\",\n    \"language\": \"en\",\n    \"disabled_sections\": [ \"recommendations\", \"todos\", \"biomarkers\", \"metrics\"] # pick what you want to disable\n}",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "LY-K8enKJy3XdFr9FL8N0"
  },
  "results": {
    "languages": [
      {
        "id": "ExKhp1CP6MNfc8lAcXNPm",
        "language": "201",
        "customLabel": "",
        "code": "\"https://dashboard.intelliprove.com?action_token=<generated-action-token>&language=en\""
      }
    ],
    "selectedLanguageId": "ExKhp1CP6MNfc8lAcXNPm"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "Your API key"
      }
    ],
    "bodyDataParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      },
      {
        "name": "language",
        "kind": "optional",
        "type": "string",
        "description": "Two-letter language code override. Default: user language",
        "": "Two-letter language code override. Default: user language"
      },
      {
        "name": "disabled_sections",
        "kind": "optional",
        "type": "array",
        "description": "Add section ('main', 'metrics', 'biomarkers' or 'recommendations') to list to disable it. Default: Empty list.",
        "": "Add section ('main', 'metrics', 'biomarkers' or 'recommendations') to list to disable it. Default: Empty list."
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "hasTryItOut": false,
  "autoGeneratedAnchorSlug": "get-health-dashboard-url",
  "legacyHash": "zYSS10W38tGpFMpUiLUqR"
}
```
:::



# Recommendations

These API endpoints allow you to get and manage your recommendations for your users.

:::ApiMethodV2
```json
{
  "name": "Get recommendations for user",
  "method": "GET",
  "url": "https://engine.intelliprove.com/v2/recommendations",
  "description": "Get a list of your recommendations filtered for the specified user based on their IntelliProve profile and health scans.\nThis endpoint can be called with both API keys or using an action token.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "LY-K8enKJy3XdFr9FL8N0",
        "language": "json",
        "code": "",
        "customLabel": "Request Body"
      }
    ],
    "selectedLanguageId": "LY-K8enKJy3XdFr9FL8N0"
  },
  "results": {
    "languages": [
      {
        "id": "ExKhp1CP6MNfc8lAcXNPm",
        "language": "200",
        "code": "{\n    \"recommendations\": [\n        {\n            \"title\": \"Get energized with partner\",\n            \"description\": \"A descriptive text about your recommendation\",\n            \"action_url\": \"https://engine.intelliprove.com/v2/tracking/Cnf0xxxxxxxxxxxx\",\n            \"action_text\": \"Take me there\",\n            \"image_url\": \"https://cdn.intelliprove.com/customers/my-customer/recommendations/some-image-name.jpg\",\n            \"related_metric\": \"energy_balance\",\n            \"relevance\": 1,\n            \"lookup_key\": \"energy_balance_1\"\n        },\n        ...\n    ]\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "ExKhp1CP6MNfc8lAcXNPm"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "name": "external_user_id",
        "kind": "required",
        "type": "string",
        "description": "External User ID, chosen when creating the user",
        "": "required"
      },
      {
        "name": "language",
        "kind": "optional",
        "type": "string",
        "description": "Two-letter language code override. Default: user language",
        "": "Two-letter language code override. Default: user language"
      }
    ],
    "headerParameters": [
      {
        "name": "x-api-key",
        "kind": "required",
        "type": "string",
        "description": "Your API key",
        "": "required"
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "hasTryItOut": true,
  "autoGeneratedAnchorSlug": "get-recommendations-for-user",
  "legacyHash": "xOaoXehuHJq9H7Mzyf3a2"
}
```
:::

The `relevance`property is a number starting from 1. Relevance 1 is most relevant, 2 second, etc.

