Russian Post Logistics Services Integration into Mobile Application
Russian Post provides REST API for shipment tracking, tariff calculation, creating delivery orders, and generating labels. Documentation exists, but working with it requires understanding several non-obvious limitations.
Russian Post API: What's Available
Official developer portal—otpravka.pochta.ru. Two main sections:
Shipment (Shipment API): creating orders, forming batches, generating PDF labels, calculating delivery cost. Requires contract with Russian Post and token issued through personal account.
Tracking (Tracking API): tracking shipments by track number. Available in two modes—Single (one request per track number, 100 requests/day limit) and Batch (up to 3000 track numbers per request, requires separate agreement).
Authorization and Common Errors
Authorization via Basic Auth: Authorization: Basic base64(login:password) plus header X-User-Authorization: Basic base64(token). Two different headers—first thing people stumble on. Token from personal account—not user password.
Tariff calculation (POST /1.0/tariff) accepts object-type (parcel, letter, small packet), weight in grams, sender and recipient postal codes. Returns cost in kopecks—divide by 100. Without unit conversion, app shows price 100x higher.
Address data. API requires postal codes in FIAS or Russian Post directory format. Arbitrary address "Lenin St, 5" not understood—need prior normalization via address suggestion service.
Implementing Tracking in Mobile App
Tracking—most popular function. Request to get statuses:
POST https://tracking.russianpost.ru/rtm34?wsdl
Important: Tracking API works via SOAP, not REST. For mobile app, wrap in backend proxy—parsing SOAP on device is cumbersome, simpler to return clean JSON to client.
List of operations (statuses) for one shipment may contain 20+ records. On screen show last status and brief history. Operation codes public, but decryption—in separate reference on developer portal.
Background Status Updates
Refresh tracking not on user request but in background: iOS—BGAppRefreshTask, Android—WorkManager with PeriodicWorkRequest interval minimum 15 minutes. On status change, send local push notification.
Cache track number list and last statuses locally—user should see data even offline.
Label Generation
If app used for shipping (e-commerce, marketplace), need full cycle: create order → form batch → request label (PDF, format F7 or F7p). Print label on thermal printer via Bluetooth—iOS uses UIPrintInteractionController, Android PrintManager. Integration with Zebra or Honeywell printers via their SDK adds 2-3 days.
Timeline: tracking integration—5-7 days. Full shipping cycle with label generation—2-3 weeks.







