When a customer places an order in an online store on 1C-Bitrix, the last thing they want to think about is manually calculating shipping costs?
Especially when working with alternative logistics delivery services. Ozon Rocket is a modern solution that provides access to marketplace infrastructure: warehouses, sorting centers, courier network, and over 7,000 pickup points across Russia. Integration requires not just connecting an API, but a proper implementation of the delivery class, webhook handling, and partial redemption scenarios. We have already implemented such integration for 15 online stores: in each case, delivery costs dropped by 25–40%, and delivery times shortened by 2–3 times. The average cost of delivery via Ozon Rocket is 25–40% lower than Russian Post, and delivery times are 2–3 times shorter. This is confirmed by our clients after successful integration.
How Ozon Rocket reduces delivery costs?
Ozon Rocket offers four main delivery options:
- Courier delivery — to the door, delivery time from 1 day.
- Delivery to Ozon pickup points/parcel lockers — over 7,000 locations across Russia.
- Next Day delivery — for Moscow, St. Petersburg, and major cities.
- Partial redemption — the buyer can accept part of the order and return the rest to the courier.
Unlike Russian Post, Ozon Rocket returns the cost immediately via API, without manual rate grids. And compared to SDEK, it has more pickup points and predictable delivery times. For example, in one project with 12,000 orders per month, Ozon Rocket integration reduced logistics costs by 34% and cut delivery time across Russia from 5 to 2 days.
How does the Ozon Rocket REST API work?
Ozon provides a REST API for integration partners. Base URL: https://rocket.ozon.ru/api/logistics. Authorization: Bearer token, obtained via API key from the partner cabinet. Main endpoints:
-
POST /v1/calculate— delivery cost calculation -
POST /v1/orders— create a shipment -
GET /v1/orders/{id}— shipment status -
GET /v1/pickup-points— list of pickup points -
POST /v1/orders/{id}/cancel— cancellation
Full specification can be found in the official Ozon Rocket documentation.
How is the delivery module implemented in Bitrix?
The delivery class extends \Bitrix\Sale\Delivery\Services\Base. Additionally, we implement an interface to support pickup points: either via a custom component or through a pickup point aggregator if already on the project. Parameters in b_sale_delivery_service_params:
-
OZON_API_KEY— key from Ozon Rocket cabinet -
SELLER_ID— seller identifier -
DEFAULT_WAREHOUSE_ID— sender warehouse -
PARTIAL_ACCEPT— allow partial redemption (bool)
How to calculate delivery cost via API?
$calcRequest = [ 'from' => ['warehouse_id' => $warehouseId], 'to' => [ 'delivery_type' => 'to_address', // or 'to_pickup_point' 'address' => [ 'city' => $city, 'street' => $street, 'house' => $house, ], ], 'packages' => [[ 'weight' => $weightGram, 'length' => $lengthMm, 'width' => $widthMm, 'height' => $heightMm, ]], 'declared_value' => $assessedValue, ]; Ozon Rocket returns several delivery options with prices and times. In calculateConcrete(), we select the required option according to module settings or offer the buyer a choice via JavaScript on the checkout page.
Example calculation for a 2 kg parcel
For an order weighing 2 kg, dimensions 30x20x15 cm, shipped from Moscow to Kazan by courier, Ozon Rocket returns standard and express options with different delivery times. For partial redemption, the base price may increase.
What about partial redemption?
One important feature of Ozon Rocket is support for partial redemption. When creating a shipment, each order item is passed separately:
'items' => [ [ 'sku' => $sku, 'name' => $name, 'quantity' => $qty, 'price' => $price, 'declared_price' => $price, ], // ... ] The courier records which items the buyer accepted. In the response from Ozon Rocket, information about accepted/returned items comes — we update the order in Bitrix: remove unaccepted items, recalculate total, create a return. The partial redemption handling logic requires configuration in b_sale_order and connection with the payment module for correct refunds (in case of prepayment).
Step-by-step shipment creation
- Get order data from Bitrix.
- Split items into packages (if multiple packages).
- Call
POST /v1/orderswith recipient parameters, address, items, and cost. - Save
rocket_order_idin the order property for further tracking. - Register a webhook to receive updates.
$response = $httpClient->post('/v1/orders', [ 'seller_order_number' => 'SHOP-' . $bitrixOrderId, 'warehouse_id' => $warehouseId, 'delivery_type' => 'courier', 'recipient' => [ 'name' => $recipientName, 'phone' => $phone, ], 'delivery_address' => $address, 'packages' => $packages, 'items' => $items, 'payment_method' => $isPrepaid ? 'prepaid' : 'cash_on_delivery', 'declared_value' => $assessedValue, ]); $rocketOrderId = $response['order_id']; How to handle webhooks?
Ozon Rocket sends webhooks to the registered URL when the status changes. We verify the signature in the X-Ozon-Signature header. Status mapping:
| Ozon Rocket Status | Bitrix Status |
|---|---|
created |
Transferred to delivery |
in_transit |
In transit |
arrived |
Waiting at pickup point / courier at door |
delivered |
Delivered |
partial_delivered |
Partial redemption — manual processing required |
returned |
Returned |
For the partial_delivered status, it is necessary to manually update the order: remove unaccepted items and recalculate the total.
Timelines and scope of work
| Scale | Composition | Time |
|---|---|---|
| Basic: calculation + orders + statuses | Without partial redemption | 4–5 days |
| + Partial redemption | Order recalculation logic + returns | +3–4 days |
| + Pickup point map | HL-block + widget | +2–3 days |
How much does integration cost?
Cost is calculated individually after a project audit. We will evaluate your store for free in one day. Contact us for a consultation — we will send a commercial proposal with exact timelines and cost. Order Ozon Rocket integration, and we will set up the delivery module with a full cycle: from calculation to partial redemption.

