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

Terminal
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://vibecode.bitrix24.com/v1/feedback?status=NEW&category=BUG&limit=20"

curl — OAuth application

Terminal
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

javascript
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

javascript
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

JSON
{
  "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:

JSON
{
  "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.

See also