
## Get pipeline

`GET /v1/categories/:entityTypeId/:id`

Returns a single pipeline by ID within the specified CRM entity type.

## Parameters

| Parameter | Type | Description |
|----------|-----|---------|
| `entityTypeId` (path) | number | CRM entity type ID. Deals — `2`, invoices — `31`, smart processes — from `GET /v1/smart-processes` |
| `id` (path) | number | Pipeline ID. List: `GET /v1/categories/:entityTypeId` |

## Examples

In the examples `entityTypeId = 2`, `id = 1` — replace with your values.

### curl — personal key

```bash
curl -X GET https://vibecode.bitrix24.com/v1/categories/2/1 \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth app

```bash
curl -X GET https://vibecode.bitrix24.com/v1/categories/2/1 \
  -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/categories/2/1', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})

const { success, data } = await res.json()
console.log('Pipeline:', data.name)
```

### JavaScript — OAuth app

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

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

## Response fields

| Field | Type | Description |
|------|-----|---------|
| `success` | boolean | Always `true` on success |
| `data.id` | number | Pipeline ID. For deals the main pipeline has id `0` |
| `data.name` | string | Pipeline name |
| `data.sort` | number | Sort order |
| `data.entityTypeId` | number | CRM entity type ID, mirrors the path parameter |
| `data.isDefault` | boolean | Marks the main pipeline of the type |
| `data.originId` | string | External identifier. Empty string for pipelines with no external binding |
| `data.originatorId` | string | Source of the external binding. Empty string for pipelines with none |

For the main deal pipeline (id `0`) the `originId` and `originatorId` fields are absent from the response.

Pipeline stages are requested separately: `GET /v1/statuses?filter[entityId]=DEAL_STAGE_{id}`.

## Response example

```json
{
  "success": true,
  "data": {
    "id": 1,
    "name": "Newest",
    "sort": 100,
    "entityTypeId": 2,
    "isDefault": false,
    "originId": "",
    "originatorId": ""
  }
}
```

The main deal pipeline (id `0`) comes without `originId` and `originatorId`:

```json
{
  "success": true,
  "data": {
    "id": 0,
    "name": "General",
    "sort": 300,
    "entityTypeId": 2,
    "isDefault": true
  }
}
```

## Error response example

404 — pipeline not found:

```json
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Item not found"
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|---------|
| 404 | `ENTITY_NOT_FOUND` | No pipeline with the given `id` in this type |
| 404 | `ENTITY_NOT_FOUND` | `entityTypeId` does not match an existing CRM type |
| 422 | `BITRIX_ERROR` | The CRM type does not support pipelines. Quotes (type `7`) have no pipelines |
| 403 | `SCOPE_DENIED` | The API key lacks the `crm` scope |
| 401 | `TOKEN_MISSING` | The API key has no configured tokens |

Full list of general API errors — [Errors](/docs/errors).

## See also

- [List pipelines](/docs/entities/categories/list)
- [Update pipeline](/docs/entities/categories/update)
- [Pipeline fields](/docs/entities/categories/fields)
- [Smart process types](/docs/entities/smart-processes)
- [Stages and statuses](/docs/entities/statuses)
- [Entity API](/docs/entity-api)
