# Recurring deal fields

`GET /v1/recurring-deals/fields`

Returns the [declared fields](../recurring-deals.md), including the nine schedule properties.

## Response fields

| Field | Type | Meaning |
|---|---|---|
| `success` | boolean | Success flag |
| `data.fields` | object | Field definitions, readonly/createOnly and nested properties |

## Example

### curl — personal key

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

### curl — OAuth application

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

### JavaScript — personal key

```javascript
const response = await fetch('https://vibecode.bitrix24.com/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 application

```javascript
const response = await fetch('https://vibecode.bitrix24.com/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)
```

## Errors

| HTTP | Code | Condition |
|---|---|---|
| 401 | `MISSING_API_KEY` | API key missing |
| 403 | `SCOPE_DENIED` | crm scope missing |

[System errors](../../errors.md). Batch sub-call errors are returned within the batch result.

When live field metadata is unavailable, `meta.warnings` contains `fields_partial`; static schema fields remain available.

MCP: generic entity tools with `entity: "recurring-deals"`; expose uses `call_api` with POST and this path.

## See also

- [Recurring deals](../recurring-deals.md)
- [Deals](../deals.md)
