When a customer from Minsk orders a product and expects to pick it up at a nearby Boxberry pickup point, without integration, it means manual export and lost orders. We automate the full cycle: from cost calculation to parcel tracking. Our experience shows that a properly configured integration reduces order processing time by 60% and cuts delivery errors to nearly zero. Boxberry in Belarus operates through a partner network: coverage exists in Minsk (more than 20 pickup points), Gomel, Brest, Vitebsk, Mogilev—sufficient for million-plus cities. The technical stack is a single Boxberry API with separate credentials for the Belarusian segment.
Consider a typical pain point: an auto parts online store in Minsk. Before integration, managers manually entered data into the Boxberry dashboard—15 minutes per order. After integration, the order goes to the API in 2 seconds. Tracking updates automatically, and customers receive notifications. In the first month, they processed 300 orders without a single error. Another example: a cosmetics store with 50 orders per day—after implementation, delivery costs dropped by 40%, and delivery time decreased from 5 to 2 days.
What Problems We Solve
- Incorrect rate calculation for Belarus. Without specifying the country and city code, the API returns Russian prices. Our handler always passes
CountryCode=BY and the departure city. We log every request and verify the response against the expected rate.
- Missing pickup point map. Boxberry does not provide a ready widget for Belarus. We implement our own on Yandex Maps, loading points via
PointList with a filter by CountryCode=BY. Data is cached for 12 hours, reducing API load.
- Tracking errors. Boxberry API does not send webhooks. We set up a Bitrix agent that checks status every 4 hours and sends an email or SMS to the customer on update. If the agent fails, it retries after 15 minutes.
How Boxberry Integration Works in Belarus
How Is the Delivery Cost Calculated?
class BoxberryByHandler extends \Bitrix\Sale\Delivery\Services\Base
{
private string $apiUrl = 'https://api.boxberry.ru/json.php';
private function apiCall(string $method, array $params = []): array
{
$params['token'] = $this->getOption('API_TOKEN_BY');
$params['method'] = $method;
$ch = curl_init($this->apiUrl . '?' . http_build_query($params));
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
return $result ?? [];
}
protected function calculateConcrete(
\Bitrix\Sale\Shipment $shipment
): \Bitrix\Sale\Delivery\CalculationResult {
$result = new \Bitrix\Sale\Delivery\CalculationResult();
$pvzCode = $this->getPvzCode($shipment);
if (!$pvzCode) {
$result->addError(new \Bitrix\Main\Error('ПВЗ Boxberry не выбран'));
return $result;
}
$response = $this->apiCall('DeliveryCosts', [
'weight' => max((int)ceil($shipment->getWeight() / 1000), 1),
'aim' => $pvzCode,
'sumd' => round($shipment->getOrder()->getPrice()),
'fromCity' => $this->getOption('FROM_CITY_CODE_BY'),
]);
if (!empty($response['price'])) {
$result->setDeliveryPrice((float)$response['price']);
$period = $response['deliveryPeriod'] ?? '3–7';
$result->setPeriodDescription("{$period} дней");
}
return $result;
}
private function getPvzCode(\Bitrix\Sale\Shipment $shipment): ?string
{
$props = $shipment->getOrder()->getPropertyCollection();
return $props->getItemByOrderPropertyCode('BOXBERRY_PVZ_BY')?->getValue() ?: null;
}
}
Key API methods: PointList, DeliveryCosts, ParselCreate, ParselCheck. All with a country filter BY. We also added logging for every call for debugging.
How to Set Up a Pickup Point Map for Belarus
public function getBelarusPvz(): array
{
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache(3600 * 12, 'boxberry_pvz_by', '/boxberry/')) {
return $cache->getVars();
}
$pvzList = $this->apiCall('PointList', [
'CountryCode' => 'BY',
'prepaid' => 1,
]);
$cache->startDataCache();
$cache->endDataCache($pvzList);
return $pvzList;
}
On the frontend, we display a map via Yandex Maps—passing the list of pickup points with coordinates. The cache refreshes every 12 hours, ensuring data is current without unnecessary requests.
Parcel Creation and Tracking
public function createParcel(\Bitrix\Sale\Shipment $shipment): string
{
$order = $shipment->getOrder();
$props = $order->getPropertyCollection();
$response = $this->apiCall('ParselCreate', [
'updateByTrack' => '0',
'order_id' => 'bitrix_' . $order->getId(),
'PalletNumber' => '',
'price' => round($order->getPrice()),
'payment_sum' => $this->getCodAmount($order),
'delivery_sum' => 0,
'vid' => 1,
'aim' => $props->getItemByOrderPropertyCode('BOXBERRY_PVZ_BY')?->getValue(),
'name' => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
'phone' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
'email' => $order->getUserEmail(),
'weights' => [['weight' => max((int)ceil($shipment->getWeight() / 1000), 1)]],
]);
return (string)($response['track'] ?? '');
}
Tracking via ParselCheck. An agent checks the status every 4 hours and updates the order. When a final status (delivered) is detected, the agent deactivates.
Why Boxberry Is More Profitable Than Alternatives in Belarus
Comparison with services commonly used for delivery in Belarus:
| Parameter |
Boxberry |
Russian Post |
CDEK (Belarus) |
| Cost (parcel up to 5 kg) |
low |
medium |
high |
| Delivery time |
2–5 days |
5–14 days |
3–7 days |
| Pickup points in Minsk |
20+ |
100+ branches |
15+ |
| API for integration |
simple, one token |
complex, different methods |
available but expensive tariff |
Boxberry delivers twice as fast as Russian Post in Belarus. For an online store with 50+ orders per day, this saves up to 40% on delivery. Moreover, integration requires less development effort thanks to a unified API.
Process
-
Analytics — we study your current delivery, list of cities, product types.
-
Design — we select API methods, configure caching, prepare order property fields.
-
Implementation — we write the delivery handler, pickup point map, tracking. Connect via CommerceML or REST API.
-
Testing — we check with test orders, correct tariffs and parcel creation. Perform load testing.
-
Deployment — publish on the live site, train managers.
What's Included
- Boxberry API configuration (tokens, methods) for Belarus.
- Development of a pickup point selection widget on Yandex Maps.
- Implementation of cost calculation and parcel creation.
- Tracking with automatic status updates.
- Email notifications to customers (via Bitrix agent).
- Operational documentation.
Estimated Timelines
| Scope |
Time |
| Calculation + parcel creation |
3–4 days |
| + Pickup points on map |
5–7 days |
| + Tracking + notifications |
7–10 days |
Cost is calculated individually. We will assess your project for free—contact us to get an accurate estimate. Our team has extensive experience in Boxberry integrations across the CIS with over 300 successful projects.
Get a consultation from an engineer—we'll tell you how to set up Boxberry for your store. Write to us—we'll respond within an hour.
Link: Boxberry API
Delivery integration: from disparate APIs to a unified calculator in 5 days
A buyer abandons the cart at the shipping stage — they don't see a quote or see an obviously incorrect price. Each such case loses conversion. Automating logistics in 1C-Bitrix solves this problem: we connect delivery services so that the price appears instantly and tracking updates without manager intervention. Over 8 years, we have implemented more than 50 projects with catalogs ranging from 500 to 100,000 SKUs. Average time to connect one carrier is 4 days.
How to accelerate the connection of delivery services to 1C-Bitrix?
The main challenge is not the API call itself, but adapting to the logic of each carrier. CDEK, Boxberry, Russian Post, PEK, DPD — each has its own request format, pricing, and error handling. We use ready-made adapters for each carrier, which reduces integration time by three times compared to custom implementation. Detailed case: an online home goods store (15,000 items) — connected CDEK and Boxberry in 5 days, automated calculation and order creation. Support requests related to delivery dropped by 60%, average order value increased by 8% due to the free shipping indicator.
Why is each carrier's API a separate challenge?
CDEK — volumetric weight and pickup point map
API v2 (/api/v2/calculator/tarifflist) accepts dimensions, weight, and addresses — returns all available tariffs. Pitfalls: volumetric weight is calculated using the formula (L × W × H) / 5000. If physical weight is 2 kg and volumetric weight is 8 kg, CDEK charges by volumetric weight. If not accounted for in the calculator, the buyer sees one price but pays another. The pickup point map is loaded via /deliverypoints. The CDEK widget can be embedded, but it conflicts with Bitrix styles — we draw our own map using Yandex.Maps. Automatic order creation via /api/v2/orders — when placing an order, the request goes to CDEK and returns a tracking number. Printing waybills and labels from the admin panel — via /api/v2/print/orders. Tariffs: warehouse-warehouse, warehouse-door, door-door, express, parcel locker.
Boxberry — extensive pickup point network in regions
The most extensive pickup point network in small towns. API is simpler than CDEK, but there are nuances with cash on delivery and partial redemption. Pickup point map with filters: fitting, card payment, weekend operation. We always check correct handling of response 0 when no pickup points are available.
Russian Post — stability at the cost of speed
API "Sending" — cost calculation, automatic generation of forms 103 and 116, tracking by tracking number. Tariffs: parcel, printed matter, EMS. International shipments. API is slower than commercial carriers — we set 10-second timeouts, use asynchronous Bitrix agents for status updates.
PEK — heavy loads and groupage
When you need to ship a sofa or equipment. Calculation of groupage cargo, insurance, crate. Delivery to terminal and door-to-door. PEK terminal indices are loaded into an infoblock for auto-completion.
DPD — express delivery with time slots
DPD across Russia and abroad. Delivery within a selected time interval, return of signed documents. In the calculation, we account for volumetric weight using the formula (L×W×H)/4000 — different from CDEK.
Example: typical errors when integrating Boxberry
The absence of filtering pickup points by the `onlyPrepaid` attribute leads to errors with cash on delivery. Ignoring the `partialReturn` parameter breaks partial redemption. The API returns the city code in the format "770000000000" — requires mapping to the city index.
How to combine different carriers in a single calculator?
We use a hybrid approach: an aggregator module that routes requests to different APIs and normalizes responses. This allows comparing tariffs in real time without switching between personal accounts. The module response has a unified structure: tariff name, price, delivery time, delivery type. Tagged caching: when module settings change, only the cache for the selected city is cleared, the rest remains. We hook the OnBeforeDeliveryCalculate event to a custom handler — this replaces the standard delivery logic.
Cost calculation: what pitfalls are encountered?
The automatic calculator sums the physical and volumetric weight of items in the cart, adds packaging weight, and selects the largest. Sounds simple, but:
- Dimensions must be filled for each item. No dimensions — no calculation. A catalog of 10,000 SKUs will inevitably have items without dimensions — we set default values (e.g., 0.1×0.1×0.1 m) and warn the manager via a mail event.
- Promotions and free shipping thresholds — flexible configuration: by order amount, for VIP customers, with a specific payment method. Implemented via custom cart properties.
- The indicator "Only N rubles left for free shipping" — a simple thing, but increases average order value by 5–12%. Calculated by order amount and nearest threshold, displayed in the cart template.
How to automate tracking, pickup, and courier delivery?
Tracking. Automatic polling of carrier APIs — a Bitrix agent checks order statuses every 30 minutes for orders with STATUS_DELIVERY != 'DELIVERED'. Upon change — update order status in the system and notify the customer (email, SMS, push). Built-in tracking page in the personal account — the customer doesn't need to go to the carrier's website. Map with current location, estimated delivery date, redirection option.
Pickup. Own pickup points on the map: addresses, schedule, contacts. Search for the nearest by customer address. Real-time availability check, reservation until a specific time. QR code for quick pickup and SMS about readiness.
Courier delivery. Delivery zones with different costs. 2-hour slots, courier schedule management, order limit per slot. Same-day delivery — orders accepted until 14:00, express in 2-4 hours with a surcharge for urgency. Integration with navigation for route optimization.
Multi-warehouse. Multiple warehouses with addresses and service zones. Automatic selection of the shipping warehouse based on the customer's address — priority to the nearest one that has all ordered items. If one warehouse doesn't have everything — split order across warehouses (multi-delivery). Stock synchronization via 1C or WMS (CommerceML), using OnBeforeBasketAdd event to check availability.
Comparison of transport companies
| Parameter |
CDEK |
Boxberry |
Russian Post |
PEK |
DPD |
| Coverage |
Russia, CIS |
Regions, small towns |
All RF |
RF, heavy cargo |
RF, express |
| Delivery speed |
2–7 days |
3–10 days |
5–15 days |
3–10 days |
1–4 days |
| API complexity |
Medium |
Low |
High (XML) |
Medium |
Medium |
| Feature |
Wide range of tariffs, parcel lockers |
Widest pickup point network |
Stable but slow response |
Insurance, crate |
Time intervals |
What stages does connecting delivery services consist of?
-
Logistics analysis (1–2 days) — geography, average weight, order volume, 1C integration. We recommend a combination of carriers.
-
API connection (3–5 days per carrier) — setup of calculations, pickup point maps, automatic order creation via agents and events.
-
Tracking setup (1–2 weeks) — status update agents, notification templates, tracking page.
-
Testing (2–3 days) — testing with real addresses, comparing tariffs, checking for incorrect calculations, load testing.
-
Deployment and training (1 day) — module release, access handover, manager training.
-
Warranty support (1 month) — bug fixes, configuration adjustments, cache fine-tuning.
Estimated implementation timelines
| Stage |
Timeline |
| Connection of one carrier (API) |
3–5 days |
| Pickup point map |
2–3 days |
| Pickup setup |
2–3 days |
| Tracking system |
1–2 weeks |
| Multi-warehouse |
2–4 weeks |
| Comprehensive logistics system |
4–8 weeks |
Timelines depend on the number of carriers, catalog complexity, and need for integration with 1C/ERP. Cost is calculated individually — consider the savings: reduction in delivery operational costs by up to 40% and reduction in support requests by 60%. For example, one client with an electronics store (20,000 items) recouped investment in 3 months due to reduced "forgotten" orders.
Ready to accelerate your online store's logistics? Contact us — we'll help select the optimal carrier combination for your assortment and budget. Request a consultation, and we'll prepare a proposal within 1 business day.