
## Page fields

`GET /v1/pages/fields`

Returns a map of all page fields with their type, label and read-only flag, plus a `nullable` flag on the fields that can arrive empty. Fields without the read-only flag are writable on create and update.

## Examples

### curl — personal key

```bash
curl "https://vibecode.bitrix24.com/v1/pages/fields" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth application

```bash
curl "https://vibecode.bitrix24.com/v1/pages/fields" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — personal key

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/pages/fields', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data } = await res.json()
console.log('Fields:', Object.keys(data.fields).length)
```

### JavaScript — OAuth application

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/pages/fields', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { success, data } = await res.json()
```

## Response fields

The `data` object contains a `fields` map (field name → `{ type, readonly, label }`, with a `description` on some fields and `nullable` on the fields that can arrive empty), a `batch` list of bulk-mode operations, and a set of `aggregatable` fields for grouping in [aggregation](./aggregate.md).

| Field | Bitrix24 | Type | RO | Description |
|------|----------|-----|:--:|---------|
| `id` | `ID` | number | yes | Page identifier |
| `title` | `TITLE` | string | | Title, up to 255 characters |
| `code` | `CODE` | string | | Symbolic code in the URL. No `/`, auto-generated from `title` |
| `siteId` | `SITE_ID` | number | | Owner site. Source: `GET /v1/sites` |
| `active` | `ACTIVE` | boolean | yes | Whether the page is published. Bitrix24 does not accept the field on create or on update, and a new page is always created inactive. Publish through `POST /v1/pages/:id/publication` and unpublish through `POST /v1/pages/:id/unpublish` |
| `description` | `DESCRIPTION` | string \| null | | Description. `null` when unset |
| `xmlId` | `XML_ID` | string \| null | | External code. `null` when not set |
| `deleted` | `DELETED` | string | yes | Trash flag: `"Y"` / `"N"` |
| `public` | `PUBLIC` | string | | Public flag: `"Y"` / `"N"` |
| `sys` | `SYS` | string | yes | Bitrix24 system page: `"Y"` / `"N"` |
| `views` | `VIEWS` | number | yes | View counter |
| `tplId` | `TPL_ID` | number \| null | | Template identifier. `null` when the page uses no template |
| `tplCode` | `TPL_CODE` | string \| null | yes | Template symbolic code. `null` when the page uses no template |
| `sitemap` | `SITEMAP` | string | | Include in the sitemap: `"Y"` / `"N"` |
| `folder` | `FOLDER` | string | | Whether the page is a section folder: `"Y"` / `"N"` |
| `folderId` | `FOLDER_ID` | number \| null | | Site section folder identifier. `null` when the page lies at the root of the site |
| `searchContent` | `SEARCH_CONTENT` | string \| null | yes | Indexable page content for site search. `null` while the page has not been indexed yet |
| `version` | `VERSION` | number | yes | Internal page structure version |
| `historyStep` | `HISTORY_STEP` | number | yes | Internal change-history field |
| `modifiedById` | `MODIFIED_BY_ID` | number | yes | Last editor. Lookup: `GET /v1/users` |
| `domainId` | `DOMAIN_ID` | number | yes | Site domain identifier. Not requested by default. In the list (`GET /v1/pages`) and search (`POST /v1/pages/search`), an explicit `select=domainId` is forwarded to Bitrix24 and can return `422 BITRIX_ERROR` with the Bitrix24 code `SYSTEM_ERROR`. In the get-by-ID endpoint (`GET /v1/pages/:id`), the field is not returned even with an explicit `select`; `id` is always returned |
| `initiatorAppCode` | `INITIATOR_APP_CODE` | string \| null | yes | Code of the application that created the page. `null` for a page created in the Bitrix24 interface |
| `rule` | `RULE` | string \| null | yes | Internal Bitrix24 field. Usually `null` |
| `createdById` | `CREATED_BY_ID` | number | yes | Creator. Lookup: `GET /v1/users` |
| `dateCreate` | `DATE_CREATE` | datetime | yes | Creation date. A string in the account locale format, not ISO 8601 — see the format block below |
| `dateModify` | `DATE_MODIFY` | datetime | yes | Last modification date. Same format as `dateCreate` |
| `datePublic` | `DATE_PUBLIC` | datetime \| null | yes | Publication date, same format as `dateCreate`. Arrives as `null` when Bitrix24 has no publication date for the page — the usual case even for a published page. Read `active` or `public` to tell whether a page is published |

## Fields that can be empty

A field Bitrix24 does not always fill carries `"nullable": true` in the endpoint response, and its type is written as `… | null` in the table above. There are nine such fields: `description`, `xmlId`, `tplId`, `tplCode`, `folderId`, `searchContent`, `initiatorAppCode`, `rule`, `datePublic`. The value arrives as `null` — not as an empty string and not as `0` — so check it before parsing. Every other field always has a value.

## Date format

**Dates are strings in the account locale format, NOT ISO 8601.** Bitrix24 returns `dateCreate`, `dateModify` and `datePublic` as strings, and **the specific template depends on the regional settings of the account**: in the RU locale it is `DD.MM.YYYY HH:MM:SS` (`30.12.2021 12:30:52`), in the EN locale it is `MM/DD/YYYY hh:mm:ss am/pm` (`12/30/2021 12:30:52 pm`). Vibecode returns the value as is, without normalizing to ISO, **in the same format in list and get-by-ID responses** — there is no divergence between `GET /v1/pages` and `GET /v1/pages/:id`. `new Date(value)` returns `Invalid Date` or silently swaps day and month: do not parse the date with a fixed template and do not trust `new Date()`. The filter needs the same format — see [Search pages](/docs/entities/pages/search).

## Response example

Besides `type` and `readonly`, every field carries a `label` (short name) and a `description`, in English. Request headers do not switch the language. A field that can arrive empty additionally carries `nullable`. In the example below, `description` is shown on `active` only — it is omitted from the other fields for brevity.

```json
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true, "label": "Page ID" },
      "title": { "type": "string", "readonly": false, "label": "Title" },
      "siteId": { "type": "number", "readonly": false, "label": "Site ID" },
      "active": {
        "type": "boolean",
        "readonly": true,
        "label": "Active",
        "description": "Whether the page is published. Read-only: Bitrix24 does not accept the field on create or on update, and a new page is always created inactive. Publish through POST /v1/pages/:id/publication and unpublish through POST /v1/pages/:id/unpublish."
      },
      "xmlId": { "type": "string", "readonly": false, "nullable": true, "label": "External ID" },
      "datePublic": { "type": "datetime", "readonly": true, "nullable": true, "label": "Published at" }
    },
    "aggregatable": ["siteId", "active", "deleted", "public", "folderId", "tplId", "createdById", "modifiedById"],
    "batch": ["create", "update", "delete"]
  }
}
```

6 of 27 fields are shown. The full list is in the table above.

## Error response example

403 — no scope:

```json
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'landing' scope"
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|---------|
| 403 | `SCOPE_DENIED` | API key does not have the `landing` scope |
| 401 | `TOKEN_MISSING` | API key has no configured tokens |
| 429 | `RATE_LIMITED` | Rate limit exceeded: 300 requests per minute per portal. All API keys of the portal share one limit. The current limit is returned in the `x-ratelimit-limit` header. Retry after the delay in the `Retry-After` header |

For the full list of common API errors, see [Errors](/docs/errors).

## See also

- [Create a page](/docs/entities/pages/create)
- [Update a page](/docs/entities/pages/update)
- [Page aggregation](/docs/entities/pages/aggregate)
- [Pages](/docs/entities/pages)
- [Entity API](/docs/entity-api)
