Introduction
Welcome to the Qase.io API! You can use our API to access Qase.io API endpoints, which allows to retrieve information about entities stored in database and perform actions with them. The API is organized around REST.
API Rate limits
Your application can make up to 200 API requests per minute.
Once the limit is exceeded, clients receive an HTTP 429 with a Retry-After: X header to indicate how long their timeout period is before they will be able to send requests again. The timeout period is set to 60 seconds once the limit is exceeded.
Authentication
To authorize, use this code:
# With shell, you can just pass the correct header with each request
curl "https://api.qase.io/v1/api_endpoint"
-H "Token: api_token"
-H "Content-Type: application/json"
Make sure to replace
api_token
with your API key.
Qase.io uses API tokens to authenticate requests. You can view an manage your API keys in API tokens pages.
Your API keys has the same access rights as your role in the app, 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.
Qase API expects for the API key to be included in all API requests to the server in a header that looks like the following:
Token: api_token
All API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.
Access rights
Qase.io is using Role-based Access Control system to restrict some features usage in Web interface and the same rules are applied to API methods. In description for each method you will find a rule name, that is required to perform an action through API. If you don't have enough access rights, you will receive an error with 403
status code.
Projects
Get All Projects
Request:
curl "https://api.qase.io/v1/project"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 10,
"filtered": 10,
"count": 1,
"entities": [
{
"title": "Demo Project",
"code": "DEMO",
"counts": {
"cases": 10,
"suites": 3,
"milestones": 0,
"runs": {
"total": 1,
"active": 1
},
"defects": {
"total": 0,
"open": 0
}
}
}
]
}
}
This method allows to retrieve all projects available for your account. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/project
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of projects in result set |
offset | 0 | How many projects should be skipped |
Get a Specific Project
Request:
curl "https://api.qase.io/v1/project/{code}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"title": "Qase Web Application",
"code": "QAPP",
"counts": {
"cases": 250,
"suites": 38,
"milestones": 4,
"runs": {
"total": 46,
"active": 20
},
"defects": {
"total": null,
"open": 13
}
}
}
}
This method allows to retrieve a specific project.
HTTP Request
GET https://api.qase.io/v1/project/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
CODE | True | Project CODE is required to retrieve specific project |
Create a new project
Request:
curl "https://api.qase.io/v1/project"
-X POST
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title":"New", "code": "NEW"}'
JSON payload:
{
"title": "new",
"code": "NEW",
"description": "Awesome project",
"access": "all",
"group": null
}
Response:
{
"status": true,
"result": {
"code": "NEW"
}
}
This method is used to create a new project through API.
HTTP Request
POST https://api.qase.io/v1/project
JSON payload fields
Parameter | Type | Description |
---|---|---|
title | String | Project title. Required field. |
code | True | Project code. Required field. Unique for team and should be from 2 to 6 latin symbols. Digits and special characters are not allowed. |
description | string | Project description. |
access | string | Possible value: all , group , none . Default none . |
group | string | Team group hash. Required if access param is set to group . |
Test cases
Get all test cases
Request:
curl "https://api.qase.io/v1/case/{code}?limit=10&offset=0&filters[priority]=high,low"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 250,
"filtered": 250,
"count": 1,
"entities": [
{
"id": 5,
"position": 1,
"title": "Test case",
"description": "Description for case",
"preconditions": "",
"postconditions": "",
"severity": 4,
"priority": 2,
"type": 1,
"behavior": 2,
"automation": "is-not-automated",
"status": "actual",
"milestone_id": null,
"suite_id": 1,
"tags": [],
"links": [],
"revision": 1,
"custom_fields": [],
"attachments": [],
"steps": [],
"created": "2018-05-02T20:32:23.000000Z",
"updated": "2019-07-21T13:24:08.000000Z"
}
]
}
}
This method allows to retrieve all test cases stored in selected project. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/case/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of test cases in result set |
offset | 0 | How many test cases should be skipped |
filters[search] | Provide a string that will be used to search by name | |
filters[milestone_id] | ID of milestone | |
filters[suite_id] | ID of test suite | |
filters[severity] | A list of severity values separated by comma. Possible values: undefined , blocker , critical , major , normal , minor , trivial |
|
filters[priority] | A list of priority values separated by comma. Possible values: undefined , high , medium , low |
|
filters[type] | A list of type values separated by comma. Possible values: other , functional smoke , regression , security , usability , performance , acceptance |
|
filters[behavior] | A list of behavior values separated by comma. Possible values: undefined , positive negative , destructive |
|
filters[automation] | A list of values separated by comma. Possible values: is-not-automated , automated to-be-automated |
|
filters[status] | A list of values separated by comma. Possible values: actual , draft deprecated |
Get a specific test case
Request:
curl "https://api.qase.io/v1/case/{code}/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": [
{
"id": 5,
"position": 1,
"title": "Test case",
"description": "Description for case",
"preconditions": "",
"postconditions": "",
"severity": 4,
"priority": 2,
"type": 1,
"behavior": 2,
"automation": "is-not-automated",
"status": "actual",
"milestone_id": null,
"suite_id": 1,
"tags": [],
"links": [],
"revision": 1,
"custom_fields": [],
"attachments": [],
"steps": [],
"created": "2018-05-02T20:32:23.000000Z",
"updated": "2019-07-21T13:24:08.000000Z"
}
]
}
This method allows to retrieve a specific test case.
HTTP Request
GET https://api.qase.io/v1/case/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test case id |
Delete test case
Request:
curl "https://api.qase.io/v1/case/{code}/{id}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true
}
This method completely deletes a test case from repository
HTTP Request
DELETE https://api.qase.io/v1/case/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test case id |
Suites
Get all test suites
Request:
curl "https://api.qase.io/v1/suite/{code}?limit=10&offset=0&filters[search]=title"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 250,
"filtered": 250,
"count": 1,
"entities": [
{
"id": 1,
"title": "Level 1",
"description": "Set from API",
"preconditions": "Set from API",
"position": 1,
"cases_count": 10,
"parent_id": null,
"created": "2018-05-02T10:49:01.000000Z",
"updated": "2019-07-21T19:10:15.000000Z"
}
]
}
}
This method allows to retrieve all test suites stored in selected project. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/suite/{code}
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of suites in result set |
offset | 0 | How many suites should be skipped |
filters[search] | Provide a string that will be used to search by title |
Get a specific test suite
Request:
curl "https://api.qase.io/v1/suite/{code}/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": [
{
"id": 1,
"title": "Level 1",
"description": "Set from API",
"preconditions": "Set from API",
"position": 1,
"cases_count": 10,
"parent_id": null,
"created": "2018-05-02T10:49:01.000000Z",
"updated": "2019-07-21T19:10:15.000000Z"
}
]
}
This method allows to retrieve a specific test suite.
HTTP Request
GET https://api.qase.io/v1/suite/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test suite id |
Create a new test suite
Request:
curl "https://api.qase.io/v1/suite/{code}"
-X POST
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title":"Test suite"}'
JSON payload:
{
"title": "Test suite",
"parent_id": null,
"description": "Suite description",
"preconditions": "Suite preconditions"
}
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method is used to create a new test suite through API.
HTTP Request
POST https://api.qase.io/v1/suite/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
JSON payload fields
Parameter | Type | Description |
---|---|---|
title | String | Test suite title. Required field. |
description | string | Test suite description |
preconditions | string | Test suite preconditions |
parent_id | int | Parent suite ID (nullable) |
Update test suite
Request:
curl "https://api.qase.io/v1/suite/{code}"
-X PATCH
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title":"Test suite title"}'
JSON payload:
{
"title": "Test suite title",
"parent_id": null,
"description": "Suite description",
"preconditions": "Suite preconditions"
}
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method is used to update a test suite through API. You should provide an object with a list of fields you want to update in a payload. At least one field is required. Fields in payload will overwrite existing values.
HTTP Request
PATCH https://api.qase.io/v1/suite/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test suite id |
JSON payload fields
Parameter | Type | Description |
---|---|---|
title | String | Test suite title. Required field. |
description | string | Test suite description |
preconditions | string | Test suite preconditions |
parent_id | int | Parent suite ID (nullable) |
Delete test suite
Request:
curl "https://api.qase.io/v1/suite/{code}/{id}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true
}
This method completely deletes a test suite from repository
HTTP Request
DELETE https://api.qase.io/v1/suite/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test suite id |
Milestones
Get all milestones
Request:
curl "https://api.qase.io/v1/milestone/{code}?limit=10&offset=0&filters[search]=title"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 250,
"filtered": 250,
"count": 1,
"entities": [
{
"id": 1,
"title": "Release 1.0",
"description": null,
"due_date": null,
"created": "2018-08-31T23:59:10.000000Z",
"updated": "2018-08-31T23:59:10.000000Z"
}
]
}
}
This method allows to retrieve all milestones stored in selected project. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/milestone/{code}
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of milestones in result set |
offset | 0 | How many milestones should be skipped |
filters[search] | Provide a string that will be used to search by title |
Get a specific milestone
Request:
curl "https://api.qase.io/v1/milestone/{code}/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": [
{
"id": 1,
"title": "Level 1",
"description": "Set from API",
"preconditions": "Set from API",
"position": 1,
"parent_id": null,
"created": "2018-05-02T10:49:01.000000Z",
"updated": "2019-07-21T19:10:15.000000Z"
}
]
}
This method allows to retrieve a specific milestone.
HTTP Request
GET https://api.qase.io/v1/milestone/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Milestone id |
Create a new milestone
Request:
curl "https://api.qase.io/v1/milestone/{code}"
-X POST
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title":"Release 1.0"}'
JSON payload:
{
"title": "new",
"parent_id": null
}
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method is used to create a new milestone through API.
HTTP Request
POST https://api.qase.io/v1/milestone/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
JSON payload fields
Parameter | Type | Description |
---|---|---|
title | String | Milestone title. Required field. |
description | string | Milestone description |
Update milestone
Request:
curl "https://api.qase.io/v1/milestone/{code}"
-X PATCH
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title":"Milestone title"}'
JSON payload:
{
"title": "new",
"description": null
}
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method is used to update a milestone through API. You should provide an object with a list of fields you want to update in a payload. At least one field is required. Fields in payload will overwrite existing values.
HTTP Request
PATCH https://api.qase.io/v1/milestone/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Milestone id |
JSON payload fields
Parameter | Type | Description |
---|---|---|
title | String | Milestone title. Required field. |
description | string | Milestone description |
Delete milestone
Request:
curl "https://api.qase.io/v1/milestone/{code}/{id}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method completely deletes a milestone from repository
HTTP Request
DELETE https://api.qase.io/v1/milestone/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Milestone id |
Shared steps
Get all shared steps
Request:
curl "https://api.qase.io/v1/shared_step/{code}?limit=10&offset=0&filters[search]=title"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 250,
"filtered": 250,
"count": 1,
"entities": [
{
"hash": "0223905c291bada23e6049d415385982af92d758",
"title": "Shared step",
"action": "Open signup page",
"expected_result": "Page is opened",
"cases": [
41,
35,
42,
30
],
"cases_count": 4,
"created": "2019-02-09T23:16:49.000000Z",
"updated": "2019-02-09T23:16:49.000000Z"
}
]
}
}
This method allows to retrieve all shared steps stored in selected project. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/shared_step/{code}
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of shared steps in result set |
offset | 0 | How many shared_steps should be skipped |
filters[search] | Provide a string that will be used to search by title |
Get a specific shared step
Request:
curl "https://api.qase.io/v1/shared_steps/{code}/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": [
{
"hash": "0223905c291bada23e6049d415385982af92d758",
"title": "Shared step",
"action": "Open signup page",
"expected_result": "Page is opened",
"cases": [
41,
35,
42,
30
],
"cases_count": 4,
"created": "2019-02-09T23:16:49.000000Z",
"updated": "2019-02-09T23:16:49.000000Z"
}
]
}
This method allows to retrieve a specific shared step.
HTTP Request
GET https://api.qase.io/v1/shared_step/{code}/{hash}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
hash | True | Shared step hash |
Create a new shared step
Request:
curl "https://api.qase.io/v1/shared_step/{code}"
-X POST
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title":"Shared step", "action": "Open URL"}'
JSON payload:
{
"title": "Shared step",
"action": "Open URL",
"expected_result": "URL is opened"
}
Response:
{
"status": true,
"result": {
"hash": "0223905c291bada23e6049d415385982af92d758"
}
}
This method is used to create a new shared step through API.
HTTP Request
POST https://api.qase.io/v1/shared_step/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
JSON payload fields
Parameter | Type | Description |
---|---|---|
title | String | Shared step title. Required field. |
action | string | Step action. Required field. |
expected_result | string | Step expected result. |
Update shared step
Request:
curl "https://api.qase.io/v1/shared_step/{code}"
-X PATCH
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title":"Shared step title"}'
JSON payload:
{
"title": "Shared step",
"action": "Open URL",
"expected_result": "URL is opened"
}
Response:
{
"status": true,
"result": {
"hash": "0223905c291bada23e6049d415385982af92d758"
}
}
This method is used to update a shared step through API. You should provide an object with a list of fields you want to update in a payload. At least one field is required. Fields in payload will overwrite existing values.
HTTP Request
PATCH https://api.qase.io/v1/shared_step/{code}/{hash}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
hash | True | Shared step hash |
JSON payload fields
Parameter | Type | Description |
---|---|---|
title | String | Shared step title. Required field. |
action | string | Step action. Required field. |
expected_result | string | Step expected result. |
Delete shared step
Request:
curl "https://api.qase.io/v1/shared_step/{code}/{id}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"hash": "0223905c291bada23e6049d415385982af92d758"
}
}
This method completely deletes a shared step from repository. Also it will be removed from all test cases.
HTTP Request
DELETE https://api.qase.io/v1/shared_step/{code}/{hash}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
hash | True | Shared step hash |
Test plans
Get all test plans
Request:
curl "https://api.qase.io/v1/plan/{code}?limit=10&offset=0&filters[search]=title"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 1,
"filtered": 1,
"count": 1,
"entities": [
{
"id": 1,
"title": "Sample plan",
"description": "Regression",
"cases_count": 10,
"created": "2019-01-10T22:47:53.000000Z",
"updated": "2019-01-10T22:47:53.000000Z"
}
]
}
}
This method allows to retrieve all test plans stored in selected project. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/plan/{code}
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of test plans in result set |
offset | 0 | How many test plans should be skipped |
Get a specific test plan
Request:
curl "https://api.qase.io/v1/plan/{code}/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": 16,
"title": "Sample plan",
"description": "Awesome plan",
"cases_count": 1,
"created": "2019-09-15T18:49:07.000000Z",
"updated": "2019-09-15T18:49:30.000000Z",
"average_time": 40,
"cases": [
{
"case_id": 1,
"assignee_id": 1
}
]
}
}
This method allows to retrieve a specific test plan with detailed information about test cases in that plan and assignee.
HTTP Request
GET https://api.qase.io/v1/plan/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Plan id |
Create a new plan
Request:
curl "https://api.qase.io/v1/plan/{code}"
-X POST
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title": "New plan","description": "Awesome plan","cases": [1,2]}'
JSON payload:
{
"title": "New plan",
"description": "Awesome plan",
"cases": [1,2]
}
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method is used to create a new test plan through API. In response you will receive an ID of newly created plan.
HTTP Request
POST https://api.qase.io/v1/plan/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
JSON payload fields
Parameter | Required | Type | Description |
---|---|---|---|
title | True | String | Test plan title |
description | False | string | Test plan description |
cases | True | array | A list of test case ids |
Update test plan
Request:
curl "https://api.qase.io/v1/plan/{code}"
-X PATCH
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title":"Updated plan", "cases":[1,2,3]}'
JSON payload:
{
"title": "Updated plan",
"cases": [1,2,3]
}
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method is used to update a test plan through API. You should provide an object with a list of fields you want to update in a payload. At least one field is required. Fields in payload will overwrite existing values.
HTTP Request
PATCH https://api.qase.io/v1/plan/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test plan id |
JSON payload fields
Parameter | Required | Type | Description |
---|---|---|---|
title | False | String | Test plan title |
description | False | string | Test plan description |
cases | False | array | A list of test case ids |
Delete test plan
Request:
curl "https://api.qase.io/v1/plan/{code}/{id}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": "1"
}
}
This method completely deletes a test plan from repository
HTTP Request
DELETE https://api.qase.io/v1/plan/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test plan id |
Test runs
Get all test runs
Request:
curl "https://api.qase.io/v1/run/{code}?limit=10&offset=0"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 1,
"filtered": 1,
"count": 1,
"entities": [
{
"id": 1,
"title": "Test run 2019/12/12",
"description": null,
"status": 0,
"start_time": "2019-12-12 12:12:12",
"end_time": null,
"public": false,
"stats": {
"total": 3,
"untested": 3,
"passed": 0,
"failed": 0,
"blocked": 0,
"skipped": 0,
"retest": 0,
"deleted": 4
},
"time_spent": 0,
"user_id": 1,
"environment": null,
"cases": [1,2,3]
}
]
}
}
This method allows to retrieve all test runs stored in selected project. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/run/{code}
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of test runs in result set |
offset | 0 | How many test runs should be skipped |
filters[status] | - | A list of status values separated by comma. Possible values: active , complete , abort |
include | - | Add this param to include a list of test cases into response. Possible value: cases |
Get a specific test run
Request:
curl "https://api.qase.io/v1/run/{code}/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": 1,
"title": "Test run 2019/12/12",
"description": null,
"status": 0,
"start_time": "2019-12-12 12:12:12",
"end_time": null,
"public": false,
"stats": {
"total": 3,
"untested": 3,
"passed": 0,
"failed": 0,
"blocked": 0,
"skipped": 0,
"retest": 0,
"deleted": 4
},
"time_spent": 0,
"user_id": 1,
"environment": null,
"cases": [1,2,3]
}
}
This method allows to retrieve a specific test run.
HTTP Request
GET https://api.qase.io/v1/run/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test run id |
Query Parameters
Parameter | Default | Description |
---|---|---|
include | - | Add this param to include a list of test cases into response. Possible value: cases |
Create a new test run
Request:
curl "https://api.qase.io/v1/run/{code}"
-X POST
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"title": "New test run","description": "Awesome run by API","environment_id": null,"cases": [1,2]}'
JSON payload:
{
"title": "New test run",
"description": "Awesome run by API",
"environment_id": null,
"cases": [1,2]
}
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method is used to create a new test run through API. In response you will receive an ID of newly created run.
HTTP Request
POST https://api.qase.io/v1/run/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
JSON payload fields
Parameter | Required | Type | Description |
---|---|---|---|
title | True | String | Test run title |
description | False | string | Test run description |
environment_id | False | integer | Environment ID |
cases | True | array | A list of test case ids |
Delete test run
Request:
curl "https://api.qase.io/v1/run/{code}/{id}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": "1"
}
}
This method completely deletes a test run from repository
HTTP Request
DELETE https://api.qase.io/v1/run/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Test run id |
Test run results
Get all test run results
Request:
curl "https://api.qase.io/v1/result/{code}?limit=10&offset=0"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 1,
"filtered": 1,
"count": 1,
"entities": [
{
"hash": "6efce6e4f9de887a2ee863e8197cb74ab626a273",
"comment": null,
"run_id": 1,
"case_id": 1,
"steps": null,
"status": "Passed",
"is_api_result": false,
"time_spent": 0,
"end_time": "2018-11-11 11:11:11"
}
]
}
}
This method allows to retrieve all test run run results stored in selected project. You can you limit
and offset
params to paginate. Also you can use various filters to get specific results.
HTTP Request
GET https://api.qase.io/v1/result/{code}
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of test runs in result set |
offset | 0 | How many test runs should be skipped |
filters[status] | - | A single test run result status. Possible values: in_progress , passed , failed , blocked |
filters[member] | - | Team member ID. Search result by team member. |
filters[run] | - | Run ID. Search for all results in a specific run. |
filters[case_id] | - | Test case ID. Search for all results for a specific test case. |
filters[from_end_time] | - | Will return all results created after provided datetime. Allowed format: Y-m-d H:i:s |
filters[to_end_time] | - | Will return all results created before provided datetime. Allowed format: Y-m-d H:i:s |
Get a specific test run result
Request:
curl "https://api.qase.io/v1/result/{code}/{hash}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"hash": "6efce6e4f9de887a2ee863e8197cb74ab626a273",
"comment": null,
"run_id": 1,
"case_id": 1,
"steps": null,
"status": "Passed",
"is_api_result": false,
"time_spent": 0,
"end_time": "2018-11-11 11:11:11"
}
}
This method allows to retrieve a specific test run result by hash
.
HTTP Request
GET https://api.qase.io/v1/result/{code}/{hash}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
hash | True | Test run result hash |
Add a new test run result
Request:
curl "https://api.qase.io/v1/result/{code}/{run_id}"
-X POST
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"case_id": 1,"time": 100,"status": "passed","member_id": 1,"comment": "Failed via API","defect": true,"steps": [{"position": 1,"status": "passed"},{"position": 2,"status": "passed"},{"position": 3,"status": "failed"}]}'
JSON payload:
{
"case_id": 1,
"time": 100,
"status": "failed",
"member_id": 1,
"comment": "Failed via API",
"defect": true,
"steps": [
{
"position": 1,
"status": "passed"
},
{
"position": 2,
"status": "passed"
},
{
"position": 3,
"status": "failed",
"comment": "Something went wrong",
"attachments": [
"2898ba7f3b4d857cec8bee4a852cdc85f8b33132"
]
}
],
"attachments": [
"2898ba7f3b4d857cec8bee4a852cdc85f8b33132"
]
}
Response:
{
"status": true,
"result": {
"hash": "2898ba7f3b4d857cec8bee4a852cdc85f8b33132"
}
}
This method allows to add a new test run result through API. In response you will receive a hash of newly created result.
HTTP Request
POST https://api.qase.io/v1/result/{code}/{run_id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
run_id | True | Test run ID |
JSON payload fields
Parameter | Required | Type | Description |
---|---|---|---|
case_id | True | integer | Test case ID in a run. If case doesn't included in a run, you will receive an error in response. |
status | True | string | Test run result status. Possible values: in_progress , passed , failed , blocked |
time | False | integer | Time spent in seconds |
member_id | False | integer | An ID of team member |
comment | False | string | A comment for the result |
defect | False | boolean | If defect param is provided and set to true, a new defect will be created. |
steps | False | array | An array of step objects. Required fields: status , position . |
attachments | False | array | An array of attachments hash strings. |
Step Object
Parameter | Required | Type | Description |
---|---|---|---|
position | True | integer | Step position |
status | True | string | Step result. Possible values: passed , failed , blocked , skipped |
comment | False | string | Comment for test result. Up to 5000 symbols. |
attachments | False | string | An array of attachments hash strings. |
Update test run result
Request:
curl "https://api.qase.io/v1/result/{code}/{run_id}/{hash}"
-X PATCH
-H "Token: api_token"
-H "Content-Type: application/json"
-d '{"time": 100,"status": "passed","comment": "Failed via API","defect": true,"steps": {"3": "failed"}}'
JSON payload:
{
"time": 100,
"status": "passed",
"comment": "Failed via API v2",
"defect": true,
"steps": [
{
"position": 3,
"status": "passed"
}
]
}
Response:
{
"status": true,
"result": {
"hash": "2898ba7f3b4d857cec8bee4a852cdc85f8b33132"
}
}
This method allows to update test run result through API. At least one field is required. If you provide steps object, method will overwrite only existing steps.
HTTP Request
PATCH https://api.qase.io/v1/result/{code}/{run_id}/{hash}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
run_id | True | Test run ID |
hash | True | Test run result hash |
JSON payload fields
Parameter | Required | Type | Description |
---|---|---|---|
status | False | integer | Test run result status. Possible values: in_progress , passed , failed , blocked |
time | False | integer | Time spent in seconds |
comment | False | string | A comment for the result |
defect | False | boolean | If defect param is provided and set to true, a new defect will be created using existing data. |
steps | False | object | An array of step objects. Required fields: status , position . |
attachments | False | array | An array of attachments hash strings. |
Delete test run result
Request:
curl "https://api.qase.io/v1/result/{code}/{run_id}/{hash}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"hash": "2898ba7f3b4d857cec8bee4a852cdc85f8b33132"
}
}
This method completely deletes a test run result from repository
HTTP Request
DELETE https://api.qase.io/v1/result/{code}/{run_id}/{hash}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
run_id | True | Test run ID |
hash | True | Test run result hash |
Defects
Get all defects
Request:
curl "https://api.qase.io/v1/defect/{code}?limit=10&offset=0"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 1,
"filtered": 1,
"count": 1,
"entities": [
{
"id": 1,
"title": "Dangerous defect",
"actual_result": "Something happened",
"status": "open",
"user_id": 1,
"attachments": [],
"created": "2019-11-08T22:03:07.000000Z",
"updated": "2019-11-19T22:29:57.000000Z"
}
]
}
}
This method allows to retrieve all defects stored in selected project. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/defect/{code}
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of defects in result set |
offset | 0 | How many defects should be skipped |
filters[status] | - | A single status of defect. Possible values: open , resolved |
Get a specific defect
Request:
curl "https://api.qase.io/v1/defect/{code}/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": 1,
"title": "Dangerous defect",
"actual_result": "Something happened",
"status": "open",
"user_id": 1,
"attachments": [],
"created": "2019-11-08T22:03:07.000000Z",
"updated": "2019-11-19T22:29:57.000000Z"
}
}
This method allows to retrieve a specific defect.
HTTP Request
GET https://api.qase.io/v1/defect/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Defect id |
Resolve
Request:
curl "https://api.qase.io/v1/defect/{code}/resolve/{id}"
-X PATCH
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": 1
}
}
This method is used to resolve defect through API. If defect is already resolved, you will get a message that defect is not found.
HTTP Request
PATCH https://api.qase.io/v1/defect/{code}/resolve/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Defect id |
Delete defect
Request:
curl "https://api.qase.io/v1/defect/{code}/{id}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": "1"
}
}
This method completely deletes a defect from repository
HTTP Request
DELETE https://api.qase.io/v1/defect/{code}/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Defect id |
Custom Fields
Get all custom fields
Request:
curl "https://api.qase.io/v1/custom_field/{code}?limit=10&offset=0"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 1,
"filtered": 1,
"count": 1,
"entities": [
{
"id": 1,
"title": "Description",
"type": "Text",
"placeholder": "Write something",
"default_value": null,
"value": null,
"is_required": false,
"is_visible": false,
"is_filterable": false,
"created": "2019-08-26T22:30:07.000000Z",
"updated": "2019-08-26T22:30:07.000000Z"
}
]
}
}
This method allows to retrieve all custom fields for a specific project. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/custom_field/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of custom fields in result set |
offset | 0 | How many custom fields should be skipped |
Get a specific custom field
Request:
curl "https://api.qase.io/v1/custom_field/{code}/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": 1,
"title": "Description",
"type": "Text",
"placeholder": "Write something",
"default_value": null,
"value": null,
"is_required": false,
"is_visible": false,
"is_filterable": false,
"created": "2019-08-26T22:30:07.000000Z",
"updated": "2019-08-26T22:30:07.000000Z"
}
}
This method allows to retrieve one custom fields for specific project by id
HTTP Request
GET https://api.qase.io/v1/custom_field/{code}/{id}
URL Parameters
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
id | True | Custom field id |
Attachments
Get all attachments
Request:
curl "https://api.qase.io/v1/attachment?limit=10&offset=0"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 1,
"filtered": 1,
"count": 1,
"entities": [
{
"hash": "2497be4bc95f807d2fe3c2203793673f6e5140e8",
"file": "filename.ext",
"mime": "text/plain",
"size": 100,
"full_path": "https://storage.cdn.example/filename.ext"
}
]
}
}
This method allows to retrieve all attachments uploaded into your projects. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/attachment
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of attachments in result set |
offset | 0 | How many attachments should be skipped |
Get a specific attachment
Request:
curl "https://api.qase.io/v1/attachment/{hash}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"hash": "2497be4bc95f807d2fe3c2203793673f6e5140e8",
"file": "filename.ext",
"mime": "text/plain",
"size": 100,
"full_path": "https://storage.cdn.example/filename.ext"
}
}
This method allows to retrieve a specific attachment by hash.
HTTP Request
GET https://api.qase.io/v1/attachment/{hash}
URL Parameters
Parameter | Required | Description |
---|---|---|
hash | True | Unique hash |
Upload attachmeent
Request:
curl "https://api.qase.io/v1/attachment/{hash}"
-X POST
-H "Token: api_token"
-F "[email protected]{path/to/file}"
Response:
{
"status": true,
"result": [{
"hash": "2497be4bc95f807d2fe3c2203793673f6e5140e8",
"file": "filename.ext",
"mime": "text/plain",
"size": 100,
"full_path": "https://storage.cdn.example/filename.ext"
}]
}
This method allows to upload attachment to Qase. Files to attach are sent as request body using 'multipart/form-data' content type. Max upload size:
* Up to 32 Mb
per file
* Up to 128 Mb
per single request
* Up to 20
files per single request
If there is no free space left in your team account, you will receive an error with code 507
- Insufficient Storage.
HTTP Request
POST https://api.qase.io/v1/attachment/{code}
URL Parameters
Parameter | Required | Description |
---|---|---|
code | True | Project code |
Delete attachment
Request:
curl "https://api.qase.io/v1/attachment/{hash}"
-X DELETE
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"hash": "2497be4bc95f807d2fe3c2203793673f6e5140e8"
}
}
This method completely deletes an attachment.
HTTP Request
DELETE https://api.qase.io/v1/attachment/{hash}
URL Parameters
Parameter | Required | Description |
---|---|---|
hash | True | Attachment hash field |
Team
Get all team members
Request:
curl "https://api.qase.io/v1/user?limit=10&offset=0"
-H "Token: api_token"
-H "Content-type: application/json"
Response:
{
"status": true,
"result": {
"total": 1,
"filtered": 13,
"count": 1,
"entities": [
{
"id": 1,
"name": "John Smith",
"email": "[email protected]",
"title": "Team Owner",
"status": 1
}
]
}
}
This method allows to retrieve all users in your team. You can you limit
and offset
params to paginate.
HTTP Request
GET https://api.qase.io/v1/user
Query Parameters
Parameter | Default | Description |
---|---|---|
limit | 100 | A number of users in result set |
offset | 0 | How many users should be skipped |
Get a specific team member
Request:
curl "https://api.qase.io/v1/user/{id}"
-H "Token: api_token"
-H "Content-Type: application/json"
Response:
{
"status": true,
"result": {
"id": 1,
"name": "John Smith",
"email": "[email protected]",
"title": "Team Owner",
"status": 1
}
}
This method allows to retrieve a specific team member by id.
HTTP Request
GET https://api.qase.io/v1/user/{id}
URL Parameters
Parameter | Required | Description |
---|---|---|
id | True | Team member ID |
Errors
Qase API uses the following error codes:
Code | Meaning |
---|---|
400 | Bad Request -- Your request is invalid. |
401 | Unauthorized -- Your API key is wrong. |
403 | Forbidden -- Your role doesn't have enough permissions to perform this action |
404 | Not Found -- The resource could not be found. |
405 | Method Not Allowed -- You tried to access a resource with an invalid method. |
406 | Not Acceptable -- You requested a format that isn't json. |
410 | Gone -- The resource requested has been removed from our servers. |
429 | Too Many Requests -- You're performing too many requests! Slow down! |
500 | Internal Server Error -- We had a problem with our server. Try again later. |
503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |