Recursos

Publicar productos

El endpoint principal de escritura. Crea un job asíncrono que la API procesa en segundo plano. Cada job puede tener hasta 10.000 items.

Crear un job de publicación

POST/v2/products
Probar en sandbox
scopeproducts:writeidempotent

Por cada item indica el SKU y la categoría — o le pide a Automeli que la infiera con auto_categorize: true. Ambas opciones son excluyentes.

RequestPOST /products
curl -X POST "https://api.automeli.com/api/v2/products" \
     -H "X-API-Key: automeli_live_..." \
     -H "Content-Type: application/json" \
     -d '{
  "items": [
    { "sku": "B003H03SDQ", "ml_category_id": "MCO420674" },
    { "sku": "B07JHNJLYH", "auto_categorize": true }
  ],
  "ml_listing_type": "gold_pro",
  "automeli_tax_category": 0
}'
202Response

Job aceptado. Devuelve el job_id para hacer seguimiento. Para conciliar: accepted / total_items incluyen los SKUs que quedaron duplicate (ya publicados y vivos, o ya en cola en otro job) y no se publican — lo que realmente se publica es queued (accepted = queued + duplicates; ambos vienen siempre, con 0 incluido). Si todo el lote era duplicado, el job nace directamente completed.

{
  "job_id": "8a3f2b10-4c9d-4e21-9f8a-1b2c3d4e5f60",
  "status": "queued",
  "name": "8 may 2026, 12:00:00",
  "accepted": 2,
  "rejected": 0,
  "total_items": 2,
  "queued": 2,
  "duplicates": 0
}
El modo de prueba lo decide el environment de su API Key, no el body. Si su key es automeli_test_* el job publica en la cuenta de prueba y descuenta créditos de prueba.
Conciliación: accepted incluye los SKUs que quedaron duplicate (ya publicados y vivos, o ya en cola en otro job) y no se publican ni consumen crédito. Lo que realmente se publica es queued (accepted = queued + duplicates). Si todo el lote era duplicado, el job nace directamente completed.

Campos del body

items
array (1-10.000)requerido
Cada item: sku + (ml_category_id o auto_categorize). Los SKUs repetidos dentro del mismo body se deduplican en silencio.
items[].sku
stringrequerido
10 caracteres alfanuméricos (ASIN de Amazon).
items[].ml_category_id
stringcondicional
Categoría de Mercado Libre para ese SKU, formato MCO420674. Es por item. Excluyente con auto_categorize.
items[].auto_categorize
booleancondicional
Automeli infiere la categoría desde el ASIN. Excluyente con ml_category_id.
ml_listing_type
stringopcional
Tipo de publicación de Mercado Libre, a nivel job. Si lo omite se usa gold_special (Clásica). Valores: gold_pro (premium con cuotas), gold_special (clásica), más legacy gold_premium / gold / silver / bronze aceptados por compatibilidad. ¿Cuál elijo? →
automeli_tax_category
intopcional
Índice (no nombre) de la categoría fiscal del seller, a nivel job. Default 0 (primera). Para ver los índices → GET /v2/account/tax-categories.
scheduled_for
stringopcional
Programa la publicación a una hora futura. Formato YYYY-MM-DDTHH:MM en UTC, sin segundos ni offset. Entre 5 minutos y 30 días en el futuro. Ver guía de programación →
Créditos y jobs concurrentes. Si no le alcanzan los créditos para todos los SKUs, el job se crea igual con los que sí alcanzan y la respuesta trae rejected y un warning. Si ya tiene 6 jobs en queued/processing, la llamada responde 429 E_PRODUCT_MAX_CONCURRENT_JOBS.
Errores posibles de este endpoint (13)
E_AUTH_MISSING_KEY

Falta el header X-API-Key

401
E_AUTH_INVALID_KEY

Key con formato inválido o no reconocida

401
E_AUTH_FORBIDDEN_SCOPE

Su key no tiene el permiso requerido (ver scopes)

403
E_RATE_LIMITED

Excedió el rate limit. Ver Retry-After

429
E_IDEMPOTENCY_CONFLICT

Misma Idempotency-Key con body distinto

409
E_PRODUCT_INVALID_BODY

Body malformado o con campos inválidos (POST/PATCH)

422
E_PRODUCT_INVALID_SKU

SKU no cumple regex (10 alfanum)

422
E_PRODUCT_CREDIT_EXHAUSTED

Sin créditos disponibles

400
E_PRODUCT_MAX_CONCURRENT_JOBS

Ya tiene 6 jobs activos

429
E_CATEGORY_INVALID

La categoría de Mercado Libre no cumple el formato (MCO…)

422
E_CATEGORY_AND_AUTO_CONFLICT

Un item manda la categoría y auto_categorize a la vez

422
E_ACCOUNT_NOT_FOUND

Cuenta Meli no encontrada

404
E_INTERNAL

Error inesperado. Reintente con backoff

503

Guías relacionadas