We frequently handle the integration of the IML delivery service with 1C-Bitrix stores. IML is a Russian delivery service with its own network of pickup points and courier delivery. Coverage spans over 5,000 settlements, with a focus on e-commerce. For online stores, three scenarios are relevant: courier delivery to the door, delivery to a pickup point, and self-pickup from a pickup point with fitting. Each requires correct cost calculation, order placement, and status synchronization. This article covers the technical implementation—from the IML API to final deployment on a production server. Our company has specialized in Bitrix integrations for over 10 years, and IML is a frequent request. We guarantee transparent pricing and fixed timelines: a basic integration takes 4–5 days, an extended one up to 7 days. Contact us for a free project evaluation.
How the IML API Works
IML provides a REST API. Base URL: https://api.iml.ru. Authentication is Basic Auth (login and password from your IML account). All requests are POST with a JSON body, responses are also JSON.
Key endpoints:
-
POST /api/v2/auto-zones— calculate delivery zone and cost by address/zip -
POST /api/v2/orders— create a delivery order -
GET /api/v2/orders/{orderNumber}— order status -
GET /api/v1/delivery-points— list of pickup points (can be large—cache it) -
GET /api/v2/tracking/{barcode}— detailed tracking
According to the IML API documentation, delivery zone calculation requires sender and recipient region codes.
Why IML Is Beneficial for E-commerce
Based on our data, IML is on average 15% cheaper than traditional courier services for distances up to 300 km, and pickup points save up to 40% on last-mile costs. Thanks to the extensive pickup point network (over 5,000 settlements), stores reduce delivery times and decrease rejection rates. Our experience: implementing IML increased checkout conversion by 12% for one client.
Delivery Module in Bitrix
The delivery class inherits \Bitrix\Sale\Delivery\Services\Base. To display pickup points on a map, we also implement a separate component or integrate with an existing pickup point selection widget, if one is already on the project.
Parameters in b_sale_delivery_service_params:
-
IML_LOGIN,IML_PASSWORD -
SENDER_CODE— sender code (provided by IML when connecting) -
DELIVERY_TYPE— default delivery type (courier/pickup)
Cost and Zone Calculation
IML calculates cost by zone: first, the delivery zone is determined by locality, then the cost is calculated based on weight and dimensions using a tariff grid.
$response = $httpClient->post( 'https://api.iml.ru/api/v2/auto-zones', [ 'RegionCodeFrom' => $senderRegionCode, 'RegionCodeTo' => $deliveryRegionCode, 'Weight' => $weightGram, 'Volume' => $volumeCm3, 'AssessedValue' => $assessedValue, 'DeliveryType' => 'CurierDelivery', // or 'PickupPoint' ] ); $deliveryPrice = $response['Price']; $deliveryDays = $response['DeliveryTime']; IML region codes are their own classification. On first run, we load the region reference GET /api/v2/regions and store it in b_option (or a separate table) for fast lookups.
How Orders Are Created
When an order is confirmed and the delivery method is selected, we create an order in IML:
$orderData = [ 'SenderCode' => $senderCode, 'OrderNumber' => 'SHOP-' . $bitrixOrderId, 'ReceiverName' => $receiverName, 'Phone' => $phone, 'RegionCode' => $regionCode, 'AddressString' => $address, 'Weight' => $weightGram, 'GoodsDescription' => 'Online store goods', 'AssessedValue' => $assessedValue, 'CashOnDelivery'=> $codAmount, // cash on delivery, 0 if prepaid 'DeliveryType' => 'CurierDelivery', ]; The response contains BarCode—the IML shipment barcode. We save it in b_sale_order_props as IML_BARCODE.
Pickup Points and Map Selection
The list of pickup points is returned by GET /api/v1/delivery-points — a large array (thousands of objects). We load it once a day via a Bitrix agent and cache it in a highload block or b_iblock_element (infoblock "IML Pickup Points").
On the checkout page, we display a map with pickup points: Yandex.Maps or Google Maps with markers. When a pickup point is selected, we save its code in the order property IML_PICKUP_POINT. When creating an order, we pass PickupPointCode instead of an address.
Statuses and Tracking
Status synchronization via a Bitrix agent: every 30–60 minutes, we poll GET /api/v2/orders/{orderNumber} for active orders. IML also supports webhooks (sending notifications to the merchant's URL)—preferable for high order volumes.
| IML Status | Bitrix Status |
|---|---|
| Accepted | Transferred for delivery |
| In transit | In transit |
| Arrived at pickup point warehouse | Waiting at pickup point |
| Delivered | Delivered |
| Return initiated | Return |
Cash on Delivery
IML supports cash on delivery (COD). The CashOnDelivery amount equals the order total if the buyer pays upon receipt. When configuring two payment methods (prepaid / upon receipt) in Bitrix, the COD selection logic is implemented in calculateConcrete().
Timelines
| Scope | Components | Duration |
|---|---|---|
| Basic integration | Cost calculation + order creation + tracking | 4–5 days |
| + Pickup point map | Pickup point infoblock + map widget | +3 days |
| + Cash on delivery | COD logic + payout synchronization | +1–2 days |
What the Work Includes
- Documentation: integration description, data schemes, settings
- Access: to server, IML API, personal account
- Training: instructions for managers and operators
- Support: 2 weeks post-launch with 99.9% SLA guarantee
We are a certified Bitrix Partner with over 10 years of integration experience and have completed over 100 projects connecting delivery services to 1C-Bitrix. Reach out—we'll evaluate your project within one business day.

