For AI agents: markdown of this page — /docs-content-en/feedback/list.md documentation index — /llms.txt
List tickets
GET /v1/feedback
Returns a list of tickets with filters and pagination. A key without the vibe:feedback scope sees only the tickets it sent itself, a key with the scope sees every ticket of its Bitrix24 account, and a management key sees tickets from all Bitrix24 accounts. Newest tickets come first.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Parameterstatus (query) |
Typestring | Requiredno | Default— | DescriptionNEW, REVIEWING, AWAITING_USER, NEEDS_REVIEW, RESOLVED, ARCHIVED, WITHDRAWN. Case-insensitive |
Parametercategory (query) |
Typestring | Requiredno | Default— | DescriptionBUG, SUGGESTION, DOCS, CHAT, BOTS, OTHER. Case-insensitive |
Parameteroffset (query) |
Typenumber | Requiredno | Default0 |
DescriptionHow many records to skip |
Parameterpage (query) |
Typenumber | Requiredno | Default1 |
DescriptionPage-based pagination. Used when offset is not set |
Parameterlimit (query) |
Typenumber | Requiredno | Default20 |
DescriptionPage size, from 1 to 100. A value above 100 is capped at 100; zero and a non-numeric value are replaced with 20 |
Parameterfilter[status], filter[category] (query) |
Typestring | Requiredno | Default— | DescriptionThe same two filters in bracket form |
Parameterexported (query) |
Typestring | Requiredno | Default— | Descriptiontrue — only tickets handed to developers, false — only those not handed over. Applies to a key with the vibe:feedback scope and to a management key; other keys ignore it |
ParameterportalId (query) |
Typestring | Requiredno | Default— | DescriptionBitrix24 account UUID. Narrows a management key's results to one Bitrix24 account; other keys ignore it |
To page through results, use offset — for example offset=100&limit=50. The offset field in the response echoes the applied offset. If offset is not passed, page is used.
The status and category filters are case-insensitive (status=new is equivalent to status=NEW). An unknown value returns 400 INVALID_FILTER_VALUE — a typo in a filter is rejected explicitly instead of yielding the whole list.
The same two filters are accepted in bracket form: filter[status]=NEW&filter[category]=BUG. Validation is identical — case-insensitive, and an unknown value returns 400 INVALID_FILTER_VALUE. When both forms are present, the flat one is applied. A non-scalar value (filter[status][]=NEW) is also rejected with 400 INVALID_FILTER_VALUE.
Examples
curl — personal key
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://vibecode.bitrix24.com/v1/feedback?status=NEW&category=BUG&limit=20"
curl — OAuth application
curl -H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
"https://vibecode.bitrix24.com/v1/feedback?status=NEW&category=BUG&limit=20"
JavaScript — personal key
const res = await fetch(
'https://vibecode.bitrix24.com/v1/feedback?status=NEW&category=BUG&limit=20',
{ headers: { 'X-Api-Key': 'YOUR_API_KEY' } },
)
const { data, total } = await res.json()
JavaScript — OAuth application
const res = await fetch(
'https://vibecode.bitrix24.com/v1/feedback?status=NEW&category=BUG&limit=20',
{ headers: { 'X-Api-Key': 'YOUR_APP_KEY', 'Authorization': 'Bearer USER_SESSION_TOKEN' } },
)
const { data, total } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata |
Typearray | DescriptionArray of tickets |
Fielddata[].id |
Typestring | DescriptionTicket UUID |
Fielddata[].category |
Typestring | DescriptionCategory |
Fielddata[].title |
Typestring | DescriptionTitle |
Fielddata[].body |
Typestring | DescriptionDescription |
Fielddata[].status |
Typestring | DescriptionCurrent status |
Fielddata[].source |
Typestring | Descriptionapi or ui |
Fielddata[].resolution |
Typestring · null | DescriptionThe verdict recorded at the last closure. Empty on a ticket that was never closed. Reopening keeps the verdict, so the field can be non-empty on an active ticket — for the team's latest answer, read the comment thread |
Fielddata[].attachmentCount |
Typenumber | DescriptionNumber of attachments |
Fielddata[].context |
Typeobject · null | DescriptionThe original JSON passed at creation |
Fielddata[].portalId |
Typestring | DescriptionUUID of the Bitrix24 account the ticket was sent from |
Fielddata[].portalDomain |
Typestring | DescriptionDomain of that Bitrix24 account |
Fielddata[].userId |
Typestring · null | DescriptionUUID of the user who sent the ticket. null for a ticket without an author, for example when the author was deleted |
Fielddata[].userName |
Typestring · null | DescriptionName of that user. null together with userId |
Fielddata[].apiKeyId |
Typestring · null | DescriptionID of the key the ticket was sent with |
Fielddata[].securityFlags |
Typeobject · null | DescriptionInternal moderation marks. null when there are none |
Fielddata[].gitlabIssueIid |
Typenumber · null | DescriptionIssue number in the team's tracker if the ticket was handed to developers. Otherwise null |
Fielddata[].exportedAt |
Typestring · null | DescriptionWhen the ticket was handed to developers (ISO 8601). Otherwise null |
Fielddata[].createdAt |
Typestring | DescriptionCreation date (ISO 8601) |
Fielddata[].resolvedAt |
Typestring · null | DescriptionClosing date, if any |
Fieldtotal |
Typenumber | DescriptionTotal records matching the filter |
Fieldpage |
Typenumber | DescriptionCurrent page |
Fieldlimit |
Typenumber | DescriptionPage size |
Fieldoffset |
Typenumber | DescriptionApplied offset |
The fields from context to exportedAt are returned only to a key with the vibe:feedback scope and to a management key.
Response example
{
"success": true,
"data": [
{
"id": "a1b2c3d4-1111-2222-3333-444455556666",
"category": "BUG",
"title": "POST /v1/deals/search returns 500 on empty filter",
"body": "Calling POST /v1/deals/search with body {\"filter\":{}} gives a 500.",
"status": "NEW",
"source": "api",
"resolution": null,
"attachmentCount": 0,
"createdAt": "2026-04-19T10:30:00.000Z",
"resolvedAt": null
}
],
"total": 1,
"page": 1,
"limit": 20,
"offset": 0
}
Error response example
400 — unknown filter value:
{
"success": false,
"error": {
"code": "INVALID_FILTER_VALUE",
"message": "Invalid status 'BOGUS'. Allowed values: NEW, REVIEWING, AWAITING_USER, NEEDS_REVIEW, RESOLVED, ARCHIVED, WITHDRAWN."
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_FILTER_VALUE |
DescriptionAn unknown status or category value was passed |
| HTTP400 | CodeINVALID_INPUT |
Descriptionexported is neither true nor false. Checked only for a key with the vibe:feedback scope and a management key |
| HTTP401 | CodeMISSING_API_KEY |
DescriptionThe X-Api-Key header was not passed |
For the full list of common API errors, see Errors.