Test campaigns
Multi-cycle programmes of work, grouped for reporting.
List test campaigns
/api/v1/test_campaignsQuery parameters
filterstring- A FiltrQL expression, url-encoded. Combine with AND / OR and parentheses. See the Filtering page for the full operator list, or call /filter-reference for the live one.
status = 'PASSED' AND executedAt > now-7dsortstring- Comma-separated field list. Prefix a field with a minus for descending order.
-createdAt,namepage[number]integer- Which page to return, starting at 1.
2page[size]integer- Results per page. Defaults to 25, and the maximum is 100.
50includestring- Comma-separated relationships to side-load into the response, saving a second request. Chains up to 3 deep.
requirement,folderfields[type]string- Return only these attributes for the named resource type - a sparse fieldset. Cuts payload size sharply on wide entities.
fields[test_cases]=name,status
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Attributes returned19
campaignKeystring | nullcampaignKeyNumericinteger | nullcreatedAtdate-timecreatedByuuid | nullcustomFieldsanydeletedAtdate-time | nulldescriptionstring | nullfolderIduuid | null
Show the remaining 11
iduuidnamestringoccVersionintegerorganizationIduuidprojectIduuidpurposestringREGRESSIONSMOKEFUNCTIONALPERFORMANCESECURITYAPIUIINTEGRATIONCUSTOMrankintegerstatusstringDRAFTACTIVEIN_PROGRESSDONEARCHIVEDupdatedAtdate-timeupdatedByuuid | nullversionstring | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaigns?page%5Bsize%5D=25" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": [
{
"type": "test_campaigns",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"status": "DRAFT",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignKey": "KAN-TC-42",
"campaignKeyNumeric": 1,
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaigns?page[number]=1",
"next": "/api/v1/test_campaigns?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Create a test campaign
/api/v1/test_campaignsNeeds a read-and-write token. A read-only token gets 403.
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Attributes you can send19
namestringrequiredorganizationIduuidrequiredprojectIduuidrequiredpurposestringrequiredREGRESSIONSMOKEFUNCTIONALPERFORMANCESECURITYAPIUIINTEGRATIONCUSTOMrankintegerrequiredcampaignKeystring | nullcampaignKeyNumericinteger | nullcreatedAtdate-timecreatedByuuid | nullcustomFieldsanydeletedAtdate-time | nulldescriptionstring | nullfolderIduuid | nulliduuidoccVersionintegerstatusstringDRAFTACTIVEIN_PROGRESSDONEARCHIVEDupdatedAtdate-timeupdatedByuuid | nullversionstring | null
Attributes returned19
campaignKeystring | nullcampaignKeyNumericinteger | nullcreatedAtdate-timecreatedByuuid | nullcustomFieldsanydeletedAtdate-time | nulldescriptionstring | nullfolderIduuid | null
Show the remaining 11
iduuidnamestringoccVersionintegerorganizationIduuidprojectIduuidpurposestringREGRESSIONSMOKEFUNCTIONALPERFORMANCESECURITYAPIUIINTEGRATIONCUSTOMrankintegerstatusstringDRAFTACTIVEIN_PROGRESSDONEARCHIVEDupdatedAtdate-timeupdatedByuuid | nullversionstring | null
Responses
- 201Created.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaigns" \
-X POST \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "test_campaigns",
"attributes": {
"name": "Checkout rejects an expired card",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"purpose": "REGRESSION",
"rank": 1,
"status": "DRAFT"
}
}
}'application/vnd.api+json
{
"data": [
{
"type": "test_campaigns",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"status": "DRAFT",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignKey": "KAN-TC-42",
"campaignKeyNumeric": 1,
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaigns?page[number]=1",
"next": "/api/v1/test_campaigns?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Get a test campaign
/api/v1/test_campaigns/{id}Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Attributes returned19
campaignKeystring | nullcampaignKeyNumericinteger | nullcreatedAtdate-timecreatedByuuid | nullcustomFieldsanydeletedAtdate-time | nulldescriptionstring | nullfolderIduuid | null
Show the remaining 11
iduuidnamestringoccVersionintegerorganizationIduuidprojectIduuidpurposestringREGRESSIONSMOKEFUNCTIONALPERFORMANCESECURITYAPIUIINTEGRATIONCUSTOMrankintegerstatusstringDRAFTACTIVEIN_PROGRESSDONEARCHIVEDupdatedAtdate-timeupdatedByuuid | nullversionstring | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaigns/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": {
"type": "test_campaigns",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"status": "DRAFT",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignKey": "KAN-TC-42",
"campaignKeyNumeric": 1,
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Update a test campaign
/api/v1/test_campaigns/{id}Needs a read-and-write token. A read-only token gets 403.
Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Attributes you can send19
campaignKeystring | nullcampaignKeyNumericinteger | nullcreatedAtdate-timecreatedByuuid | nullcustomFieldsanydeletedAtdate-time | nulldescriptionstring | nullfolderIduuid | nulliduuidnamestringoccVersionintegerorganizationIduuidprojectIduuidpurposestringREGRESSIONSMOKEFUNCTIONALPERFORMANCESECURITYAPIUIINTEGRATIONCUSTOMrankintegerstatusstringDRAFTACTIVEIN_PROGRESSDONEARCHIVEDupdatedAtdate-timeupdatedByuuid | nullversionstring | null
Attributes returned19
campaignKeystring | nullcampaignKeyNumericinteger | nullcreatedAtdate-timecreatedByuuid | nullcustomFieldsanydeletedAtdate-time | nulldescriptionstring | nullfolderIduuid | null
Show the remaining 11
iduuidnamestringoccVersionintegerorganizationIduuidprojectIduuidpurposestringREGRESSIONSMOKEFUNCTIONALPERFORMANCESECURITYAPIUIINTEGRATIONCUSTOMrankintegerstatusstringDRAFTACTIVEIN_PROGRESSDONEARCHIVEDupdatedAtdate-timeupdatedByuuid | nullversionstring | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaigns/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-X PATCH \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "test_campaigns",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"status": "DRAFT",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignKey": "KAN-TC-42"
}
}
}'application/vnd.api+json
{
"data": {
"type": "test_campaigns",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"status": "DRAFT",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignKey": "KAN-TC-42",
"campaignKeyNumeric": 1,
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Delete a test campaign
/api/v1/test_campaigns/{id}Needs a read-and-write token. A read-only token gets 403.
Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaigns/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-X DELETE \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": {
"type": "test_campaigns",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Aggregate test campaigns
/api/v1/test_campaigns/aggregateHeaders
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaigns/aggregate" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"meta": {
"count": 128
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Describe the test campaign schema
/api/v1/test_campaigns/schemaQuery parameters
filterstring- A FiltrQL expression, url-encoded. Combine with AND / OR and parentheses. See the Filtering page for the full operator list, or call /filter-reference for the live one.
status = 'PASSED' AND executedAt > now-7dsortstring- Comma-separated field list. Prefix a field with a minus for descending order.
-createdAt,namepage[number]integer- Which page to return, starting at 1.
2page[size]integer- Results per page. Defaults to 25, and the maximum is 100.
50includestring- Comma-separated relationships to side-load into the response, saving a second request. Chains up to 3 deep.
requirement,folderfields[type]string- Return only these attributes for the named resource type - a sparse fieldset. Cuts payload size sharply on wide entities.
fields[test_cases]=name,status
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaigns/schema?page%5Bsize%5D=25" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": [
{
"type": "test_campaigns",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaigns?page[number]=1",
"next": "/api/v1/test_campaigns?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}List test campaign cycles
/api/v1/test_campaign_cyclesQuery parameters
filterstring- A FiltrQL expression, url-encoded. Combine with AND / OR and parentheses. See the Filtering page for the full operator list, or call /filter-reference for the live one.
status = 'PASSED' AND executedAt > now-7dsortstring- Comma-separated field list. Prefix a field with a minus for descending order.
-createdAt,namepage[number]integer- Which page to return, starting at 1.
2page[size]integer- Results per page. Defaults to 25, and the maximum is 100.
50includestring- Comma-separated relationships to side-load into the response, saving a second request. Chains up to 3 deep.
requirement,folderfields[type]string- Return only these attributes for the named resource type - a sparse fieldset. Cuts payload size sharply on wide entities.
fields[test_cases]=name,status
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Attributes returned10
campaignIduuidcreatedAtdate-timecreatedByuuid | nulliduuidorganizationIduuidpositionOrderintegerprojectIduuidtestCycleIduuid
Show the remaining 2
updatedAtdate-timeupdatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_cycles?page%5Bsize%5D=25" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": [
{
"type": "test_campaign_cycles",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"positionOrder": 1,
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"testCycleId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaign_cycles?page[number]=1",
"next": "/api/v1/test_campaign_cycles?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Create a test campaign cycle
/api/v1/test_campaign_cyclesNeeds a read-and-write token. A read-only token gets 403.
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Attributes you can send10
campaignIduuidrequiredorganizationIduuidrequiredprojectIduuidrequiredtestCycleIduuidrequiredcreatedAtdate-timecreatedByuuid | nulliduuidpositionOrderintegerupdatedAtdate-timeupdatedByuuid | null
Attributes returned10
campaignIduuidcreatedAtdate-timecreatedByuuid | nulliduuidorganizationIduuidpositionOrderintegerprojectIduuidtestCycleIduuid
Show the remaining 2
updatedAtdate-timeupdatedByuuid | null
Responses
- 201Created.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_cycles" \
-X POST \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "test_campaign_cycles",
"attributes": {
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"testCycleId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z"
}
}
}'application/vnd.api+json
{
"data": [
{
"type": "test_campaign_cycles",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"positionOrder": 1,
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"testCycleId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaign_cycles?page[number]=1",
"next": "/api/v1/test_campaign_cycles?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Get a test campaign cycle
/api/v1/test_campaign_cycles/{id}Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Attributes returned10
campaignIduuidcreatedAtdate-timecreatedByuuid | nulliduuidorganizationIduuidpositionOrderintegerprojectIduuidtestCycleIduuid
Show the remaining 2
updatedAtdate-timeupdatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_cycles/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": {
"type": "test_campaign_cycles",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"positionOrder": 1,
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"testCycleId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Update a test campaign cycle
/api/v1/test_campaign_cycles/{id}Needs a read-and-write token. A read-only token gets 403.
Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Attributes you can send10
campaignIduuidcreatedAtdate-timecreatedByuuid | nulliduuidorganizationIduuidpositionOrderintegerprojectIduuidtestCycleIduuidupdatedAtdate-timeupdatedByuuid | null
Attributes returned10
campaignIduuidcreatedAtdate-timecreatedByuuid | nulliduuidorganizationIduuidpositionOrderintegerprojectIduuidtestCycleIduuid
Show the remaining 2
updatedAtdate-timeupdatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_cycles/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-X PATCH \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "test_campaign_cycles",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"positionOrder": 1
}
}
}'application/vnd.api+json
{
"data": {
"type": "test_campaign_cycles",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"positionOrder": 1,
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"testCycleId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Delete a test campaign cycle
/api/v1/test_campaign_cycles/{id}Needs a read-and-write token. A read-only token gets 403.
Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_cycles/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-X DELETE \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": {
"type": "test_campaign_cycles",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Aggregate test campaign cycles
/api/v1/test_campaign_cycles/aggregateHeaders
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_cycles/aggregate" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"meta": {
"count": 128
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}List test campaign folders
/api/v1/test_campaign_foldersQuery parameters
filterstring- A FiltrQL expression, url-encoded. Combine with AND / OR and parentheses. See the Filtering page for the full operator list, or call /filter-reference for the live one.
status = 'PASSED' AND executedAt > now-7dsortstring- Comma-separated field list. Prefix a field with a minus for descending order.
-createdAt,namepage[number]integer- Which page to return, starting at 1.
2page[size]integer- Results per page. Defaults to 25, and the maximum is 100.
50includestring- Comma-separated relationships to side-load into the response, saving a second request. Chains up to 3 deep.
requirement,folderfields[type]string- Return only these attributes for the named resource type - a sparse fieldset. Cuts payload size sharply on wide entities.
fields[test_cases]=name,status
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Attributes returned11
createdAtdate-timecreatedByuuid | nulldescriptionstring | nulliduuidnamestringorganizationIduuidparentFolderIduuid | nullprojectIduuid
Show the remaining 3
rankintegerupdatedAtdate-timeupdatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_folders?page%5Bsize%5D=25" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": [
{
"type": "test_campaign_folders",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"parentFolderId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaign_folders?page[number]=1",
"next": "/api/v1/test_campaign_folders?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Create a test campaign folder
/api/v1/test_campaign_foldersNeeds a read-and-write token. A read-only token gets 403.
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Attributes you can send11
namestringrequiredorganizationIduuidrequiredprojectIduuidrequiredrankintegerrequiredcreatedAtdate-timecreatedByuuid | nulldescriptionstring | nulliduuidparentFolderIduuid | nullupdatedAtdate-timeupdatedByuuid | null
Attributes returned11
createdAtdate-timecreatedByuuid | nulldescriptionstring | nulliduuidnamestringorganizationIduuidparentFolderIduuid | nullprojectIduuid
Show the remaining 3
rankintegerupdatedAtdate-timeupdatedByuuid | null
Responses
- 201Created.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_folders" \
-X POST \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "test_campaign_folders",
"attributes": {
"name": "Checkout rejects an expired card",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"rank": 1,
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z"
}
}
}'application/vnd.api+json
{
"data": [
{
"type": "test_campaign_folders",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"parentFolderId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaign_folders?page[number]=1",
"next": "/api/v1/test_campaign_folders?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Get a test campaign folder
/api/v1/test_campaign_folders/{id}Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Attributes returned11
createdAtdate-timecreatedByuuid | nulldescriptionstring | nulliduuidnamestringorganizationIduuidparentFolderIduuid | nullprojectIduuid
Show the remaining 3
rankintegerupdatedAtdate-timeupdatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_folders/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": {
"type": "test_campaign_folders",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"parentFolderId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Update a test campaign folder
/api/v1/test_campaign_folders/{id}Needs a read-and-write token. A read-only token gets 403.
Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Attributes you can send11
createdAtdate-timecreatedByuuid | nulldescriptionstring | nulliduuidnamestringorganizationIduuidparentFolderIduuid | nullprojectIduuidrankintegerupdatedAtdate-timeupdatedByuuid | null
Attributes returned11
createdAtdate-timecreatedByuuid | nulldescriptionstring | nulliduuidnamestringorganizationIduuidparentFolderIduuid | nullprojectIduuid
Show the remaining 3
rankintegerupdatedAtdate-timeupdatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_folders/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-X PATCH \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "test_campaign_folders",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}'application/vnd.api+json
{
"data": {
"type": "test_campaign_folders",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"name": "Checkout rejects an expired card",
"description": "Given a card past its expiry date, the payment is refused.",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"parentFolderId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Delete a test campaign folder
/api/v1/test_campaign_folders/{id}Needs a read-and-write token. A read-only token gets 403.
Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_folders/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-X DELETE \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": {
"type": "test_campaign_folders",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Aggregate test campaign folders
/api/v1/test_campaign_folders/aggregateHeaders
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_folders/aggregate" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"meta": {
"count": 128
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}List test campaign fix versions
/api/v1/test_campaign_fix_versionsQuery parameters
filterstring- A FiltrQL expression, url-encoded. Combine with AND / OR and parentheses. See the Filtering page for the full operator list, or call /filter-reference for the live one.
status = 'PASSED' AND executedAt > now-7dsortstring- Comma-separated field list. Prefix a field with a minus for descending order.
-createdAt,namepage[number]integer- Which page to return, starting at 1.
2page[size]integer- Results per page. Defaults to 25, and the maximum is 100.
50includestring- Comma-separated relationships to side-load into the response, saving a second request. Chains up to 3 deep.
requirement,folderfields[type]string- Return only these attributes for the named resource type - a sparse fieldset. Cuts payload size sharply on wide entities.
fields[test_cases]=name,status
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Attributes returned9
campaignIduuidcreatedAtdate-timecreatedByuuid | nullfixVersionIduuididuuidorganizationIduuidprojectIduuidupdatedAtdate-time
Show the remaining 1
updatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_fix_versions?page%5Bsize%5D=25" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": [
{
"type": "test_campaign_fix_versions",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"fixVersionId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"updatedBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaign_fix_versions?page[number]=1",
"next": "/api/v1/test_campaign_fix_versions?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Create a test campaign fix version
/api/v1/test_campaign_fix_versionsNeeds a read-and-write token. A read-only token gets 403.
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Attributes you can send9
campaignIduuidrequiredfixVersionIduuidrequiredorganizationIduuidrequiredprojectIduuidrequiredcreatedAtdate-timecreatedByuuid | nulliduuidupdatedAtdate-timeupdatedByuuid | null
Attributes returned9
campaignIduuidcreatedAtdate-timecreatedByuuid | nullfixVersionIduuididuuidorganizationIduuidprojectIduuidupdatedAtdate-time
Show the remaining 1
updatedByuuid | null
Responses
- 201Created.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_fix_versions" \
-X POST \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "test_campaign_fix_versions",
"attributes": {
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"fixVersionId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z"
}
}
}'application/vnd.api+json
{
"data": [
{
"type": "test_campaign_fix_versions",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"fixVersionId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"updatedBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
],
"meta": {
"totalCount": 128
},
"links": {
"first": "/api/v1/test_campaign_fix_versions?page[number]=1",
"next": "/api/v1/test_campaign_fix_versions?page[number]=2"
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Get a test campaign fix version
/api/v1/test_campaign_fix_versions/{id}Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Attributes returned9
campaignIduuidcreatedAtdate-timecreatedByuuid | nullfixVersionIduuididuuidorganizationIduuidprojectIduuidupdatedAtdate-time
Show the remaining 1
updatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_fix_versions/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": {
"type": "test_campaign_fix_versions",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"fixVersionId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"updatedBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Update a test campaign fix version
/api/v1/test_campaign_fix_versions/{id}Needs a read-and-write token. A read-only token gets 403.
Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Attributes you can send9
campaignIduuidcreatedAtdate-timecreatedByuuid | nullfixVersionIduuididuuidorganizationIduuidprojectIduuidupdatedAtdate-timeupdatedByuuid | null
Attributes returned9
campaignIduuidcreatedAtdate-timecreatedByuuid | nullfixVersionIduuididuuidorganizationIduuidprojectIduuidupdatedAtdate-time
Show the remaining 1
updatedByuuid | null
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_fix_versions/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-X PATCH \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "test_campaign_fix_versions",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"fixVersionId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}'application/vnd.api+json
{
"data": {
"type": "test_campaign_fix_versions",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {
"createdAt": "2026-08-18T09:30:00Z",
"updatedAt": "2026-08-18T09:30:00Z",
"campaignId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"createdBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"fixVersionId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"projectId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"updatedBy": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33"
}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Delete a test campaign fix version
/api/v1/test_campaign_fix_versions/{id}Needs a read-and-write token. A read-only token gets 403.
Path parameters
idstringrequired- The resource id (a UUID).
Headers
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+jsonContent-Typestringrequired- Must be application/vnd.api+json on any request with a body. Any other value returns 415 Unsupported Media Type.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_fix_versions/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
-X DELETE \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"data": {
"type": "test_campaign_fix_versions",
"id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
"attributes": {}
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Aggregate test campaign fix versions
/api/v1/test_campaign_fix_versions/aggregateHeaders
Authorizationstringrequired- Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HEREAcceptstringrequired- Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Responses
- 200OK.
- 403The token is missing, expired, revoked, aimed at another Space, or lacks write access.
- 404No such resource, or it is outside the Space your token reaches.
- 406The Accept header did not include application/vnd.api+json.
- 429Rate limit exceeded: 100 requests a minute per token, shared with MCP.
curl
curl "https://prod-eu.getbestest.com/api/v1/test_campaign_fix_versions/aggregate" \
-H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
-H "Accept: application/vnd.api+json"application/vnd.api+json
{
"meta": {
"count": 128
}
}Show an error response
any 4xx
{
"errors": [
{
"status": "403",
"title": "Forbidden",
"code": "FORBIDDEN",
"detail": "Access denied.",
"source": {
"pointer": "/data"
}
}
]
}Relationship endpoints
JSON:API exposes each relationship at its own URL. They take the same headers and return the same envelope as everything above, so they are listed rather than documented one by one. In most cases ?include= on the parent request is the better tool: one round trip instead of two.
Show all 45
- GET
/api/v1/test_campaigns/{id}/fkTestCampaignsCreatedByUser - GET
/api/v1/test_campaigns/{id}/fkTestCampaignsUpdatedByUser - GET
/api/v1/test_campaigns/{id}/organization - GET
/api/v1/test_campaigns/{id}/project - GET
/api/v1/test_campaigns/{id}/testCampaignFolder - POST
/api/v1/test_campaigns/{id}/actions/restore - GET
/api/v1/test_campaigns/{id}/relationships/fkTestCampaignsCreatedByUser - GET
/api/v1/test_campaigns/{id}/relationships/fkTestCampaignsUpdatedByUser - GET
/api/v1/test_campaigns/{id}/relationships/organization - GET
/api/v1/test_campaigns/{id}/relationships/project - GET
/api/v1/test_campaigns/{id}/relationships/testCampaignFolder - GET
/api/v1/test_campaign_cycles/{id}/fkCampaignCyclesCreatedByUser - GET
/api/v1/test_campaign_cycles/{id}/fkCampaignCyclesUpdatedByUser - GET
/api/v1/test_campaign_cycles/{id}/organization - GET
/api/v1/test_campaign_cycles/{id}/project - GET
/api/v1/test_campaign_cycles/{id}/testCampaign - GET
/api/v1/test_campaign_cycles/{id}/testCycle - GET
/api/v1/test_campaign_cycles/{id}/relationships/fkCampaignCyclesCreatedByUser - GET
/api/v1/test_campaign_cycles/{id}/relationships/fkCampaignCyclesUpdatedByUser - GET
/api/v1/test_campaign_cycles/{id}/relationships/organization - GET
/api/v1/test_campaign_cycles/{id}/relationships/project - GET
/api/v1/test_campaign_cycles/{id}/relationships/testCampaign - GET
/api/v1/test_campaign_cycles/{id}/relationships/testCycle - GET
/api/v1/test_campaign_folders/{id}/fkTestCampaignFoldersCreatedByUser - GET
/api/v1/test_campaign_folders/{id}/fkTestCampaignFoldersUpdatedByUser - GET
/api/v1/test_campaign_folders/{id}/organization - GET
/api/v1/test_campaign_folders/{id}/project - GET
/api/v1/test_campaign_folders/{id}/testCampaignFolder - GET
/api/v1/test_campaign_folders/{id}/relationships/fkTestCampaignFoldersCreatedByUser - GET
/api/v1/test_campaign_folders/{id}/relationships/fkTestCampaignFoldersUpdatedByUser - GET
/api/v1/test_campaign_folders/{id}/relationships/organization - GET
/api/v1/test_campaign_folders/{id}/relationships/project - GET
/api/v1/test_campaign_folders/{id}/relationships/testCampaignFolder - GET
/api/v1/test_campaign_fix_versions/{id}/fixVersion - GET
/api/v1/test_campaign_fix_versions/{id}/fkCampaignFixVersionsCreatedByUser - GET
/api/v1/test_campaign_fix_versions/{id}/fkCampaignFixVersionsUpdatedByUser - GET
/api/v1/test_campaign_fix_versions/{id}/organization - GET
/api/v1/test_campaign_fix_versions/{id}/project - GET
/api/v1/test_campaign_fix_versions/{id}/testCampaign - GET
/api/v1/test_campaign_fix_versions/{id}/relationships/fixVersion - GET
/api/v1/test_campaign_fix_versions/{id}/relationships/fkCampaignFixVersionsCreatedByUser - GET
/api/v1/test_campaign_fix_versions/{id}/relationships/fkCampaignFixVersionsUpdatedByUser - GET
/api/v1/test_campaign_fix_versions/{id}/relationships/organization - GET
/api/v1/test_campaign_fix_versions/{id}/relationships/project - GET
/api/v1/test_campaign_fix_versions/{id}/relationships/testCampaign
