Online builder for forms, surveys, tests, quizzes, and exams.
Documentation
Globally, the interface is divided into the form administrator panel and the list of your invitations.
- Form Administrator Panel, or simply "My Forms", is an interface where you, as an administrator, can manage forms: create, configure, add questions, analyze results, view analytics, and more.
- List of Your Invitations, or simply "My Invitations", is an interface for your users where they can view the list of invitations for filling out surveys, taking tests, or exams addressed to them by other form administrators.
There is also the User Menu where you can configure your account and application to fit your needs.
Forms
In the "My Forms" interface, you can see your current list of forms. Each form is represented as a block containing the title, a brief list of settings, and a description.
Clicking on a form block will take you to the interface for working with that specific form.
Creation and Configuration
To create a new form, go to the "My Forms" interface and click the "Create New Form" button. This will open the configuration panel where you can set up the form.
A variety of configurations are available to allow flexible customization of the form, giving it the necessary properties and features based on your needs.
Complete List of Form Settings:
- Title — the name of the form, visible only to you in the interface and your forms list. Required field.
- Description — a description of the form that will be displayed to users before they complete the form, test, or exam. Optional field.
- Final Message — a short text shown to the user after the form is successfully completed. Optional field.
- Localization — the primary language of the form, which will be used for interface elements, buttons, and auxiliary information. It is recommended that the form language, description, questions, and answer options always match.
The form language does not have to match the language of your interface but will default to your interface language. - Workgroup — lets you assign the form to a specific workgroup if you collaborate with other team members.
-
Form Type — The main setting that determines the properties of the form. There are 3 types of forms to choose from:
- Questionnaire — the simplest, basic form that users can fill out, and you will receive the results. The available features in this form type are limited, but it is included in the free "Basic" plan.
- Quiz — a more advanced form where you can add a scoring system, correct and incorrect answers, display user results after submission, add timers, split questions into pages, and more.
Available in the "Plus" plan. - Exam — a form where each user receives a personalized exam ticket with a difficulty balancing system and many other features. The exam ticket is generated from the main list of questions, so the form must contain a sufficient number of questions for the ticket generator to work correctly.
This form type only allows multiple-choice questions without open-ended answers, and there must always be a correct answer.
Available only in the "Pro" plan.
- Access — determines whether the form is available to anyone on the internet or only to those to whom you, as the administrator, generate and provide a personal invitation link.
- Public — the form is available to everyone without restrictions. Not available for the "Exam" type, as each exam ticket is tied to a personal invitation link and is intended only for a specific user.
- By Invitation Only — the form is accessible only through a special invitation link.
- Split into Pages — determines how questions in the form are distributed across pages or whether all are displayed on one.
- Disabled — the simplest option, all questions are displayed on a single page.
- For Multiple Questions — questions can be arranged across pages at the administrator's discretion. Not available for "Exam" type, as it is incompatible with the ticket generator.
- One Question Per Page — each question is displayed on a separate page.
- Timer — sets a time limit for completing the form or test.
Available for "Exam" and "Quiz" types with "By Invitation Only" access.- Disabled — users can take unlimited time to complete the form.
- Global — a time limit applies to the entire form, as specified in the "Timer Duration" setting.
- Per Question — each question has its own time limit, set in "Timer Duration".
- Timer Duration — the amount of time allocated for completing the form or each question, depending on the "Timer" setting. Specified in minutes and seconds.
- Scoring System — allows the administrator to evaluate the overall result of the form using a flexible point system. (Works only with multiple-choice questions.)
Available in "Exam" and "Quiz" types. - Difficulty System — available only for the "Exam" type.
If enabled, all questions are categorized into difficulty levels from "Very Easy" to "Very Hard". The difficulty level is set individually for each question.
Helps balance the difficulty level of exam tickets, ensuring consistency across different exams.
If combined with the "Scoring System", points are assigned by difficulty level instead of individually per question. - Show Results — allows users to see their total points, number of correct and incorrect answers, and percentage of correct answers after completing the form.
Available in "Exam" and "Quiz" types. - Allow Going Back — lets users return to previous questions or pages.
Can only be used if "Timer" is set to "Global". Not available if "Split into Pages" is "Disabled". - Activity Monitoring — tracks unwanted user actions during form completion, such as switching tabs, closing the browser window, refreshing the page, or resizing the browser window.
Helps reduce cheating attempts.
Available in "Exam" and "Quiz" types when "Timer" is enabled. - Allowed Max Actions — defines how many unwanted actions can be recorded before the attempt is automatically terminated.
Works together with the "Activity Monitoring" feature. - Webcam Proctoring — an additional feature for the Exam form type that analyzes the webcam stream in real time both before the exam starts and during the attempt.
The system does not store video or separate frames. It only records events and violations.
Inside the settings, you can enable and tune individual rules such as no person in frame, multiple people in frame, excessive head rotation, phone detection, and camera occlusion. - Allowed Webcam Violations — defines how many webcam proctoring violations are allowed before the exam is automatically terminated.
Each webcam rule can also have its own grace period before the state is counted as a violation. - IP Access Control — restricts form access to specific IP addresses or CIDR masks.
Available for the Quiz and Exam form types. If the form works by invitation only, an additional IP restriction can also be specified for a particular invitation link. - Publication Date — sets a delayed publication date. The form will become available at the specified time.
- Expiration Date — sets a deadline for form availability. The form will be disabled at the specified time.
Form Summary
On the "Details" tab of the form, a brief summary of the form settings is displayed, including the number of questions, the number of completed user responses, the current status of the form, and more.
This tab also contains a button to enable/disable the form (Publish/Unpublish).
Questions
The "Questions" tab displays a list of already added questions.
Each question is represented as a block containing the title, a brief list of settings, and Edit and Delete buttons.
If the "Paginate questions" setting is set to "Multiple questions per page", the "Add Page" button will be available for adding pages and distributing questions between them.
To the left of each question block, there is a "drag handle" that looks like this: . Clicking and holding it allows you to move questions, change their order, or move them between pages.
To add a new question, click the "Add Question" button at the top of the form. This will open the question configuration panel where you can set up the question, add a description, answer options, and more.
Besides manual creation, there are also additional workflows for building the question bank:
Question Import — a dedicated import interface allows you to upload questions from a JSON file or paste JSON manually. During import, you can also set shared parameters such as difficulty level and points when those settings apply to the current form.
AskiumAI — the AI-based question generator can create a batch of questions with answer options from a selected topic, difficulty level, and other parameters. Generated questions are added to the current form.
The Question Import page includes two helper actions: "Expected JSON format example" and "Prompt example for AI generation". The prompt helper opens a ready-made template where you can fill in the topic, number of questions, number of answer options, difficulty, and language, then copy the result for use in a third-party AI service.
Import supports not only uploading a local JSON file, but also pasting source raw JSON manually. If the JSON was generated by AI, you can paste either plain JSON or the full json code block returned by the model. After submission, the import runs as a background task: the page shows the processing status and, after a successful run, opens the list of imported questions.
The import interface is available only for Quiz and Exam forms and only on Plus or Pro subscriptions. If the form uses a scoring system, a regular import can assign one shared points value manually, while an exam with an enabled Difficulty System assigns points to imported questions automatically according to the selected difficulty level.
Question Configuration
The user has a number of configurations available for setting up a question and determining how the user will provide an answer and how it will affect the result.
Please note that the availability of certain settings depends on others, and some of them may be mutually exclusive.
Whether a question was created manually, imported, or generated through AskiumAI, after it is added you can open it in this interface and edit all available settings.
Full List of Question Settings:
- Title — The name of the question, visible only to you in the interface and in the list of questions for the form or exam ticket. It is recommended to keep it concise (2-3 words) for better clarity. Required field.
- Description — The question description displayed to users in the form, test, or exam. Required field.
Users with a "Plus" or "Pro" plan have access to an advanced text editor, which allows complex formatting such as font size, color, lists, images, videos, syntax-highlighted code blocks, or mathematical formulas. - Skippable — Determines whether a user can skip this question or if answering is mandatory.
If the form setting "Split into pages" is set to "One question per page", a "Skip" button will be available. -
Answer Type — the main setting that defines how the user will respond to this question. The following types are available:
- Choice list — the user must select one or more of the provided answer options. You can also allow the user to enter a custom answer or mark which options are correct and which are not.
- Input field — the user must type their answer into the provided input field. The type and properties of this field are defined in subsequent settings.
- Date picker — the user must select a date using a special date selection interface.
- Range — the user sets a value using a horizontal slider. The value updates instantly as the slider is moved.
- Rating — a row of symbols (typically stars), where the user selects a value by clicking. The value is determined by the position of the selected symbol.
- Personal data — a special type for collecting the user’s personal information, such as first name, last name, and email. These data help you navigate result lists and identify specific users based on the values entered in these fields.
-
Choice List Type — A sub-setting of Choice List that determines how many answer options the user can select. There are two types:
- Single Choice List — The user can select only one answer.
- Multiple Choice List — The user can select one or multiple answers.
- Correctness — A sub-setting of Choice List that determines whether the answer options are categorized as correct or incorrect.
- Custom Answer — A sub-setting of Choice List that allows the user to enter their own answer. Not available if "Correctness" is enabled.
- Difficulty Level — A sub-setting of Choice List that determines the complexity level of the question if the form type is "Exam" and "Difficulty System" is enabled. Required field.
- Answer Options — A sub-setting of Choice List, listing the answer choices available to the user. To add a new answer, click "Add Option" — it will be dynamically appended to the list.
Each answer option can be reordered and has a delete button.
If "Correctness" is enabled, each answer will have a "Correct" label. If "Multiple Choice List" is selected, multiple answers can be correct, but at least one must be. -
Input Field Type — A sub-setting of Input Field that defines the data type and properties of the field. There are five types:
- Single Line — A simple text field without line breaks.
- Multiline Input — A text field allowing line breaks.
- Number — A numeric field that only accepts whole numbers.
- Decimal Number — A numeric field that accepts integers and floating-point numbers.
- Email — A field specifically for entering an email address.
-
Personal data type — a sub-setting of Personal data, defining what specific data is expected in this field:
- First name
- Last name
- Min Length — A sub-setting of Input Field that defines the minimum character length if "Single Line" or "Multiline Input" is selected. Must be a whole number greater than or equal to 0. Optional.
- Max Length — A sub-setting of Input Field that defines the maximum character length if "Single Line" or "Multiline Input" is selected. Must be a whole number greater than or equal to 0. Optional.
- Default Rows — A sub-setting of Multiline Input that defines the initial height of the input field in rows. Must be a whole number greater than or equal to 1. Optional.
- Min — A sub-setting of Number or Decimal Number that defines the minimum allowed value. Must be a whole number. Optional.
- Max — A sub-setting of Number or Decimal Number that defines the maximum allowed value. Must be a whole number. Optional.
- Step — A sub-setting of Number or Decimal Number that defines the step interval for input values. Must be a whole number. Optional.
Exam-Specific Features
In the "Exam" form type, the question type is always "Choice List" and cannot be changed. Additionally, "Correctness" cannot be disabled, and "Custom Answer" cannot be enabled, so these controls will be hidden.
Question Import
The import page can be opened from the questions area of the current form. It is available only for forms of type Quiz and Exam and only on Plus or Pro subscriptions. Inside the interface, you can choose one shared difficulty level for all imported questions and, if the current form uses a scoring system outside exam difficulty mode, also define one shared points value manually.
Two helper actions are built into the page: "Expected JSON format example" and "Prompt example for AI generation". The first shows the exact JSON contract with the keys question_short_title, question, options, and correct_index. The second opens a ready-made prompt template where you can fill in the topic, number of questions, number of answer options, difficulty, and language, then copy it for use in an external AI service.
JSON Example
{
"questions": [
{
"question_short_title": "HTTP status codes",
"question": "Which status code means that the request was successful?",
"options": [
"200 OK",
"301 Moved Permanently",
"404 Not Found",
"500 Internal Server Error"
],
"correct_index": 0
}
]
}Questions can be imported in two ways: by uploading a local JSON file or by pasting source raw JSON manually. If the content was generated by an AI model, the page also accepts the full json code block from the response. After submission, the import runs as a background task: the page checks the task status automatically and, once the task succeeds, opens the list of imported questions for review and further editing.
If the form is an exam with an enabled Difficulty System, points for imported questions are assigned automatically according to the selected difficulty level. This keeps the same import workflow compatible with both manually scored quizzes and difficulty-balanced exams.
AskiumAI: Question Generator
AskiumAI is a separate page for generating questions directly inside the current form. The interface shows your current AI token balance and is designed to help you fill the question bank without leaving the application. Question generation is available only for forms of type Quiz and Exam; for other form types, the interface shows a warning and does not allow the task to start.
On the generator page, you define the subject area / topic, difficulty, number of questions, and number of answer options. If the form uses a scoring system outside exam difficulty mode, you can also specify the points for a correct answer. The language of generated questions follows the localization configured for the form itself, not the current interface language.
After submission, AskiumAI first checks the topic and then runs generation as a background task. The page shows intermediate states, automatically polls the task status, and after success opens the list of generated questions. Generated questions and answer options should always be reviewed manually before publication, because AI can still make mistakes.
Once generation is complete, the resulting questions can be reviewed, edited, partially removed, or kept selectively before you continue working with the form.
Difficulty Settings
If the form type is "Exam" and the "Difficulty System" setting is enabled, the "Difficulty Settings" tab becomes available.
On this tab, you can configure the average difficulty of the exam ticket.
You need to specify how many questions of each difficulty level should be included in every exam ticket. There are 5 difficulty levels available:
- Very Easy
- Easy
- Medium
- Hard
- Very Hard
During automatic exam ticket generation, the system will randomly pick the specified number of questions per difficulty level. This ensures a balanced difficulty level across tickets while maintaining uniqueness in question selection.
You decide which levels to use and which to exclude—using the full range of levels is not required. Typically, 2-3 levels are used, for example, from Easy to Hard.
Additionally, if the "Scoring System" setting is enabled, you can specify how many points are assigned to each difficulty level. When both the "Scoring System" and "Difficulty System" are enabled, points can no longer be set individually for each question but must be assigned per difficulty level.
Invitation Links
This tab is available if the form configuration has the "Access - Invitation Only" option enabled.
The "Invitation Links" tab displays a list of active invitation links by default.
Each link is displayed as a block containing the following information:
- Full URL of the link
- The invited user's first and last name (if provided)
- The invited user's email address (if provided)
- The number of questions in the exam ticket (if the form type is Exam)
Each block also contains a toggle switch to enable/disable the link and a set of action buttons:
- Send Invitation button to email the invitation (available only if an email is provided and the link hasn’t been sent, used, or disabled).
- Copy URL button to copy the invitation link to the clipboard (not available if the link is disabled).
- Share button to send the link via social networks, messengers, email, etc. (not available if the link has been used or disabled).
- Generate QR Code button for the current link (not available if the link is disabled).
- Edit button to modify the link (not available if the link has already been used).
- Delete button to remove the link (not available if the link has already been used).
- View Results button, available only after the link has been used.
Clicking on an invitation link block will take you to the management interface for that specific link.
To add a new invitation link, click the "Add" button, which will open the new invitation link creation interface.
Creating an Invitation Link
When creating a new invitation link, the following fields are available:
- First Name
- Last Name
None of these fields are required; they can all be left blank. However, adding this information is recommended for easier identification of results later on.
Upon creation, each invitation link is assigned a unique key, which is appended to the link’s URL. If an invitation link remains anonymous (without a name, surname, or email), its sole identifier will be this unique key.
If your users (clients/employees/students, etc.) are regular participants, you can save their details to the contacts list by clicking "Save Contact". You can also import contacts by clicking "Import" and selecting an existing contact.
If the current form type is "Exam", after creating an invitation link, you will be taken to the management interface for filling the exam ticket with questions, as it will initially be empty.
Editing an Invitation Link
The invitation link editing interface is similar to the creation interface but includes a status toggle (enabled/disabled) and displays the unique key of the link.
Exam Ticket
If the form type is "Exam", the invitation link editing interface will also include a second section for managing and filling the exam ticket with questions.
There are two ways to populate an exam ticket with questions:
- Clicking the "Generate Ticket" button — the ticket will be automatically filled with questions based on the difficulty settings (provided that the "Difficulty System" is enabled, the difficulty settings are configured, and the form contains a sufficient number of questions for each difficulty level).
- Manually adding questions by clicking the "Add Question" button and selecting the required questions from the list (multiple selections are allowed).
In a populated exam ticket, you can rearrange the order of questions by dragging them using the anchor and delete questions using the corresponding delete button.
In the "Exam" form type, activating an invitation link without adding questions to the ticket is not allowed.
Contacts List
This tab is available if the form configuration has the "Access - Invitation Only" option enabled.
Here, you can see the contacts list of your users (clients/employees/students, etc.). This list is used for importing user details (first name, last name, and email) into invitation links, making the creation process more convenient.
To add a new contact, click the "Add" button, which will open the new contact creation interface.
Each contact contains three fields:
- First Name
- Last Name
All fields must be filled in to save the contact. Note that email addresses in your contacts list must be unique and cannot be duplicated.
Results
This tab displays the list of results submitted by users filling out the form. Each result is presented as a block with summary information:
- Key — The unique key of each result;
- Status — The result's status, either In Progress or Completed;
- Date and Time of form submission completion;
- User's First and Last Name, if "Invitation Only Access" is enabled and the user's name was specified in the invitation link;
- User's Email, if "Invitation Only Access" is enabled and the email was specified in the invitation link;
- Score the user achieved in this result, if the Scoring System is enabled;
- Percentage % of correct answers, if the form type is Quiz or Exam;
Clicking on a result block will take you to the detailed results page, where you can view:
- General Summary;
- Log of Unauthorized Actions (if the "Activity Monitoring" feature was enabled);
- Webcam proctoring status and the webcam event timeline, if this feature was enabled for the exam;
- A complete list of answers submitted for each question, including correctness (if applicable);
Analytics
The Analytics tab provides an overall summary of all results recorded since the form was created.
The following information is available:
- Submission Graphs — Graphs displaying user form completion trends:
- Daily Graph — Shows the number of form submissions per day over the last 30 days.
- Monthly Graph — Shows the number of form submissions per month over the last 12 months.
- Result Statistics — Aggregate statistics on all results collected:
- Total number of results
- Total score available in the form
- Average score achieved by users
- Highest score achieved by users
- Lowest score achieved by users
- Average percentage of correct answers
- Highest percentage of correct answers
- Lowest percentage of correct answers
- Question Statistics — Aggregated data for each individual question.
If the question is multiple-choice:- Number and percentage of times the question was skipped;
- Number and percentage of correct answers;
- Comparative statistical table for each answer choice;
- Comparative chart for each answer choice;
If the question requires a numerical input:- Number and percentage of times the question was skipped;
- Average answer value;
- Highest answer value;
- Lowest answer value;
If the question requires a text or date input, a full list of user responses will be displayed.
Analytics can also be exported to PDF and Excel. The export is prepared in the background, after which the generated file becomes available for download.
Branding and styling
In this tab, you can configure the visual style of your form in a real-time preview mode. In addition to the basic color and font settings, the branding section now also includes progress bar customization and branding presets.
- Page background color, text color, and main font
- Header background, title, title font, logo, and the option to hide the header completely
- Progress bar track color, progress color, and bar height
- Button colors, hover colors, button text font, padding, and button shape
- Page title styling, timer colors, answer option styling, and result icons
If the form uses a progress bar, you can customize it here. If you do not want to show it at all, you can disable it entirely in the main form settings.
You can also save the current styling as a branding preset and later load an existing preset into another form. This is useful when you want to reuse the same visual style across multiple forms.
All branding changes are shown immediately in the live preview.
External service integrations
The application supports two main integration scenarios: result webhooks and LMS / LTI integrations.
Result Webhooks
Each form has a dedicated Webhooks tab where you can configure automatic result delivery after a user finishes the form.
In practice, Askium webhooks work as "form is finished -> result is calculated -> payload is automatically sent to your URL". This is useful for forwarding results into your own CRM, LMS, ERP, HR system, or backend service.
The following settings are available when configuring webhooks for a form:
- Status — enables or disables webhook delivery;
- URL address — the full URL of your receiving endpoint;
- Format — the delivery format: JSON or XML;
- Authorization — enables an additional HTTP header to be sent;
- Header — the header name, for example
AuthorizationorX-Webhook-Token; - Value (Token) — the header value, for example
Bearer your-secret-token.
If authorization is enabled and both fields are filled in, the system adds that header to the webhook request. If webhooks are disabled or no URL is configured, nothing is sent. The feature is not available on the Basic plan.
The webhook payload contains five main parts:
form— the form key, name, and type;result— the result key plus started and finished timestamps;score— maximum points, total points, and percent score;user— the invitation link key and personal user data if available;answers— the answer list with question data, answer text, and correctness flag.
If a question uses the advanced HTML editor, the webhook payload sends advanced_html instead of the raw HTML markup.
Example JSON webhook
{
"form": {
"id": "frm-php-exam",
"name": "PHP Certification Exam",
"type": "exam"
},
"result": {
"id": "res-8f2d1a",
"started_at": "2026-03-01 10:00:00",
"finished_at": "2026-03-01 10:42:15"
},
"score": {
"max_points": 50,
"total_points": 42,
"percent": 84
},
"user": {
"link_id": "link-abc123",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com"
},
"answers": [
{
"question": {
"id": "q-http-001",
"title": "HTTP code",
"text": "Which status code means success?"
},
"answer": "200 OK",
"correct": true
},
{
"question": {
"id": "q-rich-002",
"title": "Rich text question",
"text": "advanced_html"
},
"answer": "Custom answer",
"correct": false
}
]
}Example XML webhook
<result>
<form>
<id>frm-php-exam</id>
<name>PHP Certification Exam</name>
<type>exam</type>
</form>
<details>
<id>res-8f2d1a</id>
<started_at>2026-03-01 10:00:00</started_at>
<finished_at>2026-03-01 10:42:15</finished_at>
</details>
<score>
<max_points>50</max_points>
<total_points>42</total_points>
<percent>84</percent>
</score>
<user>
<link_id>link-abc123</link_id>
<first_name>John</first_name>
<last_name>Doe</last_name>
<email>john.doe@example.com</email>
</user>
<answers>
<answer>
<question>
<id>q-http-001</id>
<title>HTTP code</title>
<text>Which status code means success?</text>
</question>
<answer_text>200 OK</answer_text>
<correct>true</correct>
</answer>
</answers>
</result>LMS / LTI Integrations
The LMS / LTI workflow in the application consists of two separate steps, and this is important to understand:
- First, you create and save the actual LMS integration in the user menu as a shared connection to an external platform;
- Then, a specific form is linked to one of the saved integrations through the dedicated integration bindings screen inside that form.
In other words, the integration is not created “inside the form”. You configure the shared connection once and can then reuse it for one or multiple forms.
Step 1. Create the shared LMS integration
A separate LMS Integrations section in the user menu is used to save connections to external learning platforms. You can choose a ready-made platform preset or use a custom configuration.
The application supports LTI 1.0 / 1.1, LTI 1.3, or a combined configuration of both versions for a single integration.
- For LTI 1.0 / 1.1, you configure OAuth Consumer Key and OAuth Shared Key;
- For LTI 1.3, you configure Platform ID / iss, Client ID, OIDC login initiation URL, Access token URL, and JWKS endpoint URL;
- For platform presets, some URLs can be filled automatically, while a custom integration requires all values to be entered manually.
After saving, the integration appears in your personal LMS integrations list and becomes available for binding to forms.
Step 2. Bind a form to the saved integration
Once the integration already exists, you open the separate Integrations / Integration bindings screen inside the target form. This screen shows the integrations already linked to the form and provides a button for adding a new binding.
When you add a binding, the system shows the list of your saved LMS integrations and lets you choose one for the current form. If no integrations have been created yet, the dialog contains a direct link to the LMS Integrations section so you can create them first.
Bindings are not available for every form type: this screen is used for Quiz and Exam forms and is not available for Questionnaire. LMS / LTI work also requires a plan above Basic.
This flow makes it possible to configure the LMS connection once and then reuse it across multiple forms without re-entering the full LTI configuration every time.
API
The application includes a dedicated API settings screen designed for secure work with external systems and automation through your private API key.
In this interface, you can:
- enable or disable API access;
- generate a new private API key;
- copy the current key for use in external systems;
- enable an additional IP restriction for the API;
- specify the single allowed IP address from which API requests will be accepted.
If API access is disabled, private API endpoints will stop working. When you generate a new key, the previous one should be considered invalid and updated in all connected systems.
Basic API rules
- Base URL:
https://askium.org/api - Authorization for private endpoints is sent through the header
Authorization: Bearer YOUR_PRIVATE_API_KEY - Content-Type for requests with a body:
application/json - If API IP restriction is enabled in settings, requests will only be accepted from the configured IP address
- The
POST /api/results/verifyroute is public and does not require the private API key, but it accepts a one-time short-livedverification_key
Available routes
POST /api/forms/{form_key}/invitation-links— create a personal invitation linkDELETE /api/forms/{form_key}/invitation-links/{link_key}— delete an invitation linkGET /api/forms/{form_key}/invitation-links/active— list active unused invitation linksPOST /api/forms/{form_key}/questions/import— import questions into a formPOST /api/results/{result_key}/verification-key— issue a one-time result verification keyPOST /api/results/verify— verify a result by a one-time verification key
Below you can find request examples, field descriptions, and the main response structure. Each block can be expanded separately.
POST/api/forms/{form_key}/invitation-links
Creates a personal invitation link for the selected form. For Exam forms, the API also generates an exam ticket and activates the link automatically.
Request fields:
first_name— user first name, optionallast_name— user last name, optionalemail— user email, optional
Main response fields:
status— request execution statuslink.key— created invitation link keylink.url— full invitation link URLlink.is_active— whether the link is active after creationticket_questions_count— number of questions in the generated exam ticket for exam forms, otherwisenull
curl -X POST "https://askium.org/api/forms/exam-api-001/invitation-links" \
-H "Authorization: Bearer YOUR_PRIVATE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com"
}'Example successful response:
{
"status": "ok",
"link": {
"key": "link-abc123",
"url": "https://askium.org/f/exam-api-001?t=link-abc123",
"is_active": true
},
"ticket_questions_count": 2
}DELETE/api/forms/{form_key}/invitation-links/{link_key}
Deletes a personal invitation link by its key.
Route parameters:
form_key— form keylink_key— invitation link key to delete
Main response fields:
status— request execution statusmessage— textual deletion confirmation
curl -X DELETE "https://askium.org/api/forms/exam-api-001/invitation-links/link-abc123" \
-H "Authorization: Bearer YOUR_PRIVATE_API_KEY"Example successful response:
{
"status": "ok",
"message": "Invitation link deleted."
}GET/api/forms/{form_key}/invitation-links/active
Returns only invitation links that are both active and still unused for the selected form.
Main response fields:
status— request execution statuslinks[].key— link keylinks[].url— full link URLlinks[].is_active— active statelinks[].first_name,links[].last_name,links[].email— personal fields if they were setlinks[].created_at— link creation timestamp
curl -X GET "https://askium.org/api/forms/exam-api-001/invitation-links/active" \
-H "Authorization: Bearer YOUR_PRIVATE_API_KEY"Example successful response:
{
"status": "ok",
"links": [
{
"key": "link-active-unused",
"url": "https://askium.org/f/exam-api-list-001?t=link-active-unused",
"is_active": true,
"first_name": "Alice",
"last_name": "Green",
"email": "alice@example.com",
"created_at": "2026-03-01 10:00:00"
}
]
}POST/api/forms/{form_key}/questions/import
Imports questions directly into a form. The endpoint is available only for Quiz and Exam forms and requires an active Plus or Pro subscription.
Request fields:
difficulty— required difficulty level:very_easy,easy,medium,hard, orvery_hardpoints_num— question points, conditionally required for forms with an enabled scoring systemquestions— array of imported questionsquestions[].question_short_title— short question titlequestions[].question— full question textquestions[].options— answer option array, minimum two valuesquestions[].correct_index— correct answer index starting from0raw_json— optional alternative: instead ofquestions, you can send the source JSON as a string and the system will try to parse it automatically
Main response fields:
status— request execution statusmessage— final import messageimported_count— number of actually imported questionsimport_key— import log key that can be used for audit or traceability
curl -X POST "https://askium.org/api/forms/quiz-import-001/questions/import" \
-H "Authorization: Bearer YOUR_PRIVATE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"difficulty": "medium",
"points_num": 2,
"questions": [
{
"question_short_title": "HTTP code",
"question": "Which status code means success?",
"options": ["200 OK", "301", "404", "500"],
"correct_index": 0
},
{
"question_short_title": "TCP port",
"question": "Which port is typically used by HTTPS?",
"options": ["21", "25", "80", "443"],
"correct_index": 3
}
]
}'Example successful response:
{
"status": "ok",
"message": "Questions imported successfully.",
"imported_count": 2,
"import_key": "imp_3f9b84d1"
}POST/api/results/{result_key}/verification-key
Issues a one-time short-lived result verification key. By default, the key remains valid for 300 seconds (5 minutes), and the exact lifetime is also returned in expires_at and ttl_seconds. This endpoint is protected by the private API key and is used when you need to safely expose public verification for a specific result.
Route parameters:
result_key— result key for which the verification key should be issued
Main response fields:
verification_key— one-time JWT verification keytoken_type— token type, currentlyJWTexpires_at— exact token expiration timettl_seconds— token lifetime in seconds
curl -X POST "https://askium.org/api/results/res-8f2d1a/verification-key" \
-H "Authorization: Bearer YOUR_PRIVATE_API_KEY"Example successful response:
{
"verification_key": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "JWT",
"expires_at": "2026-03-01 10:05:00",
"ttl_seconds": 300
}POST/api/results/verify
This is a public endpoint that does not require the private API key. It accepts a one-time verification_key and returns a safe result snapshot.
Request fields:
verification_key— one-time key obtained from the verification-key issue endpoint
Main response fields:
key— result keyis_finished,started_at,finished_at,created_at— result status and timestampscorrect_percent,total_points,max_points— score and percentage summarycorrect_answers,wrong_answers,answers_total,unchecked_answers— answer statisticstimer_expires_at,is_terminated,is_timer_up— timer and attempt stateinvitation_link_key— invitation link key if the result is tied to an invitationpersonal_data.first_name,personal_data.last_name,personal_data.email— respondent personal data if they were collectedunwanted_events_count— number of recorded unwanted monitoring eventsform.key,form.name,form.type,form.locale— basic form metadata
curl -X POST "https://askium.org/api/results/verify" \
-H "Content-Type: application/json" \
-d '{
"verification_key": "YOUR_ONE_TIME_VERIFICATION_KEY"
}'Example successful response:
{
"key": "res-8f2d1a",
"is_finished": true,
"started_at": "2026-03-01 10:00:00",
"finished_at": "2026-03-01 10:42:15",
"created_at": "2026-03-01 10:00:00",
"correct_percent": 84,
"total_points": 42,
"max_points": 50,
"correct_answers": 2,
"wrong_answers": 1,
"answers_total": 3,
"unchecked_answers": 1,
"timer_expires_at": "2026-03-01 11:00:00",
"is_terminated": false,
"is_timer_up": false,
"invitation_link_key": null,
"personal_data": {
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com"
},
"unwanted_events_count": 1,
"form": {
"key": "frm-php-exam",
"name": "PHP Certification Exam",
"type": "exam",
"locale": "en"
}
}In practice, the API covers two main scenarios: automation for invitation links and question bank management, and safe public result verification through a one-time key.
API and LTI integration assets
Use these machine-readable files and discovery endpoints when evaluating or wiring Askium into an LMS, CRM, HR system, or internal automation stack.
LTI discovery endpoints
The LMS integration flow exposes standard LTI 1.1 cartridge and LTI 1.3 discovery URLs.
https://askium.org/lti/1_1/config— LTI 1.1 cartridge configurationhttps://askium.org/.well-known/openid-configuration— LTI 1.3 OpenID configurationhttps://askium.org/.well-known/jwks— public JWKS for LTI 1.3 launcheshttps://askium.org/lti/1_3/register— dynamic registration endpoint when a platform supports it
IP Access Control
IP Access Control is available only for the "Quiz" and "Exam" form types. It lets you restrict access to a form by specific IP addresses or CIDR masks.
If a form is available by invitation links only, you can also set an IP or mask that applies to a particular exam ticket only.
To enable the feature, toggle "IP Access Control" in the form configuration.
On the IP Access Control tab, add the IPs that should be allowed to access the form.
You can also specify an additional per-link IP in the Invitation Link settings.
Workgroups
Workgroup is a space for collaborating on forms and results. It allows you to share access with team members without transferring form ownership, while still limiting each member to the sections they actually need.
Each workgroup includes:
- Administrator — the user who created the workgroup and is its owner. They can:
- Invite and remove members
- Configure individual permissions for each member
- Select which forms will be available to the group
- Enable or disable the workgroup
- Delete the group if necessary
- Members — users invited by the Administrator. They can:
- Work with forms made available by the administrator, within the permissions granted
- Enable or disable the “Share Contacts” setting — each member decides individually
- Leave the group at any time
Individual member permissions
The Administrator can flexibly configure which actions are available to each member.
List of available permissions:
- Form configuration — modify core form settings;
- Difficulty settings — manage distribution of question difficulty levels;
- Question management — create, edit, and delete form questions;
- Link management — manage invitation links;
- View results — view all form completion results;
- View analytics — access form statistics and analytics;
- Integration settings — manage connections to LMS, webhooks, and other integrations;
- Styling and branding — adjust form design (colors, logo, fonts);
Access to forms
To add a form to a workgroup, in the main form configuration select “Workgroup” and choose the desired group.
After saving the form, all members of the group will see it on the available groups page, in a separate list grouped by the group name.
When opening the form, a member will only see those menu sections to which the Administrator has granted access.
Account Settings
You can access the account settings page by opening the User Menu in the upper right corner of the screen and selecting "Account".
Here, you can view your personal information, linked social media accounts, active subscription plan, and change your login password.
Application Settings
You can access the application settings page by opening the User Menu in the upper right corner of the screen and selecting "Settings".
Here, you can configure the application interface language and switch between light and dark themes.
Client Interface
This section displays invitations to complete forms addressed to you. To see an invitation in this list, the invitation link must contain an Email that matches the one specified in your account settings (which can be found on the Account Settings page under personal information).
Before starting a form, the user sees an intro page. It can display warnings about timers, the inability to return to previous questions or pages, activity monitoring, and other restrictions of the current form.
If webcam proctoring is enabled for an exam, the intro page also shows a camera check before start. The user must grant camera access and pass the pre-check. Only after a successful check will the exam start button become available.