For AI agents: markdown of this page — /docs-content-en/lists/elements/create.md documentation index — /llms.txt
Create an element
POST /v1/lists/:iblockId/elements
Creates a new row in a list. Field values are passed inside the fields wrapper, while the symbolic code of the new row is passed as the elementCode parameter at the top level of the body, next to fields, not inside it.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
iblockId (path) |
string | yes | List ID or symbolic code. List: GET /v1/lists |
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
elementCode |
string | yes | Symbolic code of the new row at the top level of the body, next to fields |
fields |
object | yes | Row field values. System fields are named in uppercase, for example NAME. A custom property is set with the key PROPERTY_<id>, where <id> is the field identifier from GET /v1/lists/:iblockId/fields. A multiple-value property is passed as an array: "PROPERTY_951": ["1", "2"] |
iblockSectionId |
number | no | ID of the section to place the row in. The value 0 is the list root. List: GET /v1/lists/:iblockId/sections |
listElementUrl |
string | no | Link to the row page |
iblockTypeId |
string | no | Infoblock type. Values:lists — regular lists, defaultlists_socnet — workgroup listsbitrix_processes — internal workflowsstructure — company-structure type (holds the built-in absence-calendar iblock absence) |
Examples
curl — personal key
curl -X POST https://vibecode.bitrix24.com/v1/lists/23/elements \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"elementCode": "row_1",
"fields": {
"NAME": "Row 1",
"PROPERTY_951": "value"
}
}'
curl — OAuth application
curl -X POST https://vibecode.bitrix24.com/v1/lists/23/elements \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"elementCode": "row_1",
"fields": {
"NAME": "Row 1",
"PROPERTY_951": "value"
}
}'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/lists/23/elements', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
elementCode: 'row_1',
fields: {
NAME: 'Row 1',
PROPERTY_951: 'value',
},
}),
})
const { data } = await res.json()
console.log('Row ID:', data.id)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/lists/23/elements', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
elementCode: 'row_1',
fields: {
NAME: 'Row 1',
PROPERTY_951: 'value',
},
}),
})
const { data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
success |
boolean | Always true on success |
data.id |
number | ID of the created row. Used as :elementId in GET, PATCH, DELETE |
Response example
HTTP status 201 Created.
{
"success": true,
"data": {
"id": 41
}
}
Error response example
400 — a required body parameter is missing:
{
"success": false,
"error": {
"code": "MISSING_REQUIRED_FIELDS",
"message": "`elementCode` is required (the symbolic code of the new element)."
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | MISSING_REQUIRED_FIELDS |
elementCode or fields is missing |
| 400 | INVALID_IBLOCK_TYPE |
iblockTypeId is not one of lists, bitrix_processes, lists_socnet, structure |
| 403 | BITRIX_ACCESS_DENIED |
No permission to add rows to this list |
| 403 | WRITE_BLOCKED_READONLY_KEY |
The key is in read-only mode. Open the path from error.details.switchUrl: a personal key points to /keys, an application key with a card to /applications, a standalone OAuth key to /apps, and a management key to /management-keys. Switch it to read and write there |
| 403 | SCOPE_DENIED |
The key is missing the lists scope |
| 401 | TOKEN_MISSING |
The key has no configured tokens |
| 409 | LISTS_MODULE_NOT_ENABLED |
The Lists module is not enabled on the Bitrix24 portal |
| 413 | PAYLOAD_TOO_LARGE |
The request body is over 40 MiB. Nothing was written |
| 429 | LARGE_BODY_BACKEND_BUSY |
The platform is already processing its maximum volume of request bodies over 1 MiB. Nothing was written, retry after Retry-After seconds |
Full list of common API errors — Errors.
Known specifics
File size in a property. The value of a "File" property is passed inside fields as base64, and the request body is capped at 40 MiB — enough for an original file of just under 30 MiB. A batch call to POST /v1/batch keeps the 1 MiB cap, so send a large file with a single call to this method.
Activity flag. ACTIVE in fields is ignored: the row is created active even with "ACTIVE": "N", and the response still reports success.