--- title: "Supplemental information for API call POST ⧸learn⧸v1⧸lo⧸﹛id﹜⧸track" slug: "supplemental-information-for-api-call-post-learnv1loidtrack" description: "Explore the inputs and outputs for the POST /learn/v1/lo//track endpoint, detailing tracking types for assignments, quizzes, surveys, and more." updated: 2026-03-20T14:50:16Z published: 2026-03-20T14:50:16Z canonical: "developer.docebo.com/supplemental-information-for-api-call-post-learnv1loidtrack" --- > ## Documentation Index > Fetch the complete documentation index at: https://developer.docebo.com/llms.txt > Use this file to discover all available pages before exploring further. # Supplemental information for API call POST ⧸learn⧸v1⧸lo⧸﹛id﹜⧸track ## Introduction This article describes the various inputs and outputs available for the endpoint: POST `/learn/v1/lo/{id}/track` The inputs and outputs vary depending on the type of the training material identified by its ID in the API call. ## Supplemental Information Presented here is a list of possible inputs and outputs, sorted by training material type. ### Assignments InputOutput #### Parameters `type` **(string, required)** The type of tracking. Possible values are: - `submission` - `comment_reply` `submission` **(object, required)** The data payload for the current tracking `id` **(integer, optional)** The reply identifier. This parameter is required only when `type` is `comment_reply`. `learner_reply` **(string, optional)** The text of the reply. This parameter is required only when `type` is `comment_reply`. `name` **(string, optional)** The title of the submitted assignment. Required only when `type` is `submission`. `description` **(string, optional)** An optional description of the submitted assignment `files` **(array, optional)** An array of uploaded S3 file URLs as part of the submission. Required only when `type` is `submission`. `url` **(string, required)** The URL of the file `video_url` **(string, optional)** The URL (for example, YouTube) submitted in the assignment. Required only when `type` is `submission`. #### Structure ```scheme {  track: {    type: (string, required),    submission: (object, required) {      id: (integer, required),      learner_reply: (string, required),      name: (string, required),      description: (string, optional),      files: (array, optional) [{        url: (string, required)      }],      video_url: (string, optional)    }  } } ``` #### Values `id` **(integer, optional)** The internal ID of the submitted item. Returned only when `type` is `submission`. #### Structure ```scheme {  acknowledge: {    id: (integer, optional)  } } ``` ### File InputOutput None #### Values `url` **(string, required)** The URL of the S3 file to download #### Structure ```scheme {  acknowledge: {    url: (string, required)  } } ``` ### Googledrive InputOutput None #### Values `url` **(string, required)** The URL of the Google Drive file to play #### Structure ```scheme {    acknowledge: {        url: (string, required)    } } ``` ### Htmlpage InputOutput None #### Values `content` **(string, required)** The HTML content to display #### Structure ```scheme {  acknowledge: {    content: (string, required)  } } ``` ### Quiz InputOutput #### Parameters `action` **(string, required)** The action to perform on this quiz. Possible values are: - `start` - `continue` - `next` - `prev` - `submit_partial` - `submit` - `time_elapsed_submit` - `time_enabled_force_exit` - `review` `questions` **(object, optional)** An object containing the quiz answers to submit, indexed by question ID `[id: (string)]` **(object, required - the ID parameter itself is a string of the question ID)** `user_status` **(object, required)** `answer` **(integer, optional)** The answer to this question. Required for question of type: - `choice` - `extended_text` - `text_entry` - `upload` - `inline_choice` `answers` **(object, optional)** An object containing a list of answers. Required for question of type: - `choice_multiple` - `fill_in_the_blank` - `associate` `[id: (string)]` **(boolean | string | number, optional - the ID parameter itself is a string)** The selected answers to this question, indexed by answer ID. Is **boolean** if the question is `type` `choice_multiple` (for example, `true = selected`). Is string if the question is `type` `fill_in_the_blank` (for example, `answers: {"[answ 1]": "USA", "[answ 2]": "IT"}`). Is number if the question is `type` `associate` (for example, `answers: {"12": 1, "13": 2, "14": 3}`). #### Structure ```scheme {  track: {    action: (string, required),    questions: (object, required) {      [id: (string, required)]: (object, required){        user_status: (object, required) {          answer: (string, optional)          answers: {            [id: (string, required)]: (boolean / string / number)          }        }      }    }  } } ``` #### Values `questions` **(array, required)** An array of questions for the requested page `question` **(string, required)** The ID of the question `question_index` **(integer, required)** The position of the question in the page `type` **(string, required)** The type of question. Possible values are: - `associate` - `choice` - `choice_multiple` - `extended_text` - `fill_in_the_blank` - `inline_choice` - `text_entry` - `title` - `upload` `title` **(string, optional)** The question title to display `category` **(string, optional)** The question category `time_limit` **(integer, optional)** The time limit per question. Used only if time options for the test is `per_question`. `additional_info` **(object, optional)** Additional information used by specific question types `answers` **(array, optional)** Possible answers to the given question. Used only for questions where type is: - `choice` - `choice_multiple` - `inline_choice` - `associate` `id_answer` **(number, required)** The answer ID `text` **(string, required)** The answer title `associations` **(array, optional)** Possible association answers. Used only for questions where `type` is `associate`. `id` **(number, required)** The ID of the associated answer `title` **(string, required)** The title of the associated answer `user_status` **(object, optional)** An object containing the answers provided by the user so far `answer` **(string, optional)** The answer to this question. Required only for questions where type is: - `choice` - `extended_text` - `text_entry` - `upload` - `inline_choice` `answers` **(object, optional)** An object containing the answers to this question. Required only for questions where `type` is: - `choice_multiple` - `fill_in_the_blank` - `associate` `[id: (string)]` **(boolean | string | number, required - the ID itself is a string of the answer ID)** The selected answers to this question, indexed by answer ID. Returns a boolean value when the question type is choice_multiple. Returns a string when the question type is fill_in_the_blank. Returns a number when the question type is associate. `page_number` **(integer, optional)** The page number, returned only if there is a previous or next page. `user_status` **(object, optional)** The user status information for the current test `status` **(string, required)** The current quiz status for this user. Possible values are: - `not_submitted` - `submitted` `score` **(decimal, optional)** The current calculated score for the user `evaluation_status` **(string, optional)** If status is submitted, this contains the evaluation status. Possible values are: - `waiting_evaluation` - `evaluated` `completion_status` **(string, required)** The completion status. Possible values are: - `completed` - `passed` - `failed` - `attempted` `suspension_time` **(integer, optional)** This property sets how many minutes the user should wait before the test is unsuspended. If this value is set, the test is currently suspended. `time_consumed` **(string, optional)** Tracks the amount of time consumed by the user. Only used if `time_option` is `per_test`. `attempts_consumed` **(integer, optional)** Tracks the number of attempts consumed by the user. Only used if `max_attempts` is not `0`. `feedback_message` **(string, optional)** An optional message that depends on the actual user score. Can be displayed if the quiz is in the status: - `suspended` - `retakable` - `max_attempts_reached` `score_per_category` **(array, optional)** An optional array containing the calculated scores divided by category `category_name` **(string, required)** The name of the category `questions_count` **(integer, required)** The number of questions inside this category `score` **(decimal, required)** The calculated score for this category `total_score` **(decimal, required)** The total score `questions_id` **(string[], required)** An array of question IDs for this category `average_user_score` **(decimal, optional)** The average score of other users who have already completed the test `show_results` **(boolean, required)** Returns `TRUE` if the results should be displayed, otherwise returns `FALSE` #### Structure ```scheme {  acknowledge: {    questions: [{      question: (string, required),      question_index: (integer, required),      type: (string, required),      title: (string, optional),      category: (string, optional),      time_limit: (integer, optional),      additional_info: (object, optional) {        answers: (array, optional) [{          id_answer: (number, required),          text: (string, required)        }],        associations: (array, optional) [{          id: (number, required),          title: (string, required)        }],      },      user_status: (object, optional) {        answer: (string, optional)        answers: (object, optional) {          [id: (string, required)]: (boolean / string / number, required)        }      }    }],    page_number: (integer, optional),    user_status: (object, optional) {      status: (string, required),      score: (decimal, required),      evaluation_status: (string, optional),      completion_status: (string, required),      suspension_time: (integer, optional),      time_consumed: (string, optional),      attempts_consumed: (integer, optional),      feedback_message: (string, optional),      score_per_category: (array, optional) [{        category_name: (string, required),        questions_count: (integer, required),        score: (decimal, required),        total_score: (decimal, required),        questions_id: (string[], required)      }],      average_user_score: (decimal, optional),      show_results: (boolean, required)    }  } } ``` ### Slides Converter InputOutput #### Parameters `bookmark` **(integer, required)** The last slide number played by the learner #### Structure ```scheme {  track: {    bookmark: (integer, required)  } } ``` None ### Survey InputOutput #### Parameters `submitted` **(boolean, optional)** Submit the poll as completed `questions` **(object, optional)** A list of question ID - answer pairs `[id: string]` **(object, required)** The ID of the question for which the answer is given `user_status` **(object, required)** The user answer to the question `answer` **(string, optional)** The answer to the question. Required only if type is: - `choice` - `inline_choice` - `extended_text` `answers` **(string[], optional)** The answers to the question. Required only if type is: - `likert_scale` - `choice_multiple` #### Structure ```scheme {  track: {    submitted: (boolean, optional),    questions: (object, optional) {      [id: string]: (object, required) {        user_status: (object, required) {          answer: (string, optional),          answers: (string[], optional)        }      }    }  } } ``` #### Values `is_completed` **(boolean, required)** Returns `TRUE` if the question is completed, otherwise returns `FALSE` #### Structure ```scheme {  acknowledge: {    is_completed: (boolean, required)  } } ``` ### Video InputOutput #### Parameters `bookmark` **(integer, required)** The video offset reached by the user `complete` **(boolean, optional)** Set to `TRUE` if the video is completed #### Structure ```scheme {  track: {    bookmark: (integer, required),    complete: (boolean, optional)  } } ``` None