REST API reference

Custom fields

Your own fields on requirements, test cases, cycles and executions.

List gqlith custom field

GET/api/v1/gqlith_custom_field

Query 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-7d
sortstring
Comma-separated field list. Prefix a field with a minus for descending order.
-createdAt,name
page[number]integer
Which page to return, starting at 1.
2
page[size]integer
Results per page. Defaults to 25, and the maximum is 100.
50
includestring
Comma-separated relationships to side-load into the response, saving a second request. Chains up to 3 deep.
requirement,folder
fields[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_HERE
Acceptstringrequired
Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json

Attributes returned27

archivedAtdate-time | null
createdAtdate-time
createdBystring | null
descriptionstring | null
entitystring
filterableboolean
filterFieldKindstring | null
iduuid
Show the remaining 19
keystring
kindstring
labelstring
metadataany
nullableboolean
optionsany
organizationIduuid
positioninteger | null
readOnlyboolean
relationany
requiredboolean
scopeLevelstring
scopeRefuuid | null
sortableboolean
updatedAtdate-time
updatedBystring | null
validationany
versioninteger
visibilityany

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.
Request

curl

curl "https://prod-eu.getbestest.com/api/v1/gqlith_custom_field?page%5Bsize%5D=25" \
  -H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
  -H "Accept: application/vnd.api+json"
Response

application/vnd.api+json

{
  "data": [
    {
      "type": "gqlith_custom_field",
      "id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
      "attributes": {
        "key": "KAN-TC-42",
        "description": "Given a card past its expiry date, the payment is refused.",
        "createdAt": "2026-08-18T09:30:00Z",
        "updatedAt": "2026-08-18T09:30:00Z",
        "archivedAt": "2026-08-18T09:30:00Z",
        "createdBy": "string",
        "entity": "string",
        "filterable": true
      }
    }
  ],
  "meta": {
    "totalCount": 128
  },
  "links": {
    "first": "/api/v1/gqlith_custom_field?page[number]=1",
    "next": "/api/v1/gqlith_custom_field?page[number]=2"
  }
}
Show an error response
Error

any 4xx

{
  "errors": [
    {
      "status": "403",
      "title": "Forbidden",
      "code": "FORBIDDEN",
      "detail": "Access denied.",
      "source": {
        "pointer": "/data"
      }
    }
  ]
}

Create a gqlith custom field

POST/api/v1/gqlith_custom_field

Needs 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_HERE
Acceptstringrequired
Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Content-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 send27

entitystringrequired
keystringrequired
kindstringrequired
labelstringrequired
organizationIduuidrequired
archivedAtdate-time | null
createdAtdate-time
createdBystring | null
descriptionstring | null
filterableboolean
filterFieldKindstring | null
iduuid
metadataany
nullableboolean
optionsany
positioninteger | null
readOnlyboolean
relationany
requiredboolean
scopeLevelstring
scopeRefuuid | null
sortableboolean
updatedAtdate-time
updatedBystring | null
validationany
versioninteger
visibilityany

Attributes returned27

archivedAtdate-time | null
createdAtdate-time
createdBystring | null
descriptionstring | null
entitystring
filterableboolean
filterFieldKindstring | null
iduuid
Show the remaining 19
keystring
kindstring
labelstring
metadataany
nullableboolean
optionsany
organizationIduuid
positioninteger | null
readOnlyboolean
relationany
requiredboolean
scopeLevelstring
scopeRefuuid | null
sortableboolean
updatedAtdate-time
updatedBystring | null
validationany
versioninteger
visibilityany

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.
Request

curl

curl "https://prod-eu.getbestest.com/api/v1/gqlith_custom_field" \
  -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": "gqlith_custom_field",
    "attributes": {
      "entity": "string",
      "key": "KAN-TC-42",
      "kind": "string",
      "label": "string",
      "organizationId": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
      "description": "Given a card past its expiry date, the payment is refused."
    }
  }
}'
Response

application/vnd.api+json

{
  "data": [
    {
      "type": "gqlith_custom_field",
      "id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
      "attributes": {
        "key": "KAN-TC-42",
        "description": "Given a card past its expiry date, the payment is refused.",
        "createdAt": "2026-08-18T09:30:00Z",
        "updatedAt": "2026-08-18T09:30:00Z",
        "archivedAt": "2026-08-18T09:30:00Z",
        "createdBy": "string",
        "entity": "string",
        "filterable": true
      }
    }
  ],
  "meta": {
    "totalCount": 128
  },
  "links": {
    "first": "/api/v1/gqlith_custom_field?page[number]=1",
    "next": "/api/v1/gqlith_custom_field?page[number]=2"
  }
}
Show an error response
Error

any 4xx

{
  "errors": [
    {
      "status": "403",
      "title": "Forbidden",
      "code": "FORBIDDEN",
      "detail": "Access denied.",
      "source": {
        "pointer": "/data"
      }
    }
  ]
}

Get a gqlith custom field

GET/api/v1/gqlith_custom_field/{id}

Path parameters

idstringrequired
The resource id (a UUID).

Headers

Authorizationstringrequired
Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HERE
Acceptstringrequired
Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json

Attributes returned27

archivedAtdate-time | null
createdAtdate-time
createdBystring | null
descriptionstring | null
entitystring
filterableboolean
filterFieldKindstring | null
iduuid
Show the remaining 19
keystring
kindstring
labelstring
metadataany
nullableboolean
optionsany
organizationIduuid
positioninteger | null
readOnlyboolean
relationany
requiredboolean
scopeLevelstring
scopeRefuuid | null
sortableboolean
updatedAtdate-time
updatedBystring | null
validationany
versioninteger
visibilityany

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.
Request

curl

curl "https://prod-eu.getbestest.com/api/v1/gqlith_custom_field/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
  -H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
  -H "Accept: application/vnd.api+json"
Response

application/vnd.api+json

{
  "data": {
    "type": "gqlith_custom_field",
    "id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
    "attributes": {
      "key": "KAN-TC-42",
      "description": "Given a card past its expiry date, the payment is refused.",
      "createdAt": "2026-08-18T09:30:00Z",
      "updatedAt": "2026-08-18T09:30:00Z",
      "archivedAt": "2026-08-18T09:30:00Z",
      "createdBy": "string",
      "entity": "string",
      "filterable": true
    }
  }
}
Show an error response
Error

any 4xx

{
  "errors": [
    {
      "status": "403",
      "title": "Forbidden",
      "code": "FORBIDDEN",
      "detail": "Access denied.",
      "source": {
        "pointer": "/data"
      }
    }
  ]
}

Update a gqlith custom field

PATCH/api/v1/gqlith_custom_field/{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_HERE
Acceptstringrequired
Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Content-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 send27

archivedAtdate-time | null
createdAtdate-time
createdBystring | null
descriptionstring | null
entitystring
filterableboolean
filterFieldKindstring | null
iduuid
keystring
kindstring
labelstring
metadataany
nullableboolean
optionsany
organizationIduuid
positioninteger | null
readOnlyboolean
relationany
requiredboolean
scopeLevelstring
scopeRefuuid | null
sortableboolean
updatedAtdate-time
updatedBystring | null
validationany
versioninteger
visibilityany

Attributes returned27

archivedAtdate-time | null
createdAtdate-time
createdBystring | null
descriptionstring | null
entitystring
filterableboolean
filterFieldKindstring | null
iduuid
Show the remaining 19
keystring
kindstring
labelstring
metadataany
nullableboolean
optionsany
organizationIduuid
positioninteger | null
readOnlyboolean
relationany
requiredboolean
scopeLevelstring
scopeRefuuid | null
sortableboolean
updatedAtdate-time
updatedBystring | null
validationany
versioninteger
visibilityany

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.
Request

curl

curl "https://prod-eu.getbestest.com/api/v1/gqlith_custom_field/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": "gqlith_custom_field",
    "id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
    "attributes": {
      "key": "KAN-TC-42",
      "description": "Given a card past its expiry date, the payment is refused.",
      "createdAt": "2026-08-18T09:30:00Z",
      "updatedAt": "2026-08-18T09:30:00Z",
      "archivedAt": "2026-08-18T09:30:00Z",
      "createdBy": "string"
    }
  }
}'
Response

application/vnd.api+json

{
  "data": {
    "type": "gqlith_custom_field",
    "id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
    "attributes": {
      "key": "KAN-TC-42",
      "description": "Given a card past its expiry date, the payment is refused.",
      "createdAt": "2026-08-18T09:30:00Z",
      "updatedAt": "2026-08-18T09:30:00Z",
      "archivedAt": "2026-08-18T09:30:00Z",
      "createdBy": "string",
      "entity": "string",
      "filterable": true
    }
  }
}
Show an error response
Error

any 4xx

{
  "errors": [
    {
      "status": "403",
      "title": "Forbidden",
      "code": "FORBIDDEN",
      "detail": "Access denied.",
      "source": {
        "pointer": "/data"
      }
    }
  ]
}

Delete a gqlith custom field

DEL/api/v1/gqlith_custom_field/{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_HERE
Acceptstringrequired
Must be application/vnd.api+json. Any other value returns 406 Not Acceptable.
application/vnd.api+json
Content-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.
Request

curl

curl "https://prod-eu.getbestest.com/api/v1/gqlith_custom_field/3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33" \
  -X DELETE \
  -H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
  -H "Accept: application/vnd.api+json"
Response

application/vnd.api+json

{
  "data": {
    "type": "gqlith_custom_field",
    "id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
    "attributes": {}
  }
}
Show an error response
Error

any 4xx

{
  "errors": [
    {
      "status": "403",
      "title": "Forbidden",
      "code": "FORBIDDEN",
      "detail": "Access denied.",
      "source": {
        "pointer": "/data"
      }
    }
  ]
}

Aggregate gqlith custom field

GET/api/v1/gqlith_custom_field/aggregate

Headers

Authorizationstringrequired
Your API token as a bearer credential.
Bearer bst_pat_YOUR_TOKEN_HERE
Acceptstringrequired
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.
Request

curl

curl "https://prod-eu.getbestest.com/api/v1/gqlith_custom_field/aggregate" \
  -H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
  -H "Accept: application/vnd.api+json"
Response

application/vnd.api+json

{
  "meta": {
    "count": 128
  }
}
Show an error response
Error

any 4xx

{
  "errors": [
    {
      "status": "403",
      "title": "Forbidden",
      "code": "FORBIDDEN",
      "detail": "Access denied.",
      "source": {
        "pointer": "/data"
      }
    }
  ]
}

Describe the gqlith custom field schema

GET/api/v1/gqlith_custom_field/schema

Query 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-7d
sortstring
Comma-separated field list. Prefix a field with a minus for descending order.
-createdAt,name
page[number]integer
Which page to return, starting at 1.
2
page[size]integer
Results per page. Defaults to 25, and the maximum is 100.
50
includestring
Comma-separated relationships to side-load into the response, saving a second request. Chains up to 3 deep.
requirement,folder
fields[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_HERE
Acceptstringrequired
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.
Request

curl

curl "https://prod-eu.getbestest.com/api/v1/gqlith_custom_field/schema?page%5Bsize%5D=25" \
  -H "Authorization: Bearer bst_pat_YOUR_TOKEN_HERE" \
  -H "Accept: application/vnd.api+json"
Response

application/vnd.api+json

{
  "data": [
    {
      "type": "gqlith_custom_field",
      "id": "3f2b9c14-8d5e-4a71-9f60-2c1e7b4a8d33",
      "attributes": {}
    }
  ],
  "meta": {
    "totalCount": 128
  },
  "links": {
    "first": "/api/v1/gqlith_custom_field?page[number]=1",
    "next": "/api/v1/gqlith_custom_field?page[number]=2"
  }
}
Show an error response
Error

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 5
  • GET/api/v1/gqlith_custom_field/{id}/organization
  • GET/api/v1/gqlith_custom_field/{id}/project
  • POST/api/v1/gqlith_custom_field/{id}/actions/restore
  • GET/api/v1/gqlith_custom_field/{id}/relationships/organization
  • GET/api/v1/gqlith_custom_field/{id}/relationships/project