An online store on 1C-Bitrix loses orders due to non-automated delivery: managers spend up to 15 minutes manually calculating costs and tracking statuses. Input errors reach 5%, and customers complain about lack of information. Connecting Yandex Delivery via Delivery API v2 solves these problems, but implementation requires attention to details: two-step claim creation, discrepancy between preliminary and actual cost, correct webhook handling. We are a team with 10+ years of Bitrix experience and perform such turnkey integrations in 3-5 days. Contact us to assess your project. On average, the integration pays for itself in 2-3 months by reducing manual labor: with 100 orders per month, savings reach 7500 rubles on manager salary, as shown in typical project calculations.
How to Integrate Yandex Delivery with 1C-Bitrix?
Built-in delivery methods in Bitrix do not support dynamic cost calculation from Yandex Delivery, automatic claim creation, and real-time status tracking. You have to manually transfer orders to the Yandex personal account, which is fraught with typical errors: incorrect pickup point coordinates, skipping the confirmation step, or lack of webhook processing. Unlike manual exchange, API v2 speeds up order processing by 60 times and completely eliminates input errors. As stated in the official documentation: two-step claim creation is critical for courier assignment.
How Two-Step Claim Creation Works
Yandex Delivery requires explicit confirmation after creation. A single-step approach leaves the claim in new status, and the courier is not assigned. Two-step creation reduces the risk of unfulfilled orders by half compared to single-step. Let's look at an example:
public function createAndAcceptClaim(\Bitrix\Sale\Shipment $shipment): string { $order = $shipment->getOrder(); $claim = $this->apiPost('/claims?request_id=' . uniqid(), [ 'items' => $this->buildItems($shipment), 'route_points' => $this->buildRoutePoints($shipment), 'comment' => 'Order #' . $order->getId(), 'callback_properties' => ['callback_url' => $this->getOption('WEBHOOK_URL')], ]); $claimId = $claim['id']; // Without this call, the courier will not be assigned $this->apiPost('/claims/accept?claim_id=' . $claimId, [ 'version' => $claim['version'], ]); return $claimId; } request_id is an idempotent key: a repeat request with the same value returns the existing claim. This is critical for integration reliability.
Typical Errors When Integrating Yandex Delivery
- Skipping the
acceptstep: the claim remains innew, courier not assigned. - Incorrect pickup point coordinates: cost is calculated incorrectly.
- Missing webhook handling for cancellation: the order stays "in transit".
- Ignoring the
versionfield on confirmation: API returns 409 error.
Step-by-Step Integration Guide
- Obtain an OAuth token from Yandex Passport.
- Create a delivery handler that extends
\Bitrix\Sale\Delivery\Services\Base. - Implement the
calculateConcretemethod for cost calculation. - Implement methods for claim creation and confirmation.
- Set up the
callback_urlfor webhooks. - Test all scenarios in a test environment.
Configuring Status Webhooks
Yandex Delivery supports push notifications to the callback_url. Lifecycle statuses:
| Status | Meaning |
|---|---|
new |
Claim created |
accepted |
Confirmed |
performer_found |
Courier found |
pickuped |
Goods picked up from warehouse |
delivery_arrived |
Arrived at recipient |
delivered |
Delivered |
returning |
Return |
cancelled |
Cancelled |
Webhooks arrive at the callback URL specified during claim creation. We recommend implementing an endpoint that accepts a POST request with a JSON body and updates the order status in Bitrix. This allows automatic customer notification.
More about webhooks
Each webhook contains an object with fields `id`, `status`, `updated_ts`. Process them idempotently: if the status is already set, ignore the repeat.Comparison of API v2 vs Manual Exchange
| Criteria | API v2 | Manual input in cabinet |
|---|---|---|
| Time per order | 2-5 seconds | 3-5 minutes |
| Transfer errors | 0% | up to 5% |
| Real-time statuses | yes | no |
| Express delivery possibility | yes | limited |
API v2 speeds up order processing by 60 times and completely eliminates input errors.
Case: Express Delivery in Moscow
Our client is a cosmetics store; the goal was to show "deliver within 2 hours" for orders before 15:00. We implemented two methods: standard (next day) and express (2-3 hours, with additional fee). Express is available when ordering before 15:00 MSK and order amount from 1500 rubles. Check implemented in the handler's isCompatible() method. On cancelled status webhook, we notify the manager and offer the nearest available slot. Result: conversion increased by 18% in a month.
What's Included
- Development of delivery handler with cost calculation and claim creation methods
- Webhook setup for automatic status updates
- Testing of all scenarios (success, error, cancellation)
- Integration documentation and manager instructions
- Employee training on delivery operations
- Post-release support for 30 days
Timeframes
| Scope | Time |
|---|---|
| Cost calculation + claim creation + confirmation | 3-4 days |
| + Status webhooks | +1 day |
| + Express/standard with time conditions | +1-2 days |
| + Customer tracking interface | +2 days |
Request a consultation on integration from our engineers. Get a proposal for your project. We guarantee quality and adherence to deadlines.

