Grafiduo Connector for InPost Von Halsky

Description

InPost Von Halsky is a shopping marketplace inside the InPost app, where an AI assistant searches offers from connected shops. This plugin connects a WooCommerce shop to it, so the catalogue you already maintain in WooCommerce becomes a sales channel without a second product database.

You keep working in WooCommerce. Products go out as offers, prices and stock follow the changes you make in the shop, and orders placed on the marketplace arrive as regular WooCommerce orders.

What the plugin does

  • Publishes offers. A product is sent with its name, description, brand, model, EAN or manufacturer part number, category, attributes, dimensions, gross price, VAT rate, stock, images, GPSR data, and return and complaint policy. Offers are created once and then updated in place, including after the product is edited.
  • Tracks offer creation. The marketplace creates offers asynchronously. The plugin follows each command, retries the ones that fail, and lists the offers that could not be created.
  • Checks data before sending. Missing manufacturer (GPSR) data, required attributes, an invalid EAN, incomplete dimensions or non-HTTPS images are reported in the shop before the offer reaches the marketplace.
  • Keeps prices and stock current. Product changes are queued and sent in batches on a schedule, rather than as one request on every save.
  • Imports orders. The marketplace has no webhooks, so the plugin polls the order event stream and creates WooCommerce orders with line items, billing and shipping addresses, the chosen InPost Paczkomat locker and the shipping cost. Paid orders can be accepted on the marketplace automatically.
  • Shows offer status. The offer status (pending, published, rejected, closed, sold out) appears in a column on the product list and in a metabox on the product screen, together with the rejection reasons when the marketplace rejects an offer.
  • Maps categories and attributes. A dedicated screen maps WooCommerce product categories to marketplace categories, and category attributes to WooCommerce attributes or custom fields, with a default value as a fallback. A single product can have its own category and its own values.
  • Uses the marketplace catalogue. The plugin looks the product up in the marketplace catalogue by EAN (or brand and part number) and fills in empty fields: category, brand, model, description, dimensions, attributes and manufacturer data.
  • Organises orders. The delivery type (Paczkomat locker, courier) is mapped to WooCommerce shipping methods, and selected WooCommerce e-mails can be turned off for marketplace orders.
  • Collects offers in one place. The offers screen shows statuses and errors, and lets you send, close, reopen and refresh offers in bulk.

How it works with WooCommerce

  • Compatible with High-Performance Order Storage (HPOS).
  • Recurring work runs through Action Scheduler, which WooCommerce already ships. Progress is visible under Tools Scheduled Actions, in the grafiduo-von-halsky group.
  • Everything is logged under WooCommerce Status Logs, source grafiduo-von-halsky.
  • Nothing is scheduled and no request is sent until you enter your own credentials.

The admin interface is currently in Polish, as the marketplace serves the Polish market. Translations can be contributed on translate.wordpress.org.

What you need

An InPost Von Halsky seller account with an application created in the InPost API portal, using the Client Credentials flow. The plugin needs the token endpoint URL, Client ID, Client Secret and the organisation UUID. A static Bearer token is supported as an alternative.

Current limitations

These are deliberate boundaries of this release, not bugs:

  • Variable products are not exported. Each variation would need its own offer.
  • Order lines in the marketplace API have no quantity field, so each line is treated as one unit and repeated offers are aggregated.
  • Line amounts are imported gross and the order total comes from the marketplace final price, so the VAT breakdown on imported orders is not reconstructed.
  • The marketplace API version this release supports has no endpoint for tracking numbers or invoices, so shipments are not reported back.
  • Returns, complaints and refunds are handled in the Merchant Portal, not here.

External services

This plugin is an interface to the InPost Von Halsky marketplace, operated by InPost sp. z o.o. It does not work without contacting that service and does not contact anything else. There is no analytics, telemetry, tracking or remote asset loading.

No request is sent until you enter your own credentials on the settings screen. Saving them is the consent step; clearing them stops all outgoing traffic.

Which services are contacted

1. InPost authorisation server — account.inpost-group.com (or stage-account.inpost-group.com if you select the staging environment).

Your Client ID and Client Secret are sent to exchange them for a short-lived access token. This happens when a token is needed and the previous one has expired; the token is cached until shortly before it expires. Nothing about the shop, products or customers is sent here.

2. InPost Von Halsky API — api.inpost-group.com (or stage-api.inpost-group.com).

Sent to the service:

  • When you publish or update an offer (manually, with a bulk action or with the “update sent offers” tool): the product name, description, brand, EAN, manufacturer part number, SKU, the mapped category and its attribute values, gross price, VAT rate, stock quantity, dispatch time in days, the URLs of the product and gallery images, and the WooCommerce product ID as an external reference.
  • On the price and stock schedule: marketplace offer IDs with the current price and quantity.
  • When accepting or rejecting an order, or closing and reopening an offer: only the relevant marketplace ID.
  • When reading categories, order events, offer events or catalogue matches: no shop data, apart from the match search criteria (EAN, part number or product name).

Received from the service and stored in WooCommerce:

  • Order data, including personal data of the marketplace customer: name, e-mail address, phone number, billing and shipping addresses, company name and tax ID when an invoice is requested, the chosen parcel locker, order lines, payment details and the customer’s note. This is the data needed to fulfil the order, and it is stored as a regular WooCommerce order.

Images are not uploaded. The plugin sends their URLs and the marketplace downloads them from your site, so images must be publicly accessible.

Terms and privacy

  • About the service: https://inpost.pl/en/VonHalsky
  • InPost API portal, where you create the application and credentials: https://inpsa-api-portal.inpost-group.com/
  • Merchant Portal privacy policy (data controller InPost sp. z o.o.): https://terms.inpost-group.com/privacy-policy-merchant-app
  • Seller terms, including the list of products excluded from sale, are available in the InPost Merchant Portal.

This plugin is an independent project by Grafiduo. It is not affiliated with, endorsed by or an official plugin of InPost sp. z o.o. or InPost Group.

Installation

  1. Install the plugin from Plugins Add New, or upload it to /wp-content/plugins/, and activate it. WooCommerce must be active.
  2. Go to WooCommerce Grafiduo Connector for InPost Von Halsky. Leave Environment set to Production (or choose Staging if you are testing), choose the Client Credentials flow, enter the Client ID and Client Secret from your application in the InPost API portal, and save. The API gateway and token service addresses are filled in from the environment.
  3. Paste the organisation UUID into the organisation ID field and save again. Use Test connection to confirm authentication and access to the organisation.
  4. Go to WooCommerce Grafiduo Connector for InPost Von Halsky: categories and click Refresh category tree from API. The tree is downloaded in the background, in batches; the page tells you when it is done.
  5. Map the shop categories to marketplace categories (leaf categories only) and save. Then fill in default values for the attributes each category requires and save again.
  6. On a product, open the Grafiduo Connector for InPost Von Halsky metabox, fill in the EAN or the brand and part number, and click Send offer. To publish in bulk, use the Send to Von Halsky action on the product list.

FAQ

Do I need an InPost Von Halsky seller account?

Yes. The plugin is a connection to the marketplace, not a replacement for it. You need a seller account and an application created in the InPost API portal before the plugin does anything.

Does the plugin send anything before it is configured?

No. Nothing is scheduled and no request is sent until you save your credentials and organisation ID. The “External services” section describes exactly what is sent after that.

Can I test on the staging environment first?

Yes. The Environment list on the settings screen switches between Production and Staging and sets the official API gateway (https://api.inpost-group.com/inpsa/ or https://stage-api.inpost-group.com/inpsa/) and the token service (https://account.inpost-group.com/oauth2/token or https://stage-account.inpost-group.com/oauth2/token) together, so they cannot drift apart. Each environment needs its own credentials: an application from the production Merchant Portal does not work on staging and vice versa. Custom addresses are also available, for example to go through a proxy.

The Authorization service (/oauth2/authorize) from the InPost environment list is not used, because the plugin authenticates with Client Credentials against the token service.

What happens when I switch environments?

Offers, organisation IDs and credentials are separate in each environment, so the plugin clears what only makes sense in one of them: the position in the order and offer event streams, the price and stock queue, and the stored category tree. Afterwards, download the category tree again and check the organisation ID.

Offer IDs already stored on products are kept, because those offers still exist in the environment where they were created. Publish those products again so they get IDs in the new environment; otherwise their price and stock updates will be rejected.

Are variable products supported?

Not in this release. The marketplace expects one offer per sellable item, so each variation needs its own offer. Simple products are exported.

Why was my offer rejected?

The marketplace validates offers after they are sent. The reasons it returns are stored and shown in the product metabox. Common causes are a missing required category attribute, a brand or part number that does not match the catalogue, or an image URL the marketplace cannot download.

Can I sell on the marketplace at a different price than in my shop?

You can choose whether the plugin sends the current sale price (with an active promotion) or always the regular price. The API accepts a single price and has no before/after promotion pair, so a separate marketplace price list is not possible.

Does the marketplace get the gross or net price?

Gross. The plugin sends the price including tax, together with the rate from the product’s tax class, or the default rate from the settings when there is none.

My products have no EAN codes. Can I publish them?

Yes, if you provide the brand and the manufacturer part number. There is an option to use the product SKU as the part number; enable it only if your SKUs really are manufacturer part numbers.

How quickly do price and stock changes reach the marketplace?

Changed products are queued and sent in batches on a schedule, every five minutes by default, up to 100 offers per run. You can set the interval on the settings screen.

Are historical orders imported on activation?

No. On the first run the plugin only records the position in the event stream, so it does not import the whole marketplace history. The Import orders now button pulls in the current open orders.

Where do I look when something goes wrong?

WooCommerce Status Logs, source grafiduo-von-halsky. Scheduled work and its errors are visible under Tools Scheduled Actions, in the grafiduo-von-halsky group.

What happens to my data when I delete the plugin?

Settings, the category mapping and the internal queues and cursors are deleted. The links between products and marketplace offers are kept, because those offers still exist on the marketplace and the links let you pick up where you left off after reinstalling.

Reviews

October 6, 2026
Bardzo dobra wtyczka do integracji InPost z WooCommerce. Konfiguracja jest prosta, wszystko działa sprawnie i bez zbędnych komplikacji. Świetnie sprawdza się w sklepie internetowym i zdecydowanie ułatwia obsługę wysyłek. Polecam!
Read all 1 review

Contributors & Developers

“Grafiduo Connector for InPost Von Halsky” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.0.2

  • Admin notices are limited to the screens they belong to. The “WooCommerce required” notice appears only on the Plugins screen, only to users who can activate plugins, can be dismissed and explains how to fix the problem.
  • Security: the “Send to Von Halsky” and “Check data for Von Halsky” bulk actions on the product list verify a nonce and the manage_woocommerce capability; saving API credentials verifies the settings nonce and capability before reading the submitted values.

1.0.1

  • Fix: marketplace category search fields (Select2/SelectWoo) could stay a plain, non-interactive <select> when initialisation waited for jQuery’s “document ready” event. On admin screens that load a very large number of scripts (WooCommerce adds React/Gutenberg dependencies to every wp-admin page) that event could fail to fire in reasonable time. All admin scripts of the plugin now start immediately once the document has been parsed, without waiting for it.

1.0.0

  • First release in the WordPress.org plugin directory: offer publishing, bulk price and stock sync, and order import for the InPost Von Halsky marketplace.
  • Settings split into tabs (Connection, Offers, Product data, GPSR and policies, Orders); each tab saves separately, and the tools (connection test, order import, offer update) sit on the related tabs.
  • GPSR: manufacturer data (name, e-mail, phone, website, address, responsible person), safety information, batch number, CE marking and a “no GPSR information required” flag — defaults in the settings, overridable per product.
  • Return and complaint policy (postSale), package dimensions and weight (product.dimension, converted from the shop units), model, supermodel and product link (affiliationProductUrl).
  • Asynchronous offer creation: the plugin stores the commandId, checks the command status every 3 minutes, retries on failure (up to 3 attempts by default) and then marks the offer as not created.
  • Category attributes can come from WooCommerce attributes or product custom fields, with a default value as a fallback; the source of EAN, MPN, brand and model is configurable.
  • New “Von Halsky” tab in the product data box: a product-specific marketplace category, attribute values, dimensions, GPSR and policies.
  • Productization: data from the marketplace catalogue (category, brand, model, description, dimensions, attributes matched by name, GPSR) fills in empty fields, automatically before the first send or with the “Use this data” button.
  • Delivery type mapping (Paczkomat locker, courier) to WooCommerce shipping methods, an additional meta key for the locker code, and turning off selected WooCommerce e-mails for marketplace orders.
  • “Grafiduo Connector for InPost Von Halsky: offers” screen with status filters and bulk actions (send, check, refresh, close, reopen, unlink), plus data checks before sending.
  • Optional image upload through the attachments API; images with a non-HTTPS address are left out of the offer and reported by the check.
  • Saving a product sends a full offer update (delayed, without duplicates), not just price and stock.
  • Fix: “Refresh status” reads the status from the offer.status field of the API response.
  • Category mapping search puts the leaf name first, ignores diacritics and paginates, so a tree of several thousand categories stays usable.