Koru Recovery
Detects payment-pending VTEX orders, groups related attempts, and organizes manual recovery with full traceability.
Pre-release installation identifier
Koru Recovery currently runs internally as pardosit.koru-recovery for QA only.
The final public VTEX publisher App ID is intentionally pending and will replace
{account}.koru-recovery in every installation command before publish or release.
Do not use the QA vendor for a production installation.
Koru Recovery is a VTEX Admin App for teams that recover purchases whose payment was left pending. It queries VTEX OMS, applies store-specific rules, groups related attempts, and creates operational cases so the team can contact customers manually.
The app serves two distinct stages:
- The technical team or VTEX agency installs the app, connects the license, and completes the initial setup.
- The ecommerce or operations team reviews cases, copies the message, contacts the customer through an external channel, and tracks the outcome in VTEX.
What Koru Recovery does not do
Koru Recovery does not send WhatsApp messages, emails, or SMS; it does not capture or approve payments; it does not create payment links; and it does not replace OMS. Contact and bank transfer happen outside the app. Payment must be reflected through the store's existing VTEX process.
Before you begin
Recommended owners
| Task | Typical owner |
|---|---|
| Install the app and validate the account/workspace | VTEX agency, developer, or technical lead |
| Activate the app for the website in Koru Suite | Red Clover / Koru Suite administrator |
| Enter the Website ID and configure rules | Technical lead, project manager, or ecommerce manager |
| Define bank-transfer details and message | Ecommerce manager, finance team, or store owner |
| Review and contact cases | Recovery operator or ecommerce team |
| Reflect a received payment in VTEX | Authorized user following the store's process |
| Audit actions and outcomes | Ecommerce manager or operations owner |
The same person may cover several roles in a small store.
Required access
Before installing, make sure you have:
- A valid VTEX Admin session in the store account.
- The official VTEX CLI installed and up to date.
- Permission to install apps in the selected workspace.
- Permission to modify the app settings. Without it, saving returns a permission error and a VTEX account administrator must intervene.
- The ecommerce Website ID from Koru Suite, with Koru Recovery active for that website.
- The bank-transfer details the store wants to include in the message.
- Operational access to OMS to inspect orders and reflect payments through the store's usual process.
Koru Recovery does not create a custom VTEX role. App visibility and human access must be managed with VTEX's existing access controls.
Identifiers you will encounter
| Identifier | Example | Defined by | Is it configured? |
|---|---|---|---|
| Store VTEX account | my-store | Merchant | Used to log in with the CLI |
| VTEX workspace | master or recovery-qa | Merchant/agency | Determines where the app is installed and validated |
| VTEX App ID | {account}.koru-recovery | App publisher | Used by vtex install |
| Koru Website ID | Website UUID | Koru Suite | Yes, once per store |
| Koru App ID | Internal Koru Recovery UUID | App build | No; it is built into the app |
Do not confuse the two accounts
The merchant account used by vtex login is not necessarily the same as {account},
which represents the publisher account for Koru Recovery.
Installation with the VTEX CLI
Installation uses the official VTEX CLI. It does not require Store Theme changes or block declarations.
Install in a validation workspace first
If the store has a QA process, install and configure the app in a development workspace first. Replace values in 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 whoamiThe output must show the expected account and workspace. Do not continue if the context is wrong.
Install Koru Recovery
vtex install {account}.koru-recovery@0.xThe 0.x range installs the latest stable release available in major version 0.
Open the app in VTEX Admin
Open Koru Recovery from the store setup section in VTEX Admin, or navigate directly to:
https://{workspace}--{store-account}.myvtex.com/admin/koru-recoveryFor master, use the account's main Admin domain:
https://{store-account}.myvtex.com/admin/koru-recoveryIf the app does not appear in the navigation, confirm vtex list, reload VTEX Admin,
and verify that you are viewing the same account and workspace where it was installed.
Install in master
After validating the setup in the appropriate workspace, select master, confirm the
context again, and repeat the installation:
vtex use {store-account}/master
vtex whoami
vtex install {account}.koru-recovery@0.x
vtex listSettings belong to each installation/workspace. Verify the Website ID and operational configuration in the final environment even if you tested them elsewhere.
Updating and uninstalling
Update within the current major
Select the correct account/workspace, confirm it, and install the range again:
vtex whoami
vtex install {account}.koru-recovery@0.x
vtex listAfter updating, open the app and verify the license, settings, latest synchronization, and automation status. A code update does not replace operational validation.
Uninstall
Uninstallation applies to the current workspace:
vtex whoami
vtex uninstall {account}.koru-recovery
vtex listCoordinate retention before uninstalling
The current version does not expose a full data-purge action or a global export of all records in the UI. Before removing the app, agree with support on what must be retained or deleted from VBase and deactivate the Koru license through the applicable process.
Activation and first access
Get the Website ID
Before first use, Red Clover must activate Koru Recovery for the corresponding website in Koru Suite. The Website ID is available in Koru Suite or is provided during activation.
The Website ID:
- Identifies the ecommerce website in Koru Suite.
- Is not a password or secret.
- Must belong to the same store where the VTEX app is installed.
- Is the only Koru identifier the merchant enters manually.
Connect the store
On first access, the app displays Connect this store to Koru Suite:
Paste the Website ID
Enter the full value without leading or trailing spaces.
Save and continue
The app persists the value in its VTEX app settings. It can also be managed through
the app's native settings using the koruWebsiteId property.
Confirm the license
The main screen must display Active license. If you see an inactive-license screen, do not continue with operational setup: first verify the Website ID and the activation in Koru Suite.
The app does not request a separate Koru login. The user is already authenticated in VTEX Admin; Koru Suite only checks that the Website ID + Koru Recovery combination has an active license.
Recommended initial setup
After connecting the license, follow this order so you do not create cases that cannot be contacted yet:
Complete the general settings
Verify the Website ID, enter the store's display name, and define the message locale.
Review the operational rules
Start with the defaults. Change ages, windows, or tolerances only when the store's business process requires it.
Enter bank-transfer details
At least one complete, enabled field is required. Without it, the app can detect cases but blocks copying and marking messages.
Review the message template
Keep only variables that can be resolved from real OMS data and the store settings.
Run “Update now”
The first synchronization discovers payment methods in payment-pending orders and
creates cases that satisfy the configured rules.
Select eligible payment methods
After discovery, review each method. Do not enable an offline method if offering a different bank transfer would result in an incorrect contact.
Run “Update now” again
After saving eligible payment methods, run Update now again. The first run discovers methods and creates cases only for methods that were already eligible through saved settings or safe defaults. The second run applies the updated selection.
Validate a complete case
Open a test case and verify the customer, orders, amount, payment method, preview, and audit trail. Copy the message only when the values match OMS.
Complete configuration reference
The Settings tab saves per-store rules in VTEX app settings. Unsaved changes do not affect detection or messages.
General
| Field | Key | Required | Behavior |
|---|---|---|---|
| Koru Suite Website ID | koruWebsiteId | Yes | Connects the store to its Koru license. |
| Store name in messages | storeDisplayName | Conditional | Resolves {{store.name}}. If the template uses that variable and this field is empty, the preview is incomplete. |
| Language and region | localeOverride | No | Locale such as es-AR, en-US, or pt-BR, used for money formatting and localized defaults. |
The locale must use a two- or three-letter language code and, optionally, a two-letter region or numeric region code. When empty, the app uses a locale available in the environment.
Changing localeOverride does not automatically translate an already customized
template. Review both text and variables after changing it.
Operational rules
| Field | Key | Default | Range | What it controls |
|---|---|---|---|---|
| Wait before creating a case | minOrderAgeMinutes | 60 min | 0–1440 | Minimum order age before it becomes actionable. |
| Attempt grouping period | groupingWindowMinutes | 60 min | 1–1440 | Time window used to group related attempts. |
| Amount difference for grouping | groupingAmountTolerancePercent | 0% | 0–20 | Maximum amount variation allowed within a group. |
| Period for detecting another purchase | repurchaseWindowHours | 48 h | 1–720 | Maximum time distance for a possible repurchase. |
| Amount difference for repurchase detection | repurchaseAmountTolerancePercent | 5% | 0–50 | Maximum amount variation for the heuristic match. |
| Case time limit | expireAfterHours | 168 h | 1–2160 | How long an open case remains before expiring. |
High tolerances produce more matches: they may group different purchases or flag more possible repurchases. Start with the defaults and adjust using real cases.
Automatic updates
| Field | Key | Default | Range | What it controls |
|---|---|---|---|---|
| Update automatically every | syncIntervalMinutes | 60 min | 15–1440 | Functional interval at which a due synchronization runs. |
| Additional hours to review | syncLookbackMarginHours | 24 h | 0–720 | Extra historical margin used to detect late changes. |
VTEX Scheduler sends a technical heartbeat every 15 minutes. The backend compares the
latest attempt/success with syncIntervalMinutes and decides whether a sync is due.
Therefore, a 60-minute frequency does not create a separate 60-minute cron.
The range queried by each update is:
now - (expireAfterHours + syncLookbackMarginHours) → nowUpdate now bypasses the functional wait, uses the same idempotent engine, and also attempts to repair the scheduler registration.
Bank-transfer details
The list is stored under the paymentFields key. Each row contains:
| Property | Required | Description |
|---|---|---|
| Label | Yes for an enabled row | Visible name: Bank, Account holder, Alias, CBU/CVU, CUIT/RUT, Account, or Instructions. |
| Value | Yes for an enabled row | Actual value the customer will receive. |
| Enabled | Yes/No | Only enabled rows are inserted into {{payment.fields}}. |
| Order | Internal | Preserves the order in which fields were created. |
Add suggested fields creates Account holder, CUIT/RUT, Alias, and CBU/CVU. These are labels only: you must enter the store's actual values.
Requirement for contacting customers
At least one complete and enabled transfer detail is required. Detection and synchronization still work without it, but Copy message and Mark sent remain blocked.
Do not enter banking credentials, passwords, tokens, or information that should not be sent to the customer. These fields are intended for public transfer instructions.
Eligible payment methods
The selection is stored under eligiblePaymentMethods. The app discovers methods
present in queried orders. Before the first synchronization, the list may be empty.
For each method, the app shows:
- Its display name reported by OMS.
- The normalized key used by the engine.
- A marker when it matches the recommended default.
- A selector to include or exclude it from recovery.
Methods enabled by default through normalized equivalence:
- Credit card.
- Debit card.
- Wallet or digital wallet.
- Instant payment and Pix.
Methods disabled by default:
- Boleto or bank invoice.
- A bank transfer already selected by the customer.
- Cash, cash on delivery, or contraentrega.
- Promissory or manual.
- Gift card, voucher, points, or store credit.
- Offline, custom, or unknown methods.
Comparison ignores capitalization, accents, and separators. It uses both the payment method name and group reported by OMS.
Discovering a method does not mean it is appropriate to contact. Final eligibility is the store's decision. If there is no explicit selection, the backend falls back to the safe defaults.
Customer message
The text is stored under messageTemplate. The default English template is:
Hi {{customer.firstName}}, we noticed that your order {{order.id}} for {{order.amount}} is still pending payment.
To complete it, you can transfer using these details:
{{payment.fields}}
After making the transfer, let us know so we can continue preparing your order.
{{store.name}}The template supports simple variables. It does not execute Handlebars, conditionals, or arbitrary code.
| Variable | Source | What happens if missing |
|---|---|---|
{{customer.firstName}} | First name or first word of the full name in OMS | Incomplete preview |
{{customer.fullName}} | Full name in OMS | Incomplete preview |
{{customer.email}} | Email in OMS | Incomplete preview |
{{order.amount}} | Normalized and formatted amount | Incomplete preview |
{{order.currency}} | Order currency | Incomplete preview |
{{order.id}} | Primary order in the case | Incomplete preview |
{{payment.fields}} | Enabled transfer-detail rows | Incomplete preview |
{{store.name}} | storeDisplayName | Incomplete preview |
An unknown variable or one without a value is replaced with an empty string and reported as missing. While any variable is missing, the UI blocks copying and marking the message.
How cases are created
Order source
Koru Recovery queries VTEX OMS for:
payment-pendingThe VTEX Incomplete visual filter is not equivalent. An incomplete order without
the payment-pending status is not part of recovery.
For every candidate, the backend retrieves the order detail when available and extracts:
- Order ID and order group.
- Transaction IDs.
- OMS status.
- Creation date.
- Customer document, email, phone, ID, and name.
- Amount and currency.
- Payment method name and group.
Eligibility
An order becomes an actionable candidate only when:
- It is within the queried historical range.
- OMS reports it as
payment-pending. - It has reached
minOrderAgeMinutes. - It has at least one eligible payment method.
- A customer identity or, as fallback, an
orderGroupcan be resolved. - There is no exact paid repurchase that closes the case.
Orders that are too recent and non-eligible methods are counted in the technical sync result but do not create actionable cases.
Koru Recovery is gateway-independent. It does not process or store card credentials
and does not call payment gateways. Any configured eligible method follows the same
recovery flow once VTEX OMS exposes the order as payment-pending.
Identity and grouping
Identity is resolved in this order:
- Document.
- Email.
- Phone.
- Customer ID.
orderGroup, only as a grouping fallback.
Attempts are grouped when they share the same identity and currency, have an amount within tolerance, and occur within the configured rolling window measured from the first attempt in the group. The window does not use fixed clock buckets and later attempts do not extend it transitively.
The case retains all related orders, transaction IDs, and order groups. The primary order is the most recent order in the group.
Amounts and currencies
OMS amounts are normalized as minor units before comparison. Currency is resolved in this order:
- OMS
currencyCode. - Order preferences.
- A fallback available in the execution context.
Orders in different currencies are never grouped or compared as repurchases. The app supports valid currency codes supplied by VTEX OMS and formats each amount in its own currency, without exchange-rate conversion. If amount and currency cannot be resolved reliably, it does not generate an ambiguous message.
Exact and possible repurchases
Duplicate-contact prevention has two levels:
| Result | Rule | Behavior |
|---|---|---|
| Exact repurchase | A paid order exists in the same orderGroup | The case closes as cerrada-pagada. |
| Possible repurchase | A different paid order exists for the same customer, with amount within tolerance and inside the configured time window | The case remains open, but copying and marking sent are blocked until a human confirms. |
For a possible repurchase, open the related orders in OMS and verify that the customer did not complete another purchase. If recovery should continue, use Continue anyway. The confirmation is audited and does not erase the historical flag.
Statuses and lifecycle
Case statuses
| Status | Meaning | Action required? |
|---|---|---|
pendiente | Eligible case not yet marked as contacted | Yes |
mensaje-enviado | An operator recorded that external contact was made | Wait for payment or recheck |
cerrada-pagada | OMS reflects a paid order or exact repurchase | No |
descartada | An operator discarded the case or all its orders were canceled | No |
expirada | The time limit was reached without a detected payment | Not by default |
The internal status values remain in Spanish because they are persisted domain identifiers. The UI translates their visible labels.
Automatic transitions
- A synchronization creates or updates
pendientecases. - If a related order reaches a paid OMS stage, an open case moves to
cerrada-pagada. - If all grouped orders are canceled, an open case moves to
descartadawith theoms-cancelledreason. - If only one grouped order is canceled while another remains open, the case is not discarded automatically.
- When the expiration timestamp is reached, an open case moves to
expirada.
OMS stages interpreted as paid:
window-to-cancel
payment-approved
ready-for-handling
authorize-fulfillment
release-to-fulfillment
handling
waiting-for-fulfillment
ready-for-invoicing
invoice
invoicedManual transitions
pendiente→mensaje-enviado: Mark sent.pendienteormensaje-enviado→descartada: Discard case.- A recheck can close a case as paid when OMS already reflects payment.
- A note or message copy does not change status.
- A discarded case does not automatically reopen as pending.
Day-to-day operation
Recommended workflow
Review synchronization health
Check Last update, Last automatic check, automation status, and any latest error.
Work pending cases first
Filter by Pending and review possible repurchases separately when applicable.
Open the detail and compare it with OMS
Validate the customer, amount, primary order, grouped attempts, payment method, VTEX status, and preview.
Copy and send the message externally
Use Copy message and paste it into the store's chosen operational channel. Koru Recovery records the copy but does not send the message.
Record the contact
After sending the message, use Mark sent. Do not use it as payment confirmation: it records manual contact only.
Reflect payment in VTEX
When the store confirms the transfer, an authorized user must follow the existing process so OMS reflects the payment. Koru Recovery does not perform this action.
Update or recheck
The next synchronization closes open cases once OMS reports a paid stage. For a specific case, use Recheck.
Metrics
The summary counts cases, not orders:
- Pending.
- Messages sent.
- Closed paid.
- Discarded.
- Expired.
- Open, unconfirmed possible repurchases.
A case containing several grouped orders counts as one.
Search and filters
You can filter by status and possible repurchases. Search indexes:
- Case ID.
- Primary and related orders.
- Transaction IDs.
- Customer document, email, phone, and ID.
- First and last name.
The list supports 10, 20, 50, or 100 cases per page. Cases are sorted by last update, most recent first.
Search is case- and accent-insensitive and matches normalized complete identifiers, complete indexed values, individual name words, or their numeric-only form. It is not fuzzy or arbitrary substring search.
Export cases
Export creates koru-recovery-cases.csv with every case that matches the current
status, possible-repurchase, and search filters—not only the visible page. The app
retrieves all result pages, displays the number of cases fetched while the export is
running, and includes these columns:
- Customer.
- Primary order.
- Status.
- Payment method.
- Amount.
- Update date.
The selected page size does not limit the export.
Case detail
The detail view shows:
- Case ID and status.
- Customer, email, document, and phone.
- Amount and currency.
- Primary order with a direct VTEX link.
- Last observed VTEX status.
- Primary Transaction ID with a direct link.
- Payment method.
- Last update and expiration.
- Message preview.
- Related orders, transaction IDs, and order groups.
- Discard reason when present.
- Internal notes.
- Audit trail.
Available actions
| Action | When it is available | Result |
|---|---|---|
| Copy message | Actionable case, complete preview, configured payment details, and confirmed repurchase | Copies to the clipboard and audits message.copied. |
| Mark sent | Only for pendiente, with the same message validations | Moves to mensaje-enviado and records the contact time. |
| Continue anyway | Unconfirmed possible repurchase | Unblocks contact and leaves an audit event. |
| Recheck | From the detail view | Queries related orders in OMS again. |
| Discard case | pendiente or mensaje-enviado | Requires a reason; note is optional. |
| Add note | From the detail view | Adds an internal note without changing status. |
| Copy value | On individual fields | Copies a customer, order, transaction, or other visible value. |
Audit trail
The audit trail separates manual (admin) from automatic (system) actions. It
stores timestamp, actor, action, previous/next status, orders, transactions,
note/reason, and technical metadata when applicable.
It includes, among other events:
- Detection, update, eligibility, and grouping.
- Exact or possible repurchase.
- Confirmation to continue.
- Message copy and mark sent.
- Recheck.
- Notes and discards.
- Closing on payment, OMS cancellation, and expiration.
- Names of changed configuration fields, without storing their sensitive values in the event.
Export within Audit retrieves every audit event for the case, not only the events initially displayed. The CSV contains Event ID, ISO timestamp, localized timestamp, visible action, action code, actor type, actor, previous status, next status, Case ID, orders, transaction IDs, note, and metadata. Progress shows the number of events retrieved.
Synchronization and automation
What each update does
A run:
- Acquires a lock to prevent concurrent synchronizations.
- Queries every OMS page in the configured range.
- Retrieves candidate order details.
- Records discovered payment methods.
- Applies age and eligibility.
- Groups attempts.
- Searches for exact and heuristic repurchases.
- Creates or updates cases idempotently.
- Rechecks payments and cancellations for open cases.
- Expires cases whose time limit has been reached.
- Rebuilds metrics and saves the run state.
If another run owns an active lock, the result is Locked by another run, without duplicating work.
Automation status
| Status | Meaning |
|---|---|
| Completed | The due run finished successfully. |
| Waiting for the next interval | The heartbeat arrived before syncIntervalMinutes was due. |
| Another update was running | An active lock existed. |
| Blocked by configuration or license | Valid configuration or Koru authorization was missing. |
| Failed | OMS, VBase, or another dependency returned an error. |
If OMS fails, the app records the error and preserves existing cases. It does not delete data because of a partial or failed synchronization.
License and security
License validation
Every operational route requires:
- A valid VTEX Admin session.
- An active Koru license for the Website ID and Koru Recovery App ID.
The app-settings route stays outside the license gate to allow bootstrap, but still requires a valid admin session.
To tolerate transient failures:
- A positive authorization is cached briefly in memory.
- If Koru Suite fails because of network or server errors, a persisted positive validation may preserve access for up to 72 hours.
- An explicit revocation blocks business operations after a short protection against transient negative responses expires.
These periods are internal and cannot be configured per store.
Data and credentials
- React only calls Koru Recovery's private routes.
- The backend uses the VTEX IO context and policies for OMS.
- The app does not request or store merchant AppKey/AppToken credentials.
- No Koru secrets are exposed in the browser.
- Website ID and App ID identify resources but are not passwords.
- Cases, indexes, audit events, metrics, and sync state are persisted in VBase under
the functional
koru-recoverybucket. - Cases contain operational snapshots of customer and order data. Apply the store's access and privacy policies to VTEX Admin users.
Troubleshooting
The app does not appear after installation
- Run
vtex whoami. - Confirm the account and workspace.
- Run
vtex listand find{account}.koru-recovery. - Reload VTEX Admin.
- Try the direct
/admin/koru-recoveryURL on the same domain/workspace.
The session was rejected or expired
Sign in to VTEX Admin again and reload the app. Private routes return 401 when a
valid admin session is missing.
I cannot save settings
- Confirm that your user can modify app settings.
- Check for numeric fields outside their ranges.
- Verify that Website ID and template are not empty.
- Use a valid locale such as
en-US. - Complete or remove enabled transfer rows with a missing label or value.
A permission error requires a VTEX administrator. Retrying with the same user does not change that authorization.
The license is inactive
- Compare the Website ID with the correct website in Koru Suite.
- Confirm that Koru Recovery is active for that website.
- Check for copied whitespace.
- Retry validation.
- If it persists, provide the Website ID, account, and workspace to support without sending credentials.
The license could not be verified
We could not verify the license is a transient availability state, not proof that the license was revoked. Retry after a few seconds. Only Koru license is not active indicates an explicitly inactive or unconfigured license.
“Update now” does not create cases
Review, in this order:
- Whether OMS contains orders with the actual
payment-pendingstatus. - Whether they are inside the configured historical range.
- Whether they reached the minimum age.
- Whether their payment method is enabled.
- Whether OMS detail contains enough customer, amount, and currency data.
- Whether an exact paid repurchase exists.
An order shown as Incomplete without payment-pending is not a candidate.
No payment methods appear
Methods are discovered during a synchronization over payment-pending orders. Run
Update now when at least one test order exists inside the range. An unknown method
is disabled by default.
Copy message or Mark sent is disabled
Check:
- At least one complete and enabled transfer detail.
- No missing variables in the preview.
pendientestatus for Mark sent.- An actionable status for copying.
- Confirmation of a possible repurchase.
The preview warning identifies the variable that could not be resolved.
The case did not close after payment
- Open the order from the case detail.
- Confirm OMS displays a stage interpreted as paid.
- Run Recheck for that case or Update now for all cases.
- If OMS still shows
payment-pending, complete the store's VTEX payment process first.
Marking a message as sent does not mark the order as paid.
Automatic updates are delayed
- Compare the last automatic check with
syncIntervalMinutes. - A “Waiting” status is normal when the heartbeat is not due yet.
- Run Update now: besides syncing, it attempts to repair the schedule.
- If an error appears, record its time, account, workspace, and message.
For technical support in production:
vtex logs {account}.koru-recoveryDo not share tokens, cookies, private banking details, or unnecessary personal data.
Functional limits
The current version:
- Only works with OMS
payment-pendingorders. - Uses manual contact; it does not automate channels.
- Offers offline bank transfer; it does not process payments.
- Does not create or reactivate payment links/transactions.
- Does not change OMS statuses by itself.
- Does not convert currencies.
- Does not create human VTEX roles.
- Does not use Master Data for cases.
- Does not automatically reopen discarded cases.
Go-live checklist
- Koru Recovery is installed in the correct account and workspace.
- The store Website ID was verified.
- The active-license indicator is visible.
- Store name and language/region were reviewed.
- Ecommerce approved the operational rules.
- Frequency and historical range match the store volume.
- At least one complete and enabled transfer detail exists.
- Eligible methods were reviewed after a synchronization.
- The template has no missing variables.
- A test case was compared with OMS.
- Operators know that copy/send does not confirm payment.
- An owner is assigned to reflect transfers in VTEX.
- Discard, notes, and possible-repurchase workflows are agreed.
- The latest manual synchronization completed without errors.
Useful information when requesting support
Provide the VTEX account, workspace, approximate time, Case ID, Order ID, action performed, and visible error message. Do not send credentials, cookies, or banking details that are not needed for diagnosis.