API Reference
Bugs
Manage bugs found during testing.
Note: Bugs are automatically created when testers report issues during test execution. To create and run tests, see Exploratory Tests. You can filter bugs by product ID, section ID, or test cycle ID.
Fetch bugs
Returns a paginated list of bugs, with optional filtering.
Endpoint: GET /bugs{?page,per_page}
Query Parameters:
page(number, optional) - Page number of the result set. Default: 1per_page(number, optional) - Number of bugs per page. Maximum: 500. Default: 25 whenpageis given, 500 otherwisefilter_product_ids(string, optional) - Comma-separated product IDsfilter_section_ids(string, optional) - Comma-separated section IDsfilter_test_cycle_ids(string, optional) - Comma-separated test cycle IDsexport_status(string, optional) - Export status filter. Values:export_requested,not_exported,exported
Responses are always paginated and never return more than 500 bugs. A per_page above 500 is reduced to 500 rather than rejected, so read meta.per_page from the response — not the value you requested — when working out how many pages to fetch. page and per_page must both be 1 or greater; 0 or a negative number returns 400 Bad Request.
To retrieve every bug, request successive pages until an empty bugs array comes back.
Example Request:
1curl -X GET "https://api.test.io/customer/v2/bugs?filter_product_ids=1,2&export_status=not_exported&page=1&per_page=100" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
1{
2 "meta": {
3 "record_count": 600,
4 "page": 1,
5 "per_page": 100
6 },
7 "bugs": [
8 {
9 "id": 123,
10 "title": "Summary of the bug",
11 "severity": "high",
12 "language": "en",
13 "location": "https://example.com/page",
14 "expected_result": "Expected result",
15 "actual_result": "Actual result",
16 "steps": "Step to reproduce the bug",
17 "known": false,
18 "exported_at": null
19 }
20 ]
21}Response Fields:
| Field | Type | Description |
|---|---|---|
meta.record_count | integer | Total bugs matching the query, across all pages |
meta.page | integer | Page returned |
meta.per_page | integer | Page size actually applied, after the 500 maximum is enforced |
bugs | array | Bugs on this page |
Get bug
Retrieve a specific bug by ID.
Endpoint: GET /bugs/{bug_id}
Parameters:
bug_id(number, required) - ID of the bug
Example Request:
1curl -X GET "https://api.test.io/customer/v2/bugs/123" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
1{
2 "bug": {
3 "id": 123,
4 "title": "Summary of the bug",
5 "severity": "high",
6 "language": "en",
7 "location": "https://example.com/page",
8 "expected_result": "Expected result",
9 "actual_result": "Actual result",
10 "steps": "Step to reproduce the bug",
11 "known": false,
12 "exported_at": null
13 }
14}Search bug
Search for bugs using external index.
Endpoint: POST /bugs
Request Body:
1{
2 "bug": {
3 "external_idx": "id in the system"
4 }
5}Example Request:
1curl -X POST "https://api.test.io/customer/v2/bugs" \
2 -H "Authorization: Token YOUR_API_TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bug": {
6 "external_idx": "id in the system"
7 }
8 }'Response: 200 OK
Returns an array of matching bug objects.
Fetch Reject Reasons
Get a list of available reject reasons for bugs.
Endpoint: GET /bugs/reject_reasons
Example Request:
1curl -X GET "https://api.test.io/customer/v2/bugs/reject_reasons" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
Returns an array of reject reason objects.
Accept bug
Accept a bug.
Endpoint: PUT /bugs/{bug_id}/accept
Parameters:
bug_id(number, required) - ID of the bug
Example Request:
1curl -X PUT "https://api.test.io/customer/v2/bugs/123/accept" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
1{
2 "bug": {
3 "id": 123,
4 "title": "Summary of the bug",
5 "severity": "high",
6 "status": "accepted"
7 }
8}Mark As Exported
Mark a bug as exported.
Endpoint: PUT /bugs/{bug_id}/mark_as_exported
Parameters:
bug_id(number, required) - ID of the bug
Example Request:
1curl -X PUT "https://api.test.io/customer/v2/bugs/123/mark_as_exported" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
Returns the updated bug object.
Mark As Known
Mark a bug as known.
Endpoint: PUT /bugs/{bug_id}/mark_as_known
Parameters:
bug_id(number, required) - ID of the bug
Example Request:
1curl -X PUT "https://api.test.io/customer/v2/bugs/123/mark_as_known" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
Returns the updated bug object.
Mark As Fixed
Mark a bug as fixed.
Endpoint: PUT /bugs/{bug_id}/mark_as_fixed
Parameters:
bug_id(number, required) - ID of the bug
Example Request:
1curl -X PUT "https://api.test.io/customer/v2/bugs/123/mark_as_fixed" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
Returns the updated bug object.
Reject bug
Reject a bug with a reason and comment.
Endpoint: PUT /bugs/{bug_id}/reject
Parameters:
bug_id(number, required) - ID of the bug
Request Body:
reason(string, required) - Reject reasoncomment(string, required) - Reject comment
Example Request:
1curl -X PUT "https://api.test.io/customer/v2/bugs/123/reject" \
2 -H "Authorization: Token YOUR_API_TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "reason": "known_bug",
6 "comment": "This bug is already known and being tracked"
7 }'Response: 200 OK
1{
2 "bug": {
3 "id": 123,
4 "title": "Summary of the bug",
5 "severity": "high",
6 "status": "rejected"
7 }
8}