API Reference
Custom Bug Export Connections
Manage custom bug export connections for your products and sections.
Custom Bug Export Connections let you expose an HTTPS endpoint that receives a bug payload when someone clicks "Export" in the customer interface. Only bugs exported by a user action (or auto‑export if enabled) are sent. Use this to integrate any external tracker or workflow system without a native integration.
Supported bug trackers
Use a Custom Bug Export Connection for any tracker or workflow that can accept an HTTP POST. For native trackers, see our integrations list; otherwise, a custom connection is a flexible alternative.
Common trackers used with custom exports
- Azure DevOps
- Bugzilla
- ClickUp
- GitHub
- GitLab
- Gitea
- Jira Cloud
- Jira Server
- Linear
- Monday
- Notion
- OpenProject
- PivotalTracker
- Rally
- Redmine
- Shortcut
- Teamwork
- Trello
- Wrike
- YouTrack
- Zendesk
- Zoho
Create Custom Bug Export Connection
Create a new connection.
Endpoint: POST /connections
Request Body:
name(string, required) - Connection nameurl(string, required) - HTTPS endpoint that will receive exported bug payloads via POSTfixed(boolean, optional) - Whether the connection is fixedproduct_ids(array[number], optional) - Array of product IDssection_ids(array[number], optional) - Array of section IDs
Example Request:
1curl -X POST "https://api.test.io/customer/v2/connections" \
2 -H "Authorization: Token YOUR_API_TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "name": "Issue Endpoint",
6 "url": "https://issues.example.com/export",
7 "fixed": false,
8 "product_ids": [1, 2],
9 "section_ids": [5]
10 }'Response: 201 Created
1{
2 "connection": {
3 "id": 42,
4 "name": "Issue Endpoint",
5 "url": "https://issues.example.com/export",
6 "fixed": false
7 }
8}Get connection
Retrieve a specific connection by ID.
Endpoint: GET /connections/{connection_id}
Parameters:
connection_id(number, required) - The ID of the connection
Example Request:
1curl -X GET "https://api.test.io/customer/v2/connections/42" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
1{
2 "connection": {
3 "id": 42,
4 "name": "Issue Endpoint",
5 "url": "https://issues.example.com/export",
6 "fixed": false
7 }
8}Update connection
Update an existing connection.
Endpoint: PUT /connections/{connection_id}
Parameters:
connection_id(number, required) - The ID of the connection
Request Body:
name(string, required) - Connection nameurl(string, optional) - Connection URLfixed(boolean, optional) - Whether the connection is fixedproduct_ids(array[number], optional) - Array of product IDssection_ids(array[number], optional) - Array of section IDs
Example Request:
1curl -X PUT "https://api.test.io/customer/v2/connections/42" \
2 -H "Authorization: Token YOUR_API_TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "name": "Issue Endpoint (Prod)",
6 "url": "https://issues.example.com/export",
7 "fixed": true
8 }'Response: 200 OK
1{
2 "connection": {
3 "id": 42,
4 "name": "Issue Endpoint (Prod)",
5 "url": "https://issues.example.com/export",
6 "fixed": true
7 }
8}Delete connection
Delete a connection.
Endpoint: DELETE /connections/{connection_id}
Parameters:
connection_id(number, required) - The ID of the connection
Example Request:
1curl -X DELETE "https://api.test.io/customer/v2/connections/42" \
2 -H "Authorization: Token YOUR_API_TOKEN"Response: 200 OK
1{
2 "connection": {
3 "id": 42,
4 "name": "Issue Endpoint (Prod)",
5 "url": "https://issues.example.com/export",
6 "fixed": true
7 }
8}Export trigger and payload
An export is triggered when a user clicks "Export" in the customer interface for a bug (or when auto‑export is enabled for accepted bugs). When triggered, test IO sends an HTTP POST to your url with a JSON body that includes the bug and useful context.
Request
- Method:
POST - URL: The
urlyou configured on the connection - Headers:
Content-Type: application/json
JSON payload
{
"event": "bug.exported",
"exported_at": "2025-11-07T10:15:00Z",
"bug": {
"id": 12345,
"title": "Checkout total is incorrect",
"description": "Observed wrong total after applying promo code.",
"steps_to_reproduce": [
"Add item to cart",
"Apply PROMO20",
"Proceed to checkout"
],
"expected_result": "20% discount applied to subtotal",
"actual_result": "10% discount applied",
"severity": "high",
"priority": "p2",
"status": "accepted",
"attachments": [
{ "url": "https://files.test.io/attachments/abc.png", "type": "image/png" },
{ "url": "https://files.test.io/attachments/repro.mp4", "type": "video/mp4" }
],
"device": {
"device_type": "mobile",
"os": "ios",
"os_version": "17.2",
"browser": "safari"
},
"reporter": { "id": 999, "name": "QA Tester" },
"test_cycle_id": 7777,
"product_id": 1,
"link": "https://app.test.io/bugs/12345"
}
}
Notes
- Use the
bug.linkto navigate back to the bug in test IO. attachmentsare provided as direct URLs.- You can correlate exports to internal systems using the
bug.idandtest_cycle_id.
Response handling
Your endpoint should return 2xx on success. Non‑2xx responses may be retried.