لوكلاء AI: ملف markdown لهذه الصفحة — /docs-content-en/feedback/endpoints.md فهرس التوثيق — /llms.txt

مقالات التوثيق متاحة حاليًا باللغة الإنجليزية فقط.

Endpoints of the "Feedback" section

Submitting tickets to the feedback tracker, reading and filtering, updating status and resolution, comments, and attachments. Switch methods with the tabs — each has its own parameters, response fields, and error codes.

Base URL: https://vibecode.bitrix24.com/v1 | Authorization: X-Api-Key

Submit a ticket

POST /v1/feedback

Creates a ticket in the feedback tracker. Accepts any valid key — the Bitrix24 account and author are determined from the key owner. The body is passed flat, without a fields wrapper.

Request fields (body)

Field Type Required Description
Fieldcategory Typestring Requiredyes DescriptionOne of: BUG, SUGGESTION, DOCS, CHAT, BOTS, OTHER. Case-insensitive
Fieldtitle Typestring Requiredyes DescriptionTitle, 3–200 characters
Fieldbody Typestring Requiredyes DescriptionDescription, 10–20000 characters. The lower bound is lifted when attachments are provided via attachmentIds
Fieldcontext Typeobject Requiredno DescriptionOptional JSON object up to 10 KB — endpoint, request body, requestId, tool version. The top level must be an object: arrays, strings, numbers, booleans, and null are rejected
FieldattachmentIds Typearray Requiredno DescriptionUp to 5 IDs of pre-uploaded attachments. To upload one, see Upload an attachment

Categories

Category When to choose
CategoryBUG When to chooseBehavior diverges from the documentation or is broken
CategorySUGGESTION When to chooseA proposal for an improvement or a new capability
CategoryDOCS When to chooseDocumentation is incomplete, outdated, or diverges from API behavior
CategoryCHAT When to chooseFeedback about the chat platform — messages, dialogs, files
CategoryBOTS When to chooseFeedback about the bot platform — registration, events, commands
CategoryOTHER When to chooseDoes not fit the other categories

Examples

curl — personal key

Terminal
curl -X POST https://vibecode.bitrix24.com/v1/feedback \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "category": "BUG",
    "title": "POST /v1/deals/search returns 500 on empty filter",
    "body": "Calling POST /v1/deals/search with body {\"filter\":{}} gives a 500. Expected an empty array or 400.",
    "context": {
      "endpoint": "/v1/deals/search",
      "httpStatus": 500,
      "requestId": "req_abc123"
    }
  }'

curl — OAuth application

Terminal
curl -X POST https://vibecode.bitrix24.com/v1/feedback \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "category": "BUG",
    "title": "POST /v1/deals/search returns 500 on empty filter",
    "body": "Calling POST /v1/deals/search with body {\"filter\":{}} gives a 500. Expected an empty array or 400.",
    "context": {
      "endpoint": "/v1/deals/search",
      "httpStatus": 500,
      "requestId": "req_abc123"
    }
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/feedback', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    category: 'BUG',
    title: 'POST /v1/deals/search returns 500 on empty filter',
    body: 'Calling POST /v1/deals/search with body {"filter":{}} gives a 500. Expected an empty array or 400.',
    context: { endpoint: '/v1/deals/search', httpStatus: 500, requestId: 'req_abc123' },
  }),
})

const { data } = await res.json()
console.log('Ticket number:', 'VB-' + data.id.slice(0, 8))

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/feedback', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    category: 'BUG',
    title: 'POST /v1/deals/search returns 500 on empty filter',
    body: 'Calling POST /v1/deals/search with body {"filter":{}} gives a 500. Expected an empty array or 400.',
    context: { endpoint: '/v1/deals/search', httpStatus: 500, requestId: 'req_abc123' },
  }),
})

const { data } = await res.json()

Response fields

Field Type Description
Fieldsuccess Typeboolean DescriptionAlways true on success
Fielddata.id Typestring DescriptionTicket UUID. The human-readable number is VB- plus the first 8 characters
Fielddata.category Typestring DescriptionTicket category
Fielddata.title Typestring DescriptionTitle
Fielddata.status Typestring DescriptionInitial status — always NEW
Fielddata.createdAt Typestring DescriptionCreation date in ISO 8601 format

Response example

JSON
{
  "success": true,
  "data": {
    "id": "a1b2c3d4-1111-2222-3333-444455556666",
    "category": "BUG",
    "title": "POST /v1/deals/search returns 500 on empty filter",
    "status": "NEW",
    "createdAt": "2026-04-19T10:30:00.000Z"
  }
}

Error response example

400 — validation failed:

JSON
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "title must be 3-200 characters"
  }
}

Errors

HTTP Code Description
HTTP400 CodeVALIDATION_ERROR Descriptioncategory, title, body, or context failed validation
HTTP403 CodeMANAGEMENT_KEY_READ_ONLY DescriptionA management key can read and update tickets, but not create them
HTTP403 CodeWRITE_BLOCKED_READONLY_KEY DescriptionThe key is read-only — see access rights
HTTP409 CodeDUPLICATE_FEEDBACK DescriptionA similar ticket was submitted recently. error.existingTicketId points to the existing ticket
HTTP409 CodeOPEN_TICKET_EXISTS DescriptionAn open ticket on this topic already exists. error.existingTicketId points to it
HTTP429 CodeFEEDBACK_QUOTA_EXCEEDED DescriptionThe daily quota for creating tickets is exceeded (per Bitrix24 account or per key). Returns a Retry-After header and the scope, limit, retryAfter fields
HTTP401 CodeMISSING_API_KEY DescriptionThe X-Api-Key header was not passed
HTTP429 CodeRATE_LIMITED DescriptionMore than 5 requests per minute from one key. This is the platform-wide cap and it is divided across the backend replicas, so the effective value is returned in the X-RateLimit-Limit header

For the full list of common API errors, see Errors.

Known specifics

The source is recorded automatically. Tickets created via the API have source set to api; those submitted from the form in your Vibecode account have ui. The Bitrix24 account and author are taken from the key owner; you do not need to enter them manually.

Context speeds up triage. Put a JSON object into context with requestId, versions, the request body, and the server response — up to 10 KB. A top-level array, scalar (string, number, boolean), or null is rejected with 400 VALIDATION_ERROR; a ticket with no context, or with {}, is accepted.

Duplicate protection and quota. A request with similar content is rejected as 409 DUPLICATE_FEEDBACK; a request whose title matches an open ticket is rejected as 409 OPEN_TICKET_EXISTS. In both cases error.existingTicketId points to the existing ticket if the key has access to it. Separately, a daily quota applies per Bitrix24 account and per key — when it is exceeded, 429 FEEDBACK_QUOTA_EXCEEDED is returned with a Retry-After header. This is not the same as the rate limit (429 RATE_LIMITED). The documented 5 requests per minute are the platform-wide cap, divided across the backend replicas, and the effective value is returned in the X-RateLimit-Limit header.

See also