{"id":358753,"date":"2026-08-25T05:50:48","date_gmt":"2026-08-25T05:50:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/catcode-shipping-with-ukrposhta-for-woocommerce\/"},"modified":"2026-08-30T08:12:25","modified_gmt":"2026-08-30T08:12:25","slug":"catcode-shipping-with-ukrposhta-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/catcode-shipping-with-ukrposhta-for-woocommerce\/","author":23504569,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.1","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"CatCode Shipping with Ukrposhta for WooCommerce","header_author":"CatCode","header_description":"Ukrposhta delivery for WooCommerce: the customer picks region, city and post office at checkout from the official Address Classifier, and the delivery price is quoted live. International destinations are quoted by country and weight. Shipment (barcode) creation and sticker printing come in a later update.","assets_banners_color":"ebddeb","last_updated":"2026-08-30 08:12:25","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/catcode.com.ua\/modules\/ukrposhta-shipping-for-woocommerce\/","header_author_uri":"https:\/\/catcode.com.ua","rating":0,"author_block_rating":0,"active_installs":0,"downloads":72,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"catcodestudio","date":"2026-08-30 08:12:25","revision":3672199}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3664632,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3664632,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3664632,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3664632,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3664632,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3664632,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3664632,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3664632,"resolution":"4","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"The Ukrposhta method and the post office picker in the WooCommerce checkout.","2":"Region, city and post office selected \u2014 the index is stored on the order.","3":"Plugin settings: eCom Bearer, sender postcode, fallback rate and free shipping threshold.","4":"The chosen post office on the order screen in the admin."}},"plugin_section":[],"plugin_tags":[250525,143700,277352,277351,169398],"plugin_category":[],"plugin_contributors":[271712],"plugin_business_model":[],"class_list":["post-358753","plugin","type-plugin","status-publish","hentry","plugin_tags-250525","plugin_tags-143700","plugin_tags-277352","plugin_tags-277351","plugin_tags-169398","plugin_contributors-catcodestudio","plugin_committers-catcodestudio"],"banners":{"banner":"https:\/\/ps.w.org\/catcode-shipping-with-ukrposhta-for-woocommerce\/assets\/banner-772x250.png?rev=3664632","banner_2x":"https:\/\/ps.w.org\/catcode-shipping-with-ukrposhta-for-woocommerce\/assets\/banner-1544x500.png?rev=3664632","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/catcode-shipping-with-ukrposhta-for-woocommerce\/assets\/icon-128x128.png?rev=3664632","icon_2x":"https:\/\/ps.w.org\/catcode-shipping-with-ukrposhta-for-woocommerce\/assets\/icon-256x256.png?rev=3664632","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/catcode-shipping-with-ukrposhta-for-woocommerce\/assets\/screenshot-1.png?rev=3664632","caption":"The Ukrposhta method and the post office picker in the WooCommerce checkout."},{"src":"https:\/\/ps.w.org\/catcode-shipping-with-ukrposhta-for-woocommerce\/assets\/screenshot-2.png?rev=3664632","caption":"Region, city and post office selected \u2014 the index is stored on the order."},{"src":"https:\/\/ps.w.org\/catcode-shipping-with-ukrposhta-for-woocommerce\/assets\/screenshot-3.png?rev=3664632","caption":"Plugin settings: eCom Bearer, sender postcode, fallback rate and free shipping threshold."},{"src":"https:\/\/ps.w.org\/catcode-shipping-with-ukrposhta-for-woocommerce\/assets\/screenshot-4.png?rev=3664632","caption":"The chosen post office on the order screen in the admin."}],"raw_content":"<!--section=description-->\n<p>Ukrposhta Shipping for WooCommerce integrates the official Ukrposhta (\u0423\u043a\u0440\u043f\u043e\u0448\u0442\u0430) API into your store:<\/p>\n\n<ul>\n<li><strong>Checkout picker<\/strong> \u2014 customers choose region \u2192 city \u2192 post office, backed by the official Ukrposhta Address Classifier. The selected post index is stored on the order.<\/li>\n<li><strong>Live tariff<\/strong> \u2014 domestic delivery price is fetched from the Ukrposhta eCom API (<code>\/domestic\/delivery-price<\/code>); a configurable flat rate is used as fallback. Optional free shipping over a threshold.<\/li>\n<li><strong>Encrypted credentials<\/strong> \u2014 the Bearer key is stored obfuscated at rest.<\/li>\n<\/ul>\n\n<p>To fetch the address classifier and the tariff you need a Ukrposhta eCom <strong>Bearer<\/strong> (issued by your Ukrposhta manager after signing the eCom contract). Enter it under <strong>WooCommerce \u2192 Settings \u2192 Shipping \u2192 Ukrposhta<\/strong>.<\/p>\n\n<p>Shipment (barcode \/ \u0422\u0422\u041d) creation, sticker printing and cash-on-delivery ship in a later update, once verified end-to-end against a live contract.<\/p>\n\n<p>Ukrposhta is a third-party service. This plugin is an independent integration built by CatCode; it is not affiliated with, endorsed by or sponsored by Ukrposhta.<\/p>\n\n<h4>\u041e\u043f\u0438\u0441 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u043e\u044e<\/h4>\n\n<p>\u041f\u043b\u0430\u0433\u0456\u043d \u0434\u043e\u0434\u0430\u0454 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0423\u043a\u0440\u043f\u043e\u0448\u0442\u043e\u044e \u0443 WooCommerce: \u043f\u043e\u043a\u0443\u043f\u0435\u0446\u044c \u043e\u0431\u0438\u0440\u0430\u0454 \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u043c\u0456\u0441\u0442\u043e \u0456 \u0432\u0456\u0434\u0434\u0456\u043b\u0435\u043d\u043d\u044f \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f, \u0430 \u0432\u0430\u0440\u0442\u0456\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0440\u0430\u0445\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430\u0436\u0438\u0432\u043e.<\/p>\n\n<ul>\n<li>\u0412\u0438\u0431\u0456\u0440 \u0432\u0456\u0434\u0434\u0456\u043b\u0435\u043d\u043d\u044f \u0437 \u043e\u0444\u0456\u0446\u0456\u0439\u043d\u043e\u0433\u043e \u0410\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440\u0430 \u0423\u043a\u0440\u043f\u043e\u0448\u0442\u0438 \u2014 \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u043c\u0456\u0441\u0442\u043e, \u0432\u0456\u0434\u0434\u0456\u043b\u0435\u043d\u043d\u044f; \u0456\u043d\u0434\u0435\u043a\u0441 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u0456.<\/li>\n<li>\u0422\u0430\u0440\u0438\u0444 \u043f\u043e \u0423\u043a\u0440\u0430\u0457\u043d\u0456 \u0447\u0435\u0440\u0435\u0437 eCom API \u0423\u043a\u0440\u043f\u043e\u0448\u0442\u0438 (<code>\/domestic\/delivery-price<\/code>), \u0437 \u0444\u0456\u043a\u0441\u043e\u0432\u0430\u043d\u043e\u044e \u0441\u0442\u0430\u0432\u043a\u043e\u044e \u044f\u043a \u0437\u0430\u043f\u0430\u0441\u043d\u0438\u043c \u0432\u0430\u0440\u0456\u0430\u043d\u0442\u043e\u043c \u0456 \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u043e\u044e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u043e\u044e \u0432\u0456\u0434 \u0441\u0443\u043c\u0438 \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/li>\n<li>\u041c\u0456\u0436\u043d\u0430\u0440\u043e\u0434\u043d\u0438\u0439 \u0442\u0430\u0440\u0438\u0444 \u0437\u0430 \u043a\u0440\u0430\u0457\u043d\u043e\u044e \u0456 \u0432\u0430\u0433\u043e\u044e.<\/li>\n<li>\u0414\u043e\u0432\u0456\u0434\u043d\u0438\u043a\u0438 \u043a\u0435\u0448\u0443\u044e\u0442\u044c\u0441\u044f, \u0442\u043e\u0436 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u043d\u0435 \u0447\u0435\u043a\u0430\u0454 \u043d\u0430 API.<\/li>\n<li>Bearer-\u043a\u043b\u044e\u0447 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e\u043c\u0443 \u0432\u0438\u0433\u043b\u044f\u0434\u0456.<\/li>\n<\/ul>\n\n<p>\u0421\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u043e\u0457 (\u0448\u0442\u0440\u0438\u0445\u043a\u043e\u0434\u0443), \u0434\u0440\u0443\u043a \u043d\u0430\u043b\u0456\u043f\u043e\u043a \u0456 \u043f\u0456\u0441\u043b\u044f\u043f\u043b\u0430\u0442\u0430 \u2014 \u0432 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u043c\u0443 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0456, \u043f\u0456\u0441\u043b\u044f \u0436\u0438\u0432\u043e\u0457 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u043d\u0430 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0456.<\/p>\n\n<p>\u0423\u043a\u0440\u043f\u043e\u0448\u0442\u0430 \u2014 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0456\u0439 \u0441\u0435\u0440\u0432\u0456\u0441. \u0426\u0435\u0439 \u043f\u043b\u0430\u0433\u0456\u043d \u0454 \u043d\u0435\u0437\u0430\u043b\u0435\u0436\u043d\u043e\u044e \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0454\u044e \u0432\u0456\u0434 CatCode \u0456 \u043d\u0435 \u0430\u0444\u0456\u043b\u0456\u0439\u043e\u0432\u0430\u043d\u0438\u0439 \u0437 \u0423\u043a\u0440\u043f\u043e\u0448\u0442\u043e\u044e.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the official Ukrposhta eCom API so the store can show real\npost offices and real delivery prices at checkout. Nothing is sent anywhere else.<\/p>\n\n<p><strong>Ukrposhta eCom API and Address Classifier<\/strong> (https:\/\/www.ukrposhta.ua, or\nhttps:\/\/dev.ukrposhta.ua when the Sandbox option is enabled).<\/p>\n\n<ul>\n<li>When: while a customer is choosing a post office at checkout, and whenever the\ndelivery price for a cart has to be quoted.<\/li>\n<li>What is sent for the address lookup: the region, the city name being typed and\nthe chosen city id. No customer name, e-mail, phone or order data.<\/li>\n<li>What is sent for the price quote: the sender post index from the settings, the\nchosen post office index, the total weight and dimensions of the cart, and -\nonly when you enable them - the order total as the declared value and the\ncash-on-delivery amount.<\/li>\n<li>Authentication: the eCom Bearer key you enter in the plugin settings.<\/li>\n<li>Terms of service: https:\/\/www.ukrposhta.ua\/ua\/informatsiia-pro-poslugu<\/li>\n<li>Privacy policy: https:\/\/www.ukrposhta.ua\/ua\/polityka-konfidentsiinosti<\/li>\n<\/ul>\n\n<p>Using this plugin therefore means the store agrees to Ukrposhta's terms; the key\nis issued by Ukrposhta after an eCom contract is signed.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code> and activate it.<\/li>\n<li>Go to WooCommerce \u2192 Settings \u2192 Shipping, add the <strong>Ukrposhta<\/strong> method to a shipping zone.<\/li>\n<li>Enter your eCom Bearer and sender postcode. Save.<\/li>\n<li>Enable the method. The office picker appears on the checkout.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20ukrposhta%20contract%3F\"><h3>Do I need a Ukrposhta contract?<\/h3><\/dt>\n<dd><p>Yes. The Address Classifier and tariff both require a Bearer issued by Ukrposhta after signing the eCom contract.<\/p><\/dd>\n<dt id=\"does%20it%20support%20the%20block%20checkout%3F\"><h3>Does it support the block checkout?<\/h3><\/dt>\n<dd><p>The office picker targets the classic checkout. Order meta is also captured on the Store API (block) checkout path.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>International shipments: the rate for a destination outside Ukraine is calculated from the country and the parcel weight (no post office involved).<\/li>\n<li>Transport type, package type, content category and tariff currency are configurable; an unavailable country\/package combination reports Ukrposhta's own reason to the log instead of quoting the domestic flat rate.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Source strings are now English with a bundled Ukrainian translation, so the plugin can be translated into any language.<\/li>\n<li>Checkout widget labels are translatable too - they used to be hard-coded in JavaScript.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Fixed: the delivery price no longer sticks to the first quote \u2014 changing the post office (or the payment method) now re-rates the cart.<\/li>\n<li>Fixed: cash-on-delivery commission was added to every order, including prepaid ones. It is now charged only for the payment methods you list as COD.<\/li>\n<li>Added: order screen box with the chosen city, post office and post index \u2014 the meta was stored but invisible to the shop manager.<\/li>\n<li>Added: the chosen post office is shown on the thank-you page, in the customer account and in order e-mails.<\/li>\n<li>Added: the checkout refuses to go through with Ukrposhta selected but no post office chosen.<\/li>\n<li>Added: declared value is now optional \u2014 turn it off to quote a cheaper tariff without insurance.<\/li>\n<li>Added: city search falls back to transliteration, so \"Drohobych\" finds \u0414\u0440\u043e\u0433\u043e\u0431\u0438\u0447.<\/li>\n<li>Fixed: the picker no longer renders on the \"order received\" page and stays hidden until Ukrposhta is the selected shipping method.<\/li>\n<li>Fixed: the office cache compared local time against the database clock in UTC.<\/li>\n<li>Fixed: the tariff request never returned a price - measurements have to be sent inside <code>parcels<\/code>, and a sender index starting with 0 (01001) was cast to a number and rejected. Every quote used to fall back to the flat rate.<\/li>\n<li>Fixed: switching the payment method now refreshes the delivery price instead of leaving a stale one on screen.<\/li>\n<li>Added: the picker restores the chosen office after a page reload.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Works on hosts without the mbstring extension - city search and parcel description no longer fail silently.<\/li>\n<li>Lowered requirements to WordPress 5.6 \/ WooCommerce 6.0 \/ PHP 7.4.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release \u2014 checkout post-office picker and live tariff.<\/li>\n<\/ul>","raw_excerpt":"Ukrposhta (\u0423\u043a\u0440\u043f\u043e\u0448\u0442\u0430) shipping for WooCommerce \u2014 post office picker at checkout and live delivery tariff.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358753","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358753"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/catcodestudio"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358753"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358753"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358753"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358753"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358753"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358753"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}