Marketplace products

Publish marketplace product content

Queues the publication of the content alone, with no offer.

POST
/v1/marketplace-products/{marketplaceProductId}/publish

Publish listing

  • MockDevelopment only
  • Mercado LivreNot supported
  • MagaluPlanned
  • AmazonPlanned
  • TikTok ShopPlanned
  • ShopeePlanned

Publishes title, description, attributes, media, and variants, with no price or stock. It is an asynchronous order: the 202 response carries a Job; follow it in Jobs.

mode (default auto) chooses between create and update. These errors come before the Job, as 409 CONFLICT:

  • create on an already published product: details.reason equal to marketplace_product_published.
  • update on a never published product: marketplace_product_unpublished.
  • Product with no variants: marketplace_product_without_variants.

While the Job runs, publicationState is pending. At the end it becomes clean (or dirty, if the content changed during the Job) or failed, and each step emits marketplace_product.updated. If the Connection does not offer listings.publish, it responds 422 CAPABILITY_UNSUPPORTED without creating a Job; check the capabilities.

Authorization

api_key
headerAuthorizationBearer <token>

API key (mk_...)

Path Parameters

marketplaceProductId*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

Header Parameters

Idempotency-Key?string

Optional. A unique value (for example a UUID), 1 to 255 characters, that makes the request safe to retry: repeating it with the same body within 24h returns the original response with Idempotency-Replayed: true instead of running the operation again. Scoped to your account. Reusing it with a different body returns 409.

Length1 <= length <= 255

Request Body

application/json
  1. body

Asynchronous publication of the content alone: title, pictures, attributes and variations. Every offer of this marketplace product sells the new content; no offer field is sent.

mode?string

Whether the marketplace should create the content (create), update it (update), or decide by whether it was published (auto).

Default"auto"
Value in"auto""create""update"

Response Body

The queued job. The marketplace product is pending until it ends; no offer field is sent.

application/json
  1. response

A job: an operation that runs in the background, tracked by id.

id*string

Opaque unique identifier of the job, generated by the API. Use it in the /v1/jobs/{id} routes.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
sellerId*|

The seller the job works for. null for a job of the whole account.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
type*string

What the job does. connection.sync: first sync of a new connection. listing.publish and listing.remove: publish a listing to the marketplace or remove it there. listing.import and listing.reconcile: read the listings of a connection from the marketplace into their observed state. inventory.publish: send stock quantities to the marketplace. marketplace_product.publish: publish the content of a marketplace product alone, without any offer field. order.import and order.reconcile: read the orders of a connection from the marketplace into marketapi.

Value in"connection.sync""listing.publish""listing.remove""listing.import""listing.reconcile""inventory.publish""marketplace_product.publish""order.import""order.reconcile"
status*string

State of the job. queued: waiting. running: in progress. completed: every item succeeded. partial: some items failed. failed: no item succeeded.

Value in"queued""running""completed""partial""failed"
total*integer

Items in the job.

Range0 <= value <= 9007199254740991
processed*integer

Items already processed, succeeded or failed.

Range0 <= value <= 9007199254740991
succeeded*integer

Items that succeeded.

Range0 <= value <= 9007199254740991
failed*integer

Items that failed.

Range0 <= value <= 9007199254740991
input*

What the job was asked to do, by type. connection.sync, listing.import and listing.reconcile: { connectionId }. listing.publish: { listingId, mode }. listing.remove: { listingId, publication }. inventory.publish: { source }. marketplace_product.publish: { marketplaceProductId, mode }. order.import: { connectionId, placedFrom, placedTo }, with the period resolved to instants even when the request gave none. order.reconcile: { connectionId }.

result*|

Summary of the outcome, when the type has one. null otherwise.

error*|

Why the job failed, when it failed as a whole. null otherwise; the error of each item is in its items.

startedAt*|

When it started running, in ISO-8601 (UTC). null while queued.

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Formatdate-time
finishedAt*|

When it finished, in ISO-8601 (UTC). null while queued or running.

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Formatdate-time
createdAt*string

When the job was created, in ISO-8601 (UTC).

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Formatdate-time
updatedAt*string

When the job last changed, in ISO-8601 (UTC).

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Formatdate-time
curl -X POST "https://example.com/v1/marketplace-products/497f6eca-6276-4993-bfeb-53cbbbba6f08/publish" \  -H "Content-Type: application/json" \  -d '{    "mode": "auto"  }'
{  "id": "7c6b5a49-3827-4615-a0b9-c8d7e6f5a4b3",  "sellerId": "3d1c8a52-7f0e-4b0a-8a65-9c1b2f6d7e01",  "type": "connection.sync",  "status": "completed",  "total": 1,  "processed": 1,  "succeeded": 1,  "failed": 0,  "input": {    "connectionId": "9a1b2c3d-4e5f-4a6b-8c7d-0e1f2a3b4c5d"  },  "result": null,  "error": null,  "startedAt": "2026-10-06T14:32:01.000Z",  "finishedAt": "2026-10-06T14:32:01.500Z",  "createdAt": "2026-10-06T14:32:00.000Z",  "updatedAt": "2026-10-06T14:32:01.500Z"}