## Поля регулярной сделки

`GET /v1/recurring-deals/fields`

Возвращает описание полей настройки повторения сделки. Используйте для проверки типов, обязательности и доступности полей для записи.

## Параметры

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `refresh` (query) | string | `false` | Передайте `true`, чтобы обновить описание полей. Например, `?refresh=true` |

## Примеры

### curl — личный ключ

```bash
curl -X GET "https://vibecode.bitrix24.tech/v1/recurring-deals/fields" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth-приложение

```bash
curl -X GET "https://vibecode.bitrix24.tech/v1/recurring-deals/fields" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — личный ключ

```javascript
const response = await fetch('https://vibecode.bitrix24.tech/v1/recurring-deals/fields', {
  method: 'GET',
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const result = await response.json()
if (!result.success) throw new Error(result.error.message)
console.log(result.data)
```

### JavaScript — OAuth-приложение

```javascript
const response = await fetch('https://vibecode.bitrix24.tech/v1/recurring-deals/fields', {
  method: 'GET',
  headers: { 'X-Api-Key': 'YOUR_APP_KEY', 'Authorization': 'Bearer USER_SESSION_TOKEN' },
})
const result = await response.json()
if (!result.success) throw new Error(result.error.message)
console.log(result.data)
```

## Поля ответа

| Поле | Тип | Описание |
|---|---|---|
| `success` | boolean | Признак успешного запроса |
| `data.fields` | object | Полное описание полей: тип, `readonly`, `required`, `createOnly`, `nullable`, `enum`, `properties` при наличии |
| `data.batch` | string[] | Операции сущности, перечисленные для пакетной обработки: `create`, `update`, `delete` |
| `meta.warnings` | object[] | При неполной загрузке описания полей может прийти предупреждение `fields_partial` |

| Поле | Тип | RO | Описание |
|---|---|---|---|
| `id` | number | да | ID настройки. См. [получение настройки](./get.md). |
| `dealId` | number | нет | ID сделки-шаблона. Обязателен при создании, доступен только при создании. Обычная исходная сделка копируется. См. [сделку](/docs/entities/deals/get). |
| `basedId` | number | да | ID исходной сделки. См. [сделку](/docs/entities/deals/get). Может быть `null`. |
| `active` | boolean | нет | Активность автоматического повторения |
| `nextExecution` | datetime | да | Дата следующего выполнения. Может быть `null`. |
| `lastExecution` | datetime | да | Дата последнего выполнения. Может быть `null`. |
| `counterRepeat` | number | да | Число выполнений. Может быть `null`. |
| `startDate` | date | нет | Дата начала расписания. Может быть `null`. |
| `categoryId` | number | нет | Воронка создаваемых сделок. См. [воронку](/docs/entities/deal-categories/get). Может быть `null`. |
| `isLimit` | string | нет | Режим ограничения: `N` — без ограничений, `T` — число повторов, `D` — дата завершения |
| `limitRepeat` | number | нет | Максимум повторов при `T`. Может быть `null`. |
| `limitDate` | date | нет | Последняя допустимая дата при `D`. Может быть `null`. |
| `params` | object | нет | Полные параметры расписания. При обновлении заменяются целиком |
| `params.mode` | string | нет | Режим расписания. Может быть `null`. |
| `params.singleBeforeStartDateValue` | number | нет | Значение смещения одиночного выполнения |
| `params.singleBeforeStartDateType` | string | нет | Тип смещения одиночного выполнения. Может быть `null`. |
| `params.multipleType` | string | нет | Тип периода повторения. Может быть `null`. |
| `params.multipleInterval` | number | нет | Интервал повторения |
| `params.offsetBeginDateType` | string | нет | Тип смещения даты начала. Может быть `null`. |
| `params.offsetBeginDateValue` | number | нет | Значение смещения даты начала |
| `params.offsetCloseDateType` | string | нет | Тип смещения даты завершения. Может быть `null`. |
| `params.offsetCloseDateValue` | number | нет | Значение смещения даты завершения |

`RO` — поле доступно только для чтения.

## Пример ответа

```json
{
  "success": true,
  "data": {
    "fields": {
      "id": {
        "type": "number",
        "readonly": true,
        "label": "ID настройки",
        "description": "ID настройки."
      },
      "dealId": {
        "type": "number",
        "readonly": false,
        "createOnly": true,
        "required": true,
        "label": "ID сделки-шаблона; обычная исходная сделка копируется при создании",
        "description": "ID сделки-шаблона; обычная исходная сделка копируется при создании."
      },
      "basedId": {
        "type": "number",
        "readonly": true,
        "nullable": true,
        "label": "ID исходной сделки",
        "description": "ID исходной сделки."
      },
      "active": {
        "type": "boolean",
        "readonly": false,
        "label": "Активность автоматического повторения",
        "description": "Активность автоматического повторения."
      },
      "nextExecution": {
        "type": "datetime",
        "readonly": true,
        "nullable": true,
        "label": "Дата следующего выполнения",
        "description": "Дата следующего выполнения."
      },
      "lastExecution": {
        "type": "datetime",
        "readonly": true,
        "nullable": true,
        "label": "Дата последнего выполнения",
        "description": "Дата последнего выполнения."
      },
      "counterRepeat": {
        "type": "number",
        "readonly": true,
        "nullable": true,
        "label": "Число выполнений",
        "description": "Число выполнений."
      },
      "startDate": {
        "type": "date",
        "readonly": false,
        "nullable": true,
        "label": "Дата начала расписания",
        "description": "Дата начала расписания."
      },
      "categoryId": {
        "type": "number",
        "readonly": false,
        "nullable": true,
        "label": "Воронка создаваемых сделок",
        "description": "Воронка создаваемых сделок."
      },
      "isLimit": {
        "type": "string",
        "readonly": false,
        "label": "Режим ограничения повторений",
        "description": "Режим ограничения повторений.",
        "enum": [
          {
            "value": "N",
            "label": "Unlimited",
            "labelRu": "Без ограничений"
          },
          {
            "value": "T",
            "label": "Repetition count",
            "labelRu": "Число повторов"
          },
          {
            "value": "D",
            "label": "End date",
            "labelRu": "Дата завершения"
          }
        ]
      },
      "limitRepeat": {
        "type": "number",
        "readonly": false,
        "nullable": true,
        "label": "Максимум повторов при T",
        "description": "Максимум повторов при T."
      },
      "limitDate": {
        "type": "date",
        "readonly": false,
        "nullable": true,
        "label": "Последняя допустимая дата при D",
        "description": "Последняя допустимая дата при D."
      },
      "params": {
        "type": "object",
        "readonly": false,
        "label": "Полные параметры расписания; заменяются целиком при обновлении",
        "description": "Полные параметры расписания; заменяются целиком при обновлении.",
        "properties": {
          "mode": {
            "type": "string",
            "nullable": true
          },
          "singleBeforeStartDateValue": {
            "type": "number"
          },
          "singleBeforeStartDateType": {
            "type": "string",
            "nullable": true
          },
          "multipleType": {
            "type": "string",
            "nullable": true
          },
          "multipleInterval": {
            "type": "number"
          },
          "offsetBeginDateType": {
            "type": "string",
            "nullable": true
          },
          "offsetBeginDateValue": {
            "type": "number"
          },
          "offsetCloseDateType": {
            "type": "string",
            "nullable": true
          },
          "offsetCloseDateValue": {
            "type": "number"
          }
        }
      }
    },
    "batch": [
      "create",
      "update",
      "delete"
    ]
  }
}
```

## Пример ответа при ошибке

401 — не передан API-ключ:

```json
{
  "success": false,
  "error": {
    "code": "MISSING_API_KEY",
    "message": "API key required. Pass via X-Api-Key header."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|---|---|---|
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |
| 401 | `TOKEN_MISSING` | Нет настроенных токенов доступа к Битрикс24 |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |
| 403 | `BITRIX_ACCESS_DENIED` | Битрикс24 отказал в доступе, в том числе из-за отсутствия нужного скоупа |
| 422 | `BITRIX_ERROR` | Бизнес-отказ Битрикс24 или ограничение тарифа. Причина — в `error.message` |
| 503 | `BITRIX_TIMEOUT` | Битрикс24 не ответил вовремя. Повторите после срока из `Retry-After` |
| 502 | `BITRIX_UNAVAILABLE` | Нет соединения с Битрикс24 |
| 429 | `RATE_LIMITED` | Превышен лимит запросов. Точное значение — в заголовке `x-ratelimit-limit`. Повторите после срока из заголовка `Retry-After` |

Полный список общих ошибок API — [Коды ошибок](/docs/errors).

## Смотрите также

- [Список регулярных сделок](./list.md)
- [Получить регулярную сделку](./get.md)
- [Поиск регулярных сделок](./search.md)
- [Агрегация регулярных сделок](./aggregate.md)
- [Регулярные сделки](../recurring-deals.md)
- [Синтаксис фильтрации](/docs/filtering)
