Shiptor Integration for Bitrix: Delivery Module and Fulfillment
Imagine: an online store on Bitrix loses up to 20% of orders because the customer doesn't see favorable delivery options or encounters a non-working pickup point binding. We've faced this dozens of times. Shiptor—a delivery service aggregator and fulfillment operator—solves the problem in 4–10 days. Its unified API provides access to 50+ carriers, and a properly configured integration reduces order leakage by 15–30%. One of our clients with a catalog of 12,000 products achieved significant savings on commissions after connecting Shiptor.
Shiptor is essentially two products in one: a logistics aggregator (single API for accessing CDEK, Boxberry, DPD, Russian Post, and others) and fulfillment (storing goods at Shiptor warehouses with order-based shipping). For an online store on Bitrix, integration covers both tasks through one API.
How Shiptor API Works
Base URL: https://api.shiptor.ru. Authorization: Bearer token. Documentation is available at shiptor.ru.
Key features:
- Cost calculation for multiple carriers in one request
- Create, update, cancel shipments
- Manage warehouse stock (fulfillment)
- List of pickup points and parcel lockers
- Shipment tracking
- Automatic label printing
Integration Architecture in Bitrix
Shiptor can solve two different tasks in a project, and their architecture differs:
Option 1: Logistics only. The store stores and picks goods itself; Shiptor is just the carrier. Integration is limited to a delivery module: calculation → order creation → tracking → label.
Option 2: Fulfillment. Goods are stored at Shiptor's warehouse. When creating an order in Bitrix, we send an assembly and shipping request to Shiptor. Stock levels are synchronized from Shiptor to Bitrix via an agent. This is more complex and requires bidirectional exchange setup.
Delivery Module (Option 1)
Class — inherits from \Bitrix\Sale\Delivery\Services\Base. Parameters:
-
SHIPTOR_TOKEN— Bearer token -
WAREHOUSE_ID— sender warehouse ID in Shiptor -
PROVIDER— carrier code (cdek, boxberry, dpd, etc.) orautofor automatic selection
Cost Calculation:
$calcRequest = [ 'warehouse_id' => $warehouseId, 'destination' => [ 'city' => $city, 'address' => $address, 'type' => 'door', // or 'point' 'point_id' => $pvzId, ], 'packages' => [[ 'weight' => $weightGram, 'length' => $lengthCm, 'width' => $widthCm, 'height' => $heightCm, ]], 'declared_value' => $declaredValue, 'payment_method' => $isPrepaid ? 'prepaid' : 'cod', ]; Response — an array of offers from carriers. With provider = auto, we select the minimum price or preferred carrier based on settings.
Creating a Shipment
$shipmentPayload = [ 'warehouse_id' => $warehouseId, 'provider' => $selectedProvider, 'order_number' => 'SHOP-' . $bitrixOrderId, 'recipient' => ['name' => $name, 'phone' => $phone], 'destination' => $destination, 'packages' => $packages, 'items' => $items, 'declared_value' => $declaredValue, 'cash_on_delivery' => $codAmount, ]; Response contains shipment_id (ID in Shiptor) and tracking_number (at the carrier). Request the label via GET /shipments/{id}/label — PDF.
Why Shiptor Is More Profitable Than Direct Integrations?
Direct integration with each carrier requires maintaining N different APIs, error handling, and updates. Shiptor unifies the protocol—you write code once and get access to 50+ carriers. In practice, development time savings range from 30% to 50%, and maintenance costs are reduced by 2–3 times. For a store with 200 orders per month, this results in substantial savings.
How Stock Synchronization Works?
In the fulfillment model, stock is physically at Shiptor's warehouse. We synchronize it to Bitrix:
- An agent calls
GET /inventoryonce per hour—list of items with quantities. - Mapping by
skuor external code: find the product inb_iblock_elementby article. - Update the quantity via
CCatalogProduct::Update()or directly inb_catalog_product.
If a product is not found in Bitrix by SKU, we log it for manual review.
Creating an Assembly Request (Fulfillment)
Instead of physically sending a package from your own warehouse, we send an assembly task to Shiptor:
$fulfillmentOrder = [ 'order_number' => 'SHOP-' . $bitrixOrderId, 'recipient' => $recipient, 'destination' => $destination, 'provider' => $selectedProvider, 'items' => array_map(fn($item) => [ 'sku' => $item['sku'], 'quantity' => $item['qty'], ], $basketItems), ]; $response = $httpClient->post('/fulfillment/orders', $fulfillmentOrder); Shiptor assembles the order, packages it, and hands it to the carrier. The tracking number is returned once the order is handed over.
Pickup Points and Map
List of pickup points: GET /pickup-points?city={city}&provider={provider}. Cache in a highload block, update once daily. On a Yandex/Google map, we display aggregated data from all carriers.
Comparison of Integration Options
| Feature | Logistics Only | Fulfillment |
|---|---|---|
| Goods storage | Own warehouse | Shiptor warehouse |
| Order picking | Self | Shiptor |
| Stock sync | Not required | Yes (agent) |
| Assembly requests | No | Yes (via API) |
| Integration complexity | 4–5 days | 7–9 days |
| Typical maintenance costs | Low | Medium |
What’s Included in the Work
- Development of the delivery module (calculation, orders, tracking, labels)
- Stock synchronization setup (fulfillment)
- Pickup point map integration with selection on the storefront
- Testing on test and production environments
- Integration documentation and support contacts
- Team training on the system
- 1 month post-release support
Timeframes and Cost
| Option | Scope | Time |
|---|---|---|
| Logistics only | Calculation + orders + tracking | 4–5 days |
| + Pickup point map | Highload block + widget | +2–3 days |
| Fulfillment: stock sync | Agent + SKU mapping | +3–4 days |
| Fulfillment: assembly requests | Hook on order confirmation | +2 days |
Step-by-step guide for setting up the delivery module
1. Obtain a Shiptor API token in your personal account. 2. Enter the token and sender warehouse ID in the module settings. 3. Configure the list of carriers (or leave `auto`). 4. Test cost calculation on a test order. 5. Create a test shipment and verify that tracking works. 6. Activate the module on the live site.Cost is calculated individually after analyzing your project. Contact us—we’ll assess the workload and offer the best turnkey solution. We guarantee 10+ years of experience in Bitrix development and over 50 successful integrations with delivery systems. Order Shiptor integration today and get a free engineer consultation.

