Koru Shipday

Connects VTEX with Shipday: bulk-load shipping rates by postal code, automatically create paid orders in your delivery fleet, and push tracking and delivery confirmation back into VTEX.

Pre-release installation identifier

Koru Shipday currently runs internally as pardosit.koru-shipday for development only. The final public VTEX App ID will replace {vendor}.koru-shipday in every command before publish or release. Do not use the development account for a production installation.

Koru Shipday is a VTEX Admin App that connects a VTEX store with Shipday, the last-mile delivery management software for in-house fleets. It covers the full shipping cycle: loading shipping rates by postal code into VTEX, creating every paid order in Shipday so it goes out for delivery, and returning the tracking reference and delivery confirmation to VTEX.

The app is organized into three modules, plus a cross-cutting configuration, diagnostics, and audit layer:

  • Rates — replaces the postal-code rate table of one or more shipping policies from a single spreadsheet, in one operation with an automatic backup.
  • Orders — detects orders with approved payment whose shipping policy is enabled, calculates packages, and creates them in Shipday without duplicates.
  • Events — receives the Shipday webhook and reflects the tracking reference and confirmed delivery in VTEX.

What Koru Shipday does not do

Koru Shipday does not create, edit, or delete shipping policies, docks, warehouses, or carriers: it operates on the ones that already exist in the account. It also does not invoice orders (it assumes the order is already invoiced by the time it reaches Shipday), does not propagate intermediate delivery states to VTEX, does not manage drivers or routes inside Shipday, and does not replace the ERP as the source of truth for the operation.

Before you begin

TaskTypical owner
Install the app and validate the account/workspaceVTEX agency, developer, or tech lead
Activate the app for the site in Koru SuiteRed Clover / Koru Suite administrator
Get the Shipday API Key and configure the webhookShipday account owner
Create the packages attribute in the VTEX catalogCatalog owner
Load rates by postal codeEcommerce manager or logistics owner
Review failed orders and retry themLogistics or ecommerce operator
Audit the events received from ShipdayDesignated operations owner

One person can cover several roles in a small store.

Required access

Before installing, make sure you have:

  • A valid VTEX Admin session in the store account.
  • A License Manager role with access to the Logistics module. Without it, the Rates module stays blocked: rate writes use the administrator's session, not the app's identity.
  • The official VTEX CLI installed and up to date.
  • Permission to install apps in the chosen workspace and to modify the app's settings.
  • The store's Website ID in Koru Suite, with Koru Shipday active for that site.
  • A Shipday account with its API Key (Shipday dashboard → My Account → Integrations → API Credentials).
  • At least one shipping policy already configured in VTEX to associate with Shipday.

Koru Shipday does not create a VTEX role of its own. Logistics access is managed with the controls available in VTEX License Manager.

Identifiers you will encounter

IdentifierExampleWho defines itConfigured?
Store VTEX accountmy-storeMerchantUsed to log in with the CLI
VTEX workspacemaster or shipday-qaMerchant/agencyDetermines where it is installed and validated
VTEX App ID{vendor}.koru-shipdayApp publisherUsed in vtex install
Koru Website IDSite UUIDKoru SuiteYes, once per store
Koru App IDKoru Shipday's internal UUIDApp buildNo; it lives in code and a store cannot change it
Shipday API KeySecret stringShipdayYes, once per store
Webhook tokenUp to 32 characters, you choose itMerchantYes, in the app and in Shipday

Do not mix up the two accounts

The store account used in vtex login does not necessarily match {vendor}, which represents Koru Shipday's publishing account.

Installation with the VTEX CLI

Installation uses the official VTEX CLI. It is a standalone Admin App: it requires no Store Theme changes and no storefront block declarations.

Install in a validation workspace first

If the store has a QA process, install and configure in a development workspace first. Replace the values between braces:

Log in to the store account

vtex login {store-account}

Select the validation workspace

vtex use {store-account}/{workspace}

Confirm the context before installing

vtex whoami

The output must show the account and workspace you expect. Do not continue if the context is wrong.

Install Koru Shipday

vtex install {vendor}.koru-shipday@0.x

The 0.x range installs the latest available version while the app is in pre-release.

Verify the installation

vtex list

Look for {vendor}.koru-shipday among the installed apps.

The app registers its automated processes on install

During installation, Koru Shipday registers its triggers with the VTEX Scheduler (order sync, reconciliation, and tracking retry). If that registration did not complete, it repairs itself the first time you run a process manually from the Overview screen.

Open the app in VTEX Admin

You can open Koru Shipday from the store configuration section in VTEX Admin (side menu) or navigate directly:

https://{workspace}--{store-account}.myvtex.com/admin/koru-shipday

For master, use the account's main Admin domain:

https://{store-account}.myvtex.com/admin/koru-shipday

If the app does not appear in the navigation, check vtex list, reload VTEX Admin, and confirm you are looking at the same account and workspace where you installed it.

Install in master

Once the setup is validated in the corresponding workspace, select master, reconfirm the context, and repeat the installation:

vtex use {store-account}/master
vtex whoami
vtex install {vendor}.koru-shipday@0.x
vtex list

Settings are per installation/workspace. Verify the Website ID, the Shipday API Key, the webhook token, and the enabled policies in the final environment even if you already tested them in another workspace.

The webhook URL changes with the workspace

The URL configured in Shipday points to a specific workspace. When moving to master you must copy the new URL from Settings → Shipday webhook and update it in the Shipday dashboard, or events will keep arriving at the test workspace.

Updating and uninstalling

Update

Select the correct account/workspace, confirm it, and install the range again:

vtex whoami
vtex install {vendor}.koru-shipday@0.x
vtex list

After updating, open the app and check the license, the main checks, the enabled policies, and the state of the automations. Do not assume a code update replaces operational validation.

Uninstall

Uninstalling applies to the current workspace:

vtex whoami
vtex uninstall {vendor}.koru-shipday
vtex list

What happens to what was already synced

Uninstalling does not delete orders already created in Shipday, nor does it revert rates already loaded into VTEX: it only stops the integration. If the goal is a pause, turning off Integration active in Settings stops the operation without losing the configuration. Before uninstalling, also disable the webhook in the Shipday dashboard so it stops pointing at an app that is no longer there.

Activation and first access

Get the Website ID

Before first use, Red Clover must activate Koru Shipday for the corresponding website in Koru Suite. The Website ID is obtained from Koru Suite or provided during activation.

The Website ID:

  • Identifies the ecommerce store within Koru Suite.
  • Is not a password or a secret.
  • Must belong to the same VTEX store where you installed the app.
  • Is the only Koru identifier the merchant enters manually: the Koru App ID lives in the app's code and cannot be changed from the store.

Connect the store

On first access, the app shows Connect this store to Koru Suite:

Paste the Website ID

Enter the complete value, with no extra spaces.

Save and continue

The app persists the value in its VTEX settings. It can also be managed from Admin → Apps → Koru Shipday, using the koruWebsiteId property.

Confirm the license

The main screen must show the license as active. If a license-inactive screen appears, do not continue with the operational setup: first check the Website ID and the activation in Koru Suite.

The app does not ask for an additional Koru login. The person is already authenticated in VTEX Admin; Koru Suite only validates that the Website ID + Koru Shipday combination has an active license.

Follow this order: each step enables the next, and the two operational modules only unlock once their checks are green.

Confirm the Website ID and the active license

Make sure the app is enabled before moving on to any operational configuration.

Load the Shipday API Key and test the connection

In Settings → Shipday connection, paste the API Key and use Test connection. If the result is negative, stop there: no order will be able to reach Shipday.

Verify the VTEX permissions

In Settings → VTEX permissions, use Verify permissions. These are two independent checks: your user's Logistics role (enables Rates) and the app's policies (enable Orders). One does not replace the other.

Configure the webhook in Shipday

Choose a token (up to 32 characters), save it in Settings → Shipday webhook, and load the URL the app displays — along with that same token — in the Shipday dashboard.

Fill in the pickup location

Name and address of the warehouse or store the shipment leaves from. This is the origin reported to Shipday on every order.

Prepare the packages attribute in the catalog

Create the SKU specification in VTEX that states how many packages each unit takes, enter its name and group in the app, and verify it against a sample SKU. If there are many SKUs, use the bulk packages upload.

Select the enabled shipping policies

Only orders whose shipping policy is checked here are sent to Shipday. Without at least one, the Orders module stays blocked.

Load rates by postal code

From the Rates module, starting with a small upload to validate the spreadsheet format before replacing a full table.

Turn on the integration, and only then the automations

Turn on Integration active, run a manual sync from Overview → Automations, review the result in Orders, and only then enable automatic detection, daily reconciliation, and tracking retry.

The app has a guided tour

Every screen includes a View tour button that walks through its sections and explains what each one is for. It is the fastest way for someone new to understand a screen without reading this whole page.

What enables each module

Rates and Orders do not unlock on their own: they depend on different checks, because they operate with different identities.

ModuleWhat it needsWhy
RatesThe logged-in user's Logistics roleRate writes use the session of the administrator looking at the screen.
OrdersValid Shipday connection + the app's VTEX permission + integration active + at least one enabled policyOrders are created by automated processes, with the app's identity, not a person's.
EventsNothing blocks the screenIt shows what arrived from Shipday, even if everything else is not configured yet.

When a check fails, the app shows a diagnostic code:

CodeWhat it meansHow to fix it
CFG-001The user does not have the Logistics role in License Manager.A VTEX administrator must add the role.
CFG-002Shipday rejected the API Key.Check that it belongs to this account and has not been revoked.
CFG-003The app does not have Logistics permission in this account.Reinstall the app so its policies are accepted.
CFG-004The service did not respond (timeout, 429, 5xx).Temporary: retry in a few minutes.
CFG-005The Shipday API Key is missing.Load it in Settings.
CFG-006The integration is turned off.Turn on Integration active.
CFG-007No shipping policy is selected.Check at least one in Settings.

Check results are cached for a few minutes so the app does not repeat calls on every screen load. After fixing something, use Verify permissions or Refresh status to force a fresh check instead of waiting for the cache to expire.

Complete configuration reference

All configuration lives in the VTEX app settings and is managed from the app's Settings screen (or from Admin → Apps → Koru Shipday). Changes are not applied until you press Save changes.

General and license

FieldKeyDefaultBehavior
Koru Website IDkoruWebsiteIdConnects the store to the Koru license. Without it, the app stays on the setup screen.
Integration activeintegrationEnabledfalseMaster switch. When off, no orders are sent and no events are processed, but the configuration is kept.
Time zonetimezoneAmerica/Argentina/Buenos_AiresTime zone of the logistics operation; used for dates and delivery windows.

Shipday connection

FieldKeyDefaultBehavior
Shipday API KeyshipdayApiKeyThe app's only secret. Found in Shipday → My Account → Integrations → API Credentials.
Webhook tokenshipdayWebhookTokenUp to 32 characters. Validates that each incoming event comes from your Shipday account.

Operation

FieldKeyDefaultBehavior
Pickup location namepickupNameShipment origin reported to Shipday.
Pickup location addresspickupAddressFull, readable dispatch address: street, number, city, state, and postal code.
Enabled shipping policiesenabledShippingPoliciesemptyOnly orders whose policy is in this list are sent to Shipday.

The pickup location is single for the whole account: every order is reported to Shipday with the same origin. A pickup location per shipping policy is not implemented.

Packages attribute

FieldKeyDefaultBehavior
Packages attribute namepackagesSpecificationNameCantidad de bultosThe VTEX SKU specification holding the number of packages per unit.
Attribute group in VTEXpackagesSpecificationGroupLogísticaThe specification group the attribute belongs to in the catalog.
If an SKU lacks the attributepackagesMissingBehaviorfallback-onefallback-one assumes 1 package and leaves an audited warning; block flags the order with a data error.

Automation

FieldKeyDefaultBehavior
Look for new orders automaticallyordersSyncEnabledfalseEnables automatic order detection. When off, manual sync is still available.
How often to look for new ordersordersSyncIntervalMinutes10Functional interval in minutes between automatic runs.
Daily reconciliationreconcileEnabledfalseReviews pending or retrying orders against Shipday once a day.
Automatic tracking retrytrackingRetryEnabledfalseRetries every 10 minutes to register tracking or confirm delivery for orders left waiting.

Rates module

Replaces the postal-code rate table of one or more shipping policies from a single spreadsheet. It does not create or modify policies, docks, or warehouses: it operates on the freight value table of policies that already exist.

How to use it

Select the policies

You can check several: the same spreadsheet is applied to all of them in a single operation.

Download the template

The template carries the exact headers and an embedded version. Always download it from the module; do not reuse an old file.

Fill it in and upload it

On upload, the app reads it, validates it against VTEX, and shows a summary: how many rows are valid, how many have errors, and what the first errors are.

Review and apply

The Apply upload button is enabled only if the upload passes review. Before writing, the app backs up each policy's previous table.

Template columns

ColumnRequiredDetail
Codigo postal inicialYesNormalized to 8 digits with leading zeros, exactly as VTEX stores it.
Codigo postal finalNoEmpty = same as the start value (single-postal-code row). Never lower than the start.
Peso inicial (kg)YesAccepts comma or dot as the decimal separator.
Peso final (kg)YesCannot be lower than the start weight.
Costo de envioYesNumber greater than or equal to 0.
Plazo de entrega (dias)YesWhole days. VTEX accepts a single lead time per row, not a range.
PaisNoDefaults to ARG.
Costo porcentual (%)NoDefaults to 0.
Costo por peso extraNoDefaults to 0.
Volumen maximoNoDefaults to 0.
Seguro minimoNoDefaults to 0.
PoligonoNoEmpty by default.

The template headers are in Spanish even in the English documentation: they are the exact strings the app generates and validates, so translating them would break the upload.

Validations

CodeWhen it appears
RATE-001The template is not a valid version, or the headers do not match. The whole file is rejected without looking at a single row.
RATE-002Error in a specific row: a required field is missing, a postal-code or weight range is invalid, a cost or lead time is negative, or the row overlaps an earlier one on the same postal-code and weight range.
RATE-003A selected policy is no longer available between listing it and applying the upload.

Do not reopen the template in another tool

The template version travels in a hidden sheet. Opening and re-saving the file with some spreadsheet tools can alter it, and the upload is rejected with RATE-001 even though the data is fine. If that happens, download the template again and fill it in from scratch.

What an upload replaces exactly

An upload replaces only the postal codes included in the file. Postal codes not present in the spreadsheet keep their previous rate unchanged: this is not a wipe-and-reload of the whole table.

Backup and rollback

  • Before writing to a policy, the app backs up the current rates for the postal codes the upload will touch.
  • If the write fails partway through with several policies selected, the app reverts those already applied using that backup.
  • The automatic backup is capped at 300 distinct postal codes per upload. A spreadsheet above that cap can still be applied, but the app asks for an explicit acknowledgment: that upload has no backup and cannot be rolled back automatically.
  • A postal code with no rate loaded today leaves nothing to back up: the rollback can restore the previous value of a postal code that already existed, not "undo" the creation of a new one.

Upload states

StateMeaning
ApplyingThe upload is being written to VTEX.
RevertingSomething failed and the backup of already-applied policies is being restored.
SuccessfulEvery policy was applied.
FailedNo policy was applied.
RevertedIt failed partway through and the previous state was restored.
Requires manual reviewIt failed and the rollback could not complete either. Rates must be reviewed by hand.

VTEX can take a while to reflect new rates

A successful upload is not visible immediately in the shipping simulator: VTEX can take from minutes to more than a day to propagate new rates. This is known platform behavior, not a problem with the upload. That is why the app reports the upload as applied and pending confirmation from VTEX, instead of verifying it instantly.

Bulk packages upload

This lives inside Settings, not in its own tab. It loads the packages specification into many SKUs at once, instead of filling it in product by product in the catalog.

ColumnRequiredDetail
SKU IDYesThe SKU ID in VTEX. It cannot repeat within the same spreadsheet.
Cantidad de bultosYesWhole number between 1 and 99.
CodeWhen it appears
PKGBULK-001The template is not a valid version or the headers do not match.
PKGBULK-002The SKU ID is missing, or the package count is not a whole number between 1 and 99.
PKGBULK-003The SKU already appears in an earlier row of the same spreadsheet.

Each row is applied on its own: a failing row does not affect the rest, and the result shows how many were applied and how many failed. Maximum 300 rows per upload — a larger spreadsheet is rejected with a request to split it.

This upload has no backup or rollback

Unlike Rates, the bulk packages upload keeps no backup: a wrong value is fixed with another upload that overwrites it, not with a revert.

How the attribute must be created in VTEX

VTEX only supports SKU-level specifications of type Combo or Radio: it does not accept a free numeric field. The packages attribute must be created as a list of options (for example 1, 2, 3, 4), and its name and group must match exactly what is configured in the app.

Orders module

How orders are detected

The app polls the VTEX OMS for new orders and keeps a marker of how far it has processed, so it does not re-read the same range forever.

  • The first run in a workspace looks back 24 hours.
  • Each run processes up to 20 pages of 100 orders. If there are more, the marker does not move beyond what was processed and the next run continues from there: no order is lost, the work is just spread across more runs.
  • If an order fails while being read, the run stops right there without advancing the marker, so it is not left behind.

Why polling and not the order feed

The OMS Feed v3 and Hooks allow a single consumer per VTEX account: using them could steal events from the client's ERP. That is why detection is done by querying the OMS, which is a read and competes with nobody.

When an order is eligible

An order is sent to Shipday when it meets all of these conditions:

CodeCondition that was not met
ORD-001Payment is not approved yet.
ORD-002The order's shipping policy is not enabled for Shipday.
ORD-003Recipient data is missing: name, phone, or address.
ORD-004The order is cancelled.
PKG-001The package count could not be calculated and the setting is block.

ORD-001 is the normal case for a freshly created order: it is re-evaluated on its own in the next run and needs no action.

Order states

StateMeaningSelf-resolving?
Not eligibleIt fails an eligibility condition.Yes, re-evaluated on every run.
Pending syncIt is eligible and about to be created in Shipday.Yes.
RetryingThe creation failed for a transient reason (timeout, 429, 5xx).Yes, with a growing wait between attempts (from 1 minute up to 1 hour).
SyncedIt already exists in Shipday. Final state.
Data errorShipday rejected the order because of its data (400 and other 4xx).No: it must be fixed and retried by hand.
Permanent errorShipday rejected the credential (401/403).No: the API Key must be reviewed and the order retried by hand.

Manual retry

Rows in Data error and Permanent error show the Retry button. These are the only two states the app never leaves on its own, by design: looping retries on an order Shipday will keep rejecting fixes nothing.

The retry does not duplicate the order: if a previous attempt ended with an uncertain response, the app first asks Shipday whether the order already exists and, if it finds it, only records the relationship.

What is sent to Shipday

For each order the app sends the VTEX order number (which is what later matches incoming events), the recipient data, the configured pickup location, the total, the items with price and quantity, the normalized payment method, and the calculated package count. Payment data and credentials are not sent.

Events module (tracking and delivery)

Shipday notifies every delivery status change by webhook. The app records every event and reflects only two things in VTEX: the tracking reference and the delivery confirmation.

Configure the webhook

  1. Choose a token of up to 32 characters and save it in Settings → Shipday webhook.
  2. Copy the URL that same section displays — it looks like this:
https://{store-account}.myvtex.com/_v/public/koru-shipday/webhook/shipday
  1. Load the URL and the token in the Shipday dashboard.

No token configured means no event gets in

The app rejects every event that does not present the expected token. If the token is empty in the configuration, all events are rejected: this is deliberate — the URL is public and the token is the only thing separating a real event from a made-up one.

What the app does with each event

Shipday eventAction in VTEX
ORDER_INSERTEDRecorded, not propagated.
ORDER_ASSIGNEDRegisters the tracking reference.
ORDER_ACCEPTED_AND_STARTEDRegisters the tracking reference.
ORDER_PIKEDUPRecorded, not propagated.
ORDER_ONTHEWAYRecorded, not propagated.
ORDER_COMPLETEDConfirms delivery in VTEX.
ORDER_FAILEDRecorded as an incident. Does not mark as delivered.
ORDER_INCOMPLETERecorded as an incident. Does not mark as delivered.

The status carried by the event takes precedence over the event name: Shipday sometimes sends undocumented event names for the same transition. That is why the app decides what to do based on the order status, which is the reliable signal.

Results you will see on the screen

ResultMeaning
ProcessedThe event was applied in VTEX.
DuplicateShipday resent an already-processed event. Nothing is done twice.
IgnoredAn intermediate delivery state: recorded, not propagated to VTEX.
RetryingIt could not be applied yet (for example, the order is not invoiced) and will be retried automatically.
ErrorIt could not be applied. Requires review.

Shipday is an in-house fleet, not a carrier

Shipday does not issue a carrier tracking number or URL. The tracking reference registered in VTEX is the Shipday order ID, which is what locates the shipment in its dashboard.

Invoicing and retries

To register tracking or confirm delivery, VTEX requires the order to be invoiced already. The app never invoices: it assumes the order already is by the time it reaches Shipday (operational rule: nothing is dispatched without an invoice) and only reads the invoice number.

If it is not invoiced yet, the event is not lost: it stays in Retrying and the tracking retry job tries again every 10 minutes, with a growing wait. If the problem is not transient, the order is flagged for manual review.

Automations

Three automated processes, visible in Overview → Automations:

ProcessHow often it firesFunctional intervalSetting that enables it
Order sync to ShipdayEvery 10 minutesConfigurable (10 minutes by default)Look for new orders automatically
Reconciliation with ShipdayOnce a day (03:00)DailyDaily reconciliation
Tracking retryEvery 10 minutesEvery 10 minutesAutomatic tracking retry

The technical trigger always runs; what decides whether to act is the configured switch and interval. Reconciliation exists because normal polling never looks at an old order again: it sweeps orders left pending or retrying and reprocesses them, never duplicating an order already created in Shipday.

Run states

StateMeaning
CompletedIt ran and finished successfully.
Not applicableThe process is off or the interval has not elapsed.
Already runningAnother run was in progress; this one did not overlap.
BlockedIt did not pass the pre-checks (session or license).
ErrorIt ran and failed.

The Run now button triggers the same logic manually, without waiting for the schedule, and works even if the automated process is off. It is the recommended way to test a configuration change right away.

Screens

General integration status: VTEX account, workspace, and license; the three main checks (Shipday, user permission, app permission); the state of the integration, the API Key, and the webhook URL; and the Automations panel with each process's status, last run, and manual trigger button.

License and security

License validation

Every operational route requires:

  1. A valid VTEX Admin session.
  2. An active Koru license for the Website ID and Koru Shipday's App ID.

To tolerate transient network or license-service failures, a positive authorization is kept briefly; an explicit revoked-license response blocks the app immediately. The webhook is the exception: with a revoked license or the integration turned off, it responds successfully and discards the event while leaving a record, instead of making Shipday retry forever.

Data and credentials

  • The app never asks for or stores the merchant's AppKey/AppToken. To operate on VTEX it uses the logged-in administrator's session (manual actions) or its own app identity (automated processes).
  • The app's only secret is the Shipday API Key, stored in the VTEX app settings and never exposed to the browser in plain text.
  • The browser never calls VTEX APIs or Shipday directly: everything goes through the app's own routes.
  • The Website ID and App ID identify resources, but they are not passwords.
  • Order state, events, and upload history are persisted in the app's internal storage, not in Master Data or in VTEX orders.
  • Every action carries a correlation identifier that makes it traceable in the logs when support needs it.

Troubleshooting

The app does not appear after installation

  1. Run vtex whoami.
  2. Confirm the account and workspace.
  3. Run vtex list and look for {vendor}.koru-shipday.
  4. Reload VTEX Admin.
  5. Try the direct URL /admin/koru-shipday on the same domain/workspace.

The license shows as inactive

  1. Compare the Website ID with the correct site in Koru Suite.
  2. Confirm that Koru Shipday is active for that website.
  3. Make sure you did not copy any spaces.
  4. Retry the validation.
  5. If it persists, report the Website ID, account, and workspace to support, without sending credentials.

Rates is blocked

It is always CFG-001: your user does not have the Logistics role in License Manager. Ask a VTEX administrator to add it and verify the permissions again.

Orders is blocked

Check the four conditions in Settings: a valid Shipday API Key, the app permission in order, Integration active turned on, and at least one shipping policy checked. The notice tells you which one is missing.

The Shipday connection fails

  • Confirm the API Key belongs to this Shipday account and has not been revoked.
  • If the error is temporary (CFG-004), retry in a few minutes: it is not a configuration problem.
  • Remember that Test connection may be testing a value you have not saved yet; the app says so.

No orders are being sent

Check, in this order:

  1. That Integration active is on.
  2. That Look for new orders automatically is on, or trigger it by hand from Overview.
  3. That those orders' shipping policy is checked in Settings.
  4. That the orders have approved payment.
  5. The Orders screen: the Detail column states the exact reason per order.

An order is stuck in "Data error"

That is a Shipday rejection based on the order's data. Check that the recipient has a complete name, phone, and address, and that the configured pickup location is a readable address. Once fixed, use Retry on that row.

No events arrive from Shipday

  1. Confirm the URL loaded in Shipday is the one the app shows for this workspace.
  2. Confirm the Shipday token is identical to the one saved in the app (up to 32 characters, no spaces).
  3. Check that Integration active is on: with the integration off, events are discarded.
  4. Review the Events screen: if there are events with the Ignored result, the webhook is arriving fine and what you see are intermediate states that are not propagated.

The delivery is not reflected in VTEX

Look at the event on the Events screen:

  • Retrying with an invoicing reason: the order is not invoiced in VTEX yet. It resolves on its own once invoiced, if automatic tracking retry is enabled.
  • Error: the update in VTEX failed. Check that the order exists, is invoiced, and is not cancelled.
  • No event at all: the problem is the webhook, not tracking. See the previous point.

The template is rejected even though it looks right

Download the template again from the app and fill it in without reopening the file in another tool. Reopening and re-saving an .xlsx can alter the hidden sheet carrying the version.

Rates do not show up in the simulator

If the upload shows as successful, wait: VTEX can take from minutes to more than a day to propagate new rates. Check the upload state in the Rates module before uploading the file again.

Functional limits

The current version:

  • Assumes one order = one shipment: it does not handle multi-seller marketplace orders dispatched in more than one shipment or invoice.
  • Uses a single pickup location for the whole account, not one per shipping policy.
  • Automatically backs up up to 300 postal codes per rate upload; above that, the upload runs without a backup and requires explicit acknowledgment.
  • Applies up to 300 rows per bulk packages upload, with no backup or rollback.
  • Processes up to 20 pages of 100 orders per detection run.
  • Does not invoice orders in VTEX: it assumes they arrive already invoiced.
  • Does not propagate intermediate delivery states or failed deliveries to VTEX: only the tracking reference and the delivery confirmation.
  • Does not create or modify shipping policies, docks, warehouses, or carriers.
  • Always operates on the VTEX account where it is installed.

Checklist before going live

  • Koru Shipday installed in the correct account and workspace.
  • Website ID verified and active license confirmed.
  • Shipday API Key loaded and Test connection green.
  • VTEX permissions verified: the user's Logistics role and the app's policies.
  • Webhook URL and token loaded in the Shipday dashboard, for this workspace.
  • Pickup location complete and readable.
  • Packages attribute created in the catalog, configured in the app, and verified against a sample SKU.
  • Enabled shipping policies selected.
  • A test rate upload applied and reviewed before a large one.
  • Integration active turned on.
  • A manual order sync run and reviewed on the Orders screen.
  • Automations enabled only after manual validation.
  • An owner assigned to review failed orders and events periodically.

Useful details when asking for support

Report the VTEX account, workspace, approximate time, the VTEX order ID involved, and, if applicable, the specific row from the Orders or Events screen. Avoid sending the Shipday API Key, the webhook token, credentials, or cookies.

Koru Shipday — Developers · Koru Suite