## Reorder a knowledge base

`POST /v1/note/collections/:id/move`

Changes the order for the entire Bitrix24 account. If position is omitted or null, the collection is placed last. The stored weight is recomputed from neighbours, so it can differ from the request.

Requires the note scope and a key with write access. Archived collections are read-only. Permissions are enforced by Bitrix24.

## Parameters

| Parameter | Type | Required | Description |
|---|---|---|---|
| `id` (path) | integer | yes | [GET /v1/note/collections/:id](/docs/note/collections/get) |
| `position` (body) | integer / null | no | Signed safe integer. Omitted or null: last position. |

## Examples

### curl — personal key

```bash

curl -X POST https://vibecode.bitrix24.com/v1/note/collections/33/move \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"position": -10}'

```

### curl — OAuth application

```bash

curl -X POST https://vibecode.bitrix24.com/v1/note/collections/33/move \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"position": -10}'

```

### JavaScript — personal key

```javascript

const response = await fetch('https://vibecode.bitrix24.com/v1/note/collections/33/move', {
  method: 'POST',
  headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({"position": -10}),
})
const result = await response.json()
if (!response.ok) throw new Error(result.error.message)
console.log(result.data)

```

### JavaScript — OAuth application

```javascript

const response = await fetch('https://vibecode.bitrix24.com/v1/note/collections/33/move', {
  method: 'POST',
  headers: { 'X-Api-Key': 'YOUR_APP_KEY', 'Content-Type': 'application/json', 'Authorization': 'Bearer USER_SESSION_TOKEN' },
  body: JSON.stringify({"position": -10}),
})
const result = await response.json()
if (!response.ok) throw new Error(result.error.message)
console.log(result.data)

```

## Response fields

| Field | Type | Description |
|---|---|---|
| `success` | boolean | `true` |
| `data` | object | [GET /v1/note/collections/:id](/docs/note/collections/get) |

The response is read back after the move. If the read fails, the change may already have been saved: read the object before retrying.

## Response example

```json

{
  "success": true,
  "data": {
    "id": 33,
    "name": "Sales team policies",
    "position": 50,
    "policyLevel": "private",
    "accessLevel": "full",
    "isArchived": false,
    "createdBy": 1373,
    "createdAt": "2026-10-02T19:43:23Z",
    "updatedBy": 1373,
    "updatedAt": "2026-10-02T19:43:24Z",
    "markdownDescription": null
  }
}

```

## Error response example

400 — invalid path id:

```json

{
  "success": false,
  "error": {
    "code": "INVALID_PARAMS",
    "message": "id must be a positive integer"
  }
}

```

## Errors

| HTTP | Code | Condition |
|---|---|---|
| 400 | `INVALID_PARAMS` | Invalid id, destination or body. |
| 401 | `MISSING_API_KEY` | Missing key. |
| 401 | `TOKEN_MISSING` | No Bitrix24 credentials. |
| 403 | `SCOPE_DENIED` | `note` |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | READONLY |
| 403 | `BITRIX_ACCESS_DENIED` | Bitrix24 access refusal; collection archived. |
| 404 | `ENTITY_NOT_FOUND` | Object not visible or missing. |
| 422 | `BITRIX_ERROR` | Cycle, access widening or another business refusal. |
| 429 | `OPERATION_TIME_LIMIT` | Bitrix24 operation limit. |
| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 unavailable. |
| 503 | `BITRIX_TIMEOUT` | Bitrix24 timeout. |

[ All errors ](/docs/errors)

## See also

- [GET /v1/note/collections/:id](/docs/note/collections/get)

- [Knowledge Base overview](/docs/note)
