For AI agents: markdown of this page — /docs-content-en/entities/recurring-deals/create.md documentation index — /llms.txt

Create recurring settings

POST /v1/recurring-deals

An ordinary source deal is copied to a NEW template deal. The returned dealId can differ from the input dealId. Bitrix24 attaches settings directly only when the input is already a template without settings. The response reads the newly created settings back and includes the actual template ID and basedId.

Required: dealId, a positive integer. isLimit: N (unlimited), T (count, limitRepeat), D (date, limitDate). Other values fail before dispatch. Duplicate settings on a template return the original Bitrix24 business refusal, 422.

Response fields

Field Type Meaning
success boolean Success flag
data object Recurring settings; see fields

Example

curl — personal key

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/recurring-deals" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"dealId":51,"isLimit":"T","limitRepeat":1,"startDate":"2027-01-01","params":{"mode":"multiple","multipleType":"month","multipleInterval":1}}'

curl — OAuth application

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/recurring-deals" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dealId":51,"isLimit":"T","limitRepeat":1,"startDate":"2027-01-01","params":{"mode":"multiple","multipleType":"month","multipleInterval":1}}'

JavaScript — personal key

javascript
const response = await fetch('https://vibecode.bitrix24.com/v1/recurring-deals', {
  method: 'POST',
  headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({"dealId":51,"isLimit":"T","limitRepeat":1,"startDate":"2027-01-01","params":{"mode":"multiple","multipleType":"month","multipleInterval":1}}),
})
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', {
  method: 'POST',
  headers: { 'X-Api-Key': 'YOUR_APP_KEY', 'Authorization': 'Bearer USER_SESSION_TOKEN', 'Content-Type': 'application/json' },
  body: JSON.stringify({"dealId":51,"isLimit":"T","limitRepeat":1,"startDate":"2027-01-01","params":{"mode":"multiple","multipleType":"month","multipleInterval":1}}),
})
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
400 INVALID_PARAMS Invalid ID, enum or value shape
403 BITRIX_ACCESS_DENIED Bitrix24 refused access
422 BITRIX_ERROR Original Bitrix24 business refusal or plan limitation
403 WRITE_BLOCKED_READONLY_KEY Write using a read-only key
400 MISSING_REQUIRED_FIELDS dealId missing
400 READONLY_FIELD Read-only or immutable field written

System errors. Batch sub-call errors are returned within the batch result.

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

See also