Bitrix24 REST API via curl. Use this skill to manage CRM (leads, deals, contacts), tasks, and users.
All examples assume BITRIX_WEBHOOK_URL is set to your webhook base URL.
Get information about the authenticated user:
curl -s -X GET "$BITRIX_WEBHOOK_URL/user.current.json"
Response:
{
"result": {
"ID": "1",
"NAME": "John",
"LAST_NAME": "Doe",
"EMAIL": "john@example.com"
}
}
Get a list of users in the workspace:
curl -s -X GET "$BITRIX_WEBHOOK_URL/user.get.json" | jq '.result[] | {ID, NAME, LAST_NAME, EMAIL}'
Write to /tmp/bitrix_request.json:
{
"fields": {
"TITLE": "New Lead from API",
"NAME": "John",
"LAST_NAME": "Doe",
"PHONE": [{"VALUE": "+1234567890", "VALUE_TYPE": "WORK"}],
"EMAIL": [{"VALUE": "john@example.com", "VALUE_TYPE": "WORK"}]
}
}
Then run:
curl -s -X POST "$BITRIX_WEBHOOK_URL/crm.lead.add.json" --header "Content-Type: application/json" -d @/tmp/bitrix_request.json
Response:
{
"result": 123
}
Replace <your-lead-id> with the actual lead ID:
curl -s -X GET "$BITRIX_WEBHOOK_URL/crm.lead.get.json?id=<your-lead-id>"
curl -s -X GET "$BITRIX_WEBHOOK_URL/crm.lead.list.json" | jq '.result[] | {ID, TITLE, STATUS_ID}'
With filter:
Write to /tmp/bitrix_request.json:
{
"filter": {"STATUS_ID": "NEW"},
"select": ["ID", "TITLE", "NAME", "PHONE"]
}
Then run:
curl -s -X POST "$BITRIX_WEBHOOK_URL/crm.lead.list.json" --header "Content-Type: application/json" -d @/tmp/bitrix_request.json
Write to /tmp/bitrix_request.json:
{
"id": 123,
"fields": {
"STATUS_ID": "IN_PROCESS",
"COMMENTS": "Updated via API"
}
}
Then run:
curl -s -X POST "$BITRIX_WEBHOOK_URL/crm.lead.update.json" --header "Content-Type: application/json" -d @/tmp/bitrix_request.json
Replace <your-lead-id> with the actual lead ID:
curl -s -X GET "$BITRIX_WEBHOOK_URL/crm.lead.delete.json?id=<your-lead-id>"
Write to /tmp/bitrix_request.json:
{
"fields": {
"NAME": "Jane",
"LAST_NAME": "Smith",
"PHONE": [{"VALUE": "+1987654321", "VALUE_TYPE": "MOBILE"}],
"EMAIL": [{"VALUE": "jane@example.com", "VALUE_TYPE": "WORK"}]
}
}
Then run:
curl -s -X POST "$BITRIX_WEBHOOK_URL/crm.contact.add.json" --header "Content-Type: application/json" -d @/tmp/bitrix_request.json
curl -s -X GET "$BITRIX_WEBHOOK_URL/crm.contact.list.json" | jq '.result[] | {ID, NAME, LAST_NAME}'
Write to /tmp/bitrix_request.json:
{
"fields": {
"TITLE": "New Deal from API",
"STAGE_ID": "NEW",
"OPPORTUNITY": 5000,
"CURRENCY_ID": "USD"
}
}
Then run:
curl -s -X POST "$BITRIX_WEBHOOK_URL/crm.deal.add.json" --header "Content-Type: application/json" -d @/tmp/bitrix_request.json
curl -s -X GET "$BITRIX_WEBHOOK_URL/crm.deal.list.json" | jq '.result[] | {ID, TITLE, STAGE_ID, OPPORTUNITY}'
Write to /tmp/bitrix_request.json:
{
"id": 456,
"fields": {
"STAGE_ID": "WON"
}
}
Then run:
curl -s -X POST "$BITRIX_WEBHOOK_URL/crm.deal.update.json" --header "Content-Type: application/json" -d @/tmp/bitrix_request.json
Write to /tmp/bitrix_request.json:
{
"fields": {
"TITLE": "New Task from API",
"DESCRIPTION": "Task description here",
"RESPONSIBLE_ID": 1,
"DEADLINE": "2025-12-31"
}
}
Then run:
curl -s -X POST "$BITRIX_WEBHOOK_URL/tasks.task.add.json" --header "Content-Type: application/json" -d @/tmp/bitrix_request.json
curl -s -X GET "$BITRIX_WEBHOOK_URL/tasks.task.list.json" | jq '.result.tasks[] | {id, title, status}'
Replace <your-task-id> with the actual task ID:
curl -s -X GET "$BITRIX_WEBHOOK_URL/tasks.task.complete.json?taskId=<your-task-id>"
Get available fields for any entity:
# Lead fields
curl -s -X GET "$BITRIX_WEBHOOK_URL/crm.lead.fields.json"
# Contact fields
curl -s -X GET "$BITRIX_WEBHOOK_URL/crm.contact.fields.json"
# Deal fields
curl -s -X GET "$BITRIX_WEBHOOK_URL/crm.deal.fields.json"
| Parameter | Description |
|---|---|
filter |
Filter results (e.g., {"STATUS_ID": "NEW"}) |
select |
Fields to return (e.g., ["ID", "TITLE"]) |
order |
Sort order (e.g., {"ID": "DESC"}) |
start |
Pagination offset |
*.fields.json methods to get valid field namesstart parameter for large datasets