How Bitrix24 and Redmine Synchronization Works
Part of your team works in Redmine — they're used to it, have their workflow tuned, and don't want to migrate. The other part sticks with Bitrix24 because it has CRM, telephony, and chats. The result: tasks get duplicated manually, statuses diverge, and when you need to compile a project report, you have to open both systems and merge data in a spreadsheet. Our engineers — certified specialists with 10+ years of experience — offer a turnkey solution: middleware for bidirectional synchronization. You stop wasting time on manual transfers and get a unified view of your project. Evaluate your project: write to us, and we will prepare a work plan within one day.
Integration Architecture
The integration works via Redmine REST API and Bitrix24 REST API. Redmine provides JSON/XML API for managing issues, projects, users, and time entries. Redmine does not have built-in webhooks — the middleware uses polling to track changes.
Bitrix24 (task event) → Webhook → Middleware → Redmine REST API → Issue Redmine (polling) → Middleware → Bitrix24 REST API → Task Polling works as follows: the middleware every 30–60 seconds requests GET /issues.json?updated_on=>=<last_check_time>&status_id=* — it retrieves all issues updated since the last check. For Bitrix24, standard webhooks via event.bind are used.
Field Mapping
| Bitrix24 Field (tasks.task) | Redmine Field (issue) | Notes |
|---|---|---|
| TITLE | subject | Direct mapping |
| DESCRIPTION | description | Bitrix24 HTML → Redmine Textile/Markdown |
| RESPONSIBLE_ID | assigned_to_id | Via mapping table |
| CREATED_BY | author_id | Same |
| DEADLINE | due_date | YYYY-MM-DD |
| PRIORITY | priority_id | Value mapping |
| STATUS | status_id | Separate configuration |
| GROUP_ID (project) | project_id | Correspondence table |
Redmine uses Textile (by default) or Markdown for descriptions. The middleware converts HTML from Bitrix24 to the required format: headings, lists, links, and emphasis.
Why Status Mapping Matters
Redmine allows arbitrary statuses and transitions (workflow). The middleware supports flexible mapping:
| Bitrix24 Status | Redmine Status | Redmine ID (typical) |
|---|---|---|
| New | New | 1 |
| In Progress | In Progress | 2 |
| Pending Review | Resolved | 3 |
| Completed | Closed | 5 |
| On Hold | Feedback | 4 |
Critical nuance: Redmine validates allowed status transitions via workflow. Before updating, the middleware requests available transitions and performs intermediate steps if a direct transition is not possible.
Custom Fields
Redmine heavily uses custom fields. The middleware supports mapping arbitrary fields:
- Text (string/text) ↔
UF_CRM_*string fields in Bitrix24. - List ↔ select fields in Bitrix24. The middleware maps values by ID or name.
- Numeric (int/float) ↔ numeric fields in Bitrix24.
- Date ↔ date fields in Bitrix24.
- Boolean (bool) ↔ checkboxes in Bitrix24.
Mapping configuration is stored in the middleware and editable via an admin panel.
Project Synchronization
Redmine projects are mapped to Bitrix24 projects (groups):
| Redmine Project | Bitrix24 Project | Tracker |
|---|---|---|
| web-frontend | Frontend Development | Bug, Feature |
| mobile-app | Mobile Application | Bug, Feature, Support |
| internal-tools | Internal Tools | Feature |
The Redmine tracker (Bug, Feature, Support) determines the task type. The middleware can map the tracker to a tag or custom field in Bitrix24.
Linking Tickets to Tasks
The middleware stores a mapping table b24_task_id ↔ redmine_issue_id. When a task is created in one system, a corresponding entry is automatically created in the other. The synchronization criterion is membership in a mapped project.
Comments (journals in Redmine) are synchronized bidirectionally:
- From Redmine: the middleware parses
journalswithnotesduring polling and creates comments in the Bitrix24 task. - From Bitrix24: upon the
ONTASKCOMMENTADDevent, the middleware callsPUT /issues/{id}.jsonwith thenotesfield.
Initial Migration
Before enabling synchronization, the middleware transfers existing data:
- Export issues from Redmine via
GET /issues.json?project_id={id}&limit=100&offset={n}. - Create tasks in Bitrix24 via
tasks.task.addwith full field mapping. - Reverse export tasks from Bitrix24 that do not exist in Redmine.
- Populate the mapping table.
What's Included in the Work
- Ready-to-use middleware configured for your projects
- Mapping of statuses, fields, trackers, and custom attributes
- Migration of task history and comments
- Testing and debugging of synchronization
- Operation documentation and team training
- 1-month warranty support
Unlike custom scripts, our solution handles status conflicts and data duplication automatically. Over 50 successful Bitrix24 integrations confirm the reliability of the approach. Contact us for a consultation and accurate project estimate.
How the Middleware Handles Synchronization Conflicts?
Conflicts arise when the same task is simultaneously modified in both systems. The middleware uses a "last-write-wins" rule with timestamps. For each update, the middleware compares updated_on from Redmine and CHANGED_DATE from Bitrix24. If the difference is less than 5 seconds, the task is flagged for manual resolution — the administrator receives a notification. This minimizes data loss risk. In our practice over the course of operation, less than 0.5% of updates caused conflicts, and all were resolved automatically.

