API Reference
Features
Manage features for your products.
Prerequisites: You need a product before creating features. See Products to get or create a product. Features are used when creating exploratory tests (see Exploratory Tests).
What are Features?
Features represent distinct areas or capabilities of your product that you want to test. Each feature describes a specific part of your application, along with instructions on how to find it and optional user stories that define expected behavior.
Examples of Features:
- Login Page - The authentication screen where users enter their credentials
- Shopping Cart - The area where users review and manage items before checkout
- User Profile Settings - The page where users update their personal information and preferences
- Search Functionality - The search bar and results page used to find products or content
Features are not executed standalone. They are always used within the scope of an Exploratory Test. You can attach User Stories to features to describe specific behaviors that testers should verify.
Features and Sections
Features belong to a product and can optionally be organized into sections. Sections allow you to group related features together within a product.
- For products without sections, features are created directly under the product. Use
GET /products/{product_id}/featuresto retrieve all features andPOST /featuresto create new ones. - For products with sections, features must be associated with one or more sections. When creating a feature, provide
section_idsto assign it to specific sections. UseGET /products/{product_id}/sections/{section_id}/featuresto retrieve features scoped to a particular section, or useGET /products/{product_id}/featuresto retrieve all features across all sections.
List features
Retrieve all features for a specific product. This endpoint returns the full list of features regardless of whether sections are enabled for the product.
Endpoint: GET /products/{product_id}/features
Parameters:
product_id(number, required) - ID of the Product
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
includes[] | array | No | Optional associations to expand. Supported value: user_stories. When included, user_stories returns objects with id, path, title, feature_id instead of plain strings. |
To retrieve features for a particular section (when sections are enabled for the product), use
GET /products/{product_id}/sections/{section_id}/features. See List features by section below.
Example Request:
1curl -X GET "https://api.test.io/customer/v2/products/1/features" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
By default, user_stories is an array of path strings:
1{
2 "features": [
3 {
4 "id": 1,
5 "title": "Account Management",
6 "description": "Manage your account information",
7 "howtofind": "Top right of the screen",
8 "user_stories": ["User story 1", "User story 2"]
9 }
10 ]
11}Example Request (with expanded user stories):
1curl -X GET "https://api.test.io/customer/v2/products/1/features?includes[]=user_stories" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
When includes[]=user_stories is passed, each user story is returned as an object:
1{
2 "features": [
3 {
4 "id": 1,
5 "title": "Account Management",
6 "description": "Manage your account information",
7 "howtofind": "Top right of the screen",
8 "user_stories": [
9 {
10 "id": 10,
11 "path": "User story 1",
12 "title": "User story 1",
13 "feature_id": 1
14 },
15 {
16 "id": 11,
17 "path": "User story 2",
18 "title": "User story 2",
19 "feature_id": 1
20 }
21 ]
22 }
23 ]
24}List features by section
Retrieve all features for a specific section of a product. Use this endpoint for products that have sections enabled.
Endpoint: GET /products/{product_id}/sections/{section_id}/features
Parameters:
product_id(number, required) - ID of the Productsection_id(number, required) - ID of the Section
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
includes[] | array | No | Optional associations to expand. Supported value: user_stories. See List features for details. |
Example Request:
1curl -X GET "https://api.test.io/customer/v2/products/1/sections/2/features" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
1{
2 "features": [
3 {
4 "id": 1,
5 "title": "Account Management",
6 "description": "Manage your account information",
7 "howtofind": "Top right of the screen",
8 "user_stories": ["User story 1"]
9 }
10 ]
11}Create feature
Create a new feature.
Endpoint: POST /features
Request Body:
product_id(number, required) - ID of the Productsection_ids(array[number], optional) - Array of section IDsfeature(object, required) - Feature objecttitle(string, required) - Feature titledescription(string, required) - Feature descriptionhowtofind(string, optional) - Instructions on how to find the featuretarget_idx(string, optional) - Target indexuser_stories(array[string], optional) - Array of user story descriptionsuse_markdown(boolean, optional) - Whether to use markdown formatting
Example Request:
1curl -X POST "https://api.test.io/customer/v2/features" \
2 -H "Authorization: Token YOUR_API_TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "product_id": 1,
6 "section_ids": [1],
7 "feature": {
8 "title": "Account Management",
9 "description": "Manage your account information",
10 "howtofind": "Top right of the screen",
11 "user_stories": ["User story 1"],
12 "use_markdown": true
13 }
14 }'Response: 201 Created
1{
2 "feature": {
3 "id": 15,
4 "title": "Account Management",
5 "description": "Manage your account information",
6 "howtofind": "Top right of the screen",
7 "user_stories": ["User story 1"]
8 }
9}Copy features
Copy all features (including their user stories) from one product to another. The features are duplicated into the destination product.
Endpoint: PUT /products/{product_id}/features/copy
Parameters:
product_id(number, required) - ID of the source Product to copy features fromdestination_product_id(number, required) - ID of the destination Product to copy features to
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
includes[] | array | No | Optional associations to expand. Supported value: user_stories. See List features for details. |
Example Request:
1curl -X PUT "https://api.test.io/customer/v2/products/1/features/copy" \
2 -H "Authorization: Token YOUR_API_TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "destination_product_id": 2
6 }'Response: 200 OK
Returns the list of features in the destination product after copying.
1{
2 "features": [
3 {
4 "id": 30,
5 "title": "Account Management",
6 "description": "Manage your account information",
7 "howtofind": "Top right of the screen",
8 "user_stories": ["User story 1"]
9 }
10 ]
11}