Run your own publishing target: poll MerchantOps for approved records and report outcomes over a pull-based API.
MerchantOps ships with built-in connectors (see VTEX), but
you can also build your own. This is the right approach when the destination
is an internal system — an ERP, a proprietary pricing platform, a custom
storefront extension — that a built-in target can’t reach.A custom connector is a small service you run. It never connects to
MerchantOps internals. Instead it talks to a pull-based HTTP API:
MerchantOps holds the approved, versioned records; your connector polls for the
ones fanned out to your target, pushes them into your system, and reports each
outcome back. Everything is scoped to your organization by an API key, so a
misconfigured connector can never touch another tenant’s data.
Every connector, regardless of destination, runs the same loop:
1
Poll for pending records
Ask MerchantOps for records that have been approved and routed to your
target but not yet reported as done.
2
Transform
Map each MerchantOps record onto whatever shape your system expects
(field names, units, identifiers).
3
Push to your system
Write the record into your destination — call its API, update your
database, drop a file, whatever your system needs.
4
Report the outcome
Tell MerchantOps whether each record succeeded, failed, or was skipped.
Reported records drop out of the next poll; unreported ones come back so
you can retry.
Today the pull-based connector API covers pricing publishing — the loop
applies to price records routed to your target. For catalog publishing, use a
built-in connector such as VTEX.
In Settings › Publish Targets, add an integration for your custom
target with a target key (for example custom) and a poll delivery
mode. No credentials for your system are stored on the MerchantOps side —
your connector authenticates to your system itself.
2
Create an API key
In Settings › API Keys, create a key scoped to your organization with
the two publishing scopes:
Scope
Purpose
pricing.publish.outcome.read
Poll for pending records
pricing.publish.outcome.write
Report outcomes
3
Run your connector
Your service holds the key and calls MerchantOps over HTTPS with:
Authorization: Bearer <your-api-key>
The key is organization-scoped — your connector only ever sees records that
belong to your organization.
Records are deduplicated by outcome state: once you report an outcome for a
record, it drops out of this query. A recommended cadence is a poll every
30–60 seconds, backing off to a few minutes when the response is empty.
batch_final_status is null while other records in the batch are still in
flight, and becomes "published" or "partial" when your outcome is the one
that finishes the batch.
Isolation. Your connector talks to MerchantOps only over HTTPS. No shared
infrastructure, no special client libraries.
Org scoping. Your key can only read and update your organization’s
records — there’s no way to affect another tenant.
The same monitoring surface. Your publishes appear in
publish status exactly like built-in
connectors: per-target breakdown, per-record outcomes, and job progress.
Rate-limit yourself to roughly two polls per second per connector. Running
multiple connectors for the same target at once can hand you duplicate records
(there is no per-worker record lease yet), so run a single connector per target
for now.