Skip to content

Public Articles Bulk Upsert

Request

Bulk-upsert articles (async).

Accepts up to 100,000 articles per call. The body is validated synchronously; the actual upsert runs out-of-band on a worker.

Response.

  • 202 Accepted with JobAck { job_id, status_url } on the first call.
  • 200 OK with the same JobAck on an idempotent replay (same Idempotency-Key + same body). No second job runs.

What to do next. Poll GET /jobs/{job_id} (the status_url is the canonical path) until status is COMPLETED or FAILED. A COMPLETED job with error_count > 0 means some rows failed — see errors[] for the per-row detail. The Jobs chapter has the full polling guide.

Idempotency. Pass an Idempotency-Key header (≤ 255 chars). Same key with a different body returns 422 IDEMPOTENCY_KEY_MISMATCH.

Headers
authorizationstring or null(Authorization)

Bearer <mrc_live_…> API key

Idempotency-Keystring or null(Idempotency-Key)

Optional client-supplied key for safe retries; <= 255 chars

Bodyapplication/jsonrequired
articlesArray of objects, [ 1 .. 100000 ] items(Articles)required
Example:
[ { "article_number": "LEU-1500-50-840", "category": "Feuchtraumleuchte", "custom_attributes": {}, "delivery_quantity": "1", "description": "LED-Feuchtraumwannenleuchte, 1500 mm, 50 W, 6500 lm, 4000 K neutralweiß, Schutzart IP65, Polycarbonat-Gehäuse, inkl. Durchgangsverdrahtung.", "ean_number": "4260001234562", "etim_features": [], "list_price": "89.90", "manufacturer": "Lumaris", "manufacturer_article_number": "LM-DP1500-50", "name": "LED-Feuchtraumleuchte 1500 mm 50 W 4000 K IP65", "series": "AquaLine PRO", "tags": [], "unit": "Stk" }, { "article_number": "LEU-1200-30-840", "category": "Feuchtraumleuchte", "ean_number": "4260001234579", "etim_features": [], "list_price": "69.90", "manufacturer": "Lumaris", "manufacturer_article_number": "LM-DP1200-30", "name": "LED-Feuchtraumleuchte 1200 mm 30 W 4000 K IP65", "series": "AquaLine PRO", "tags": [], "unit": "Stk" } ]
curl -i -X POST \
  https://docs.mercura.ai/_mock/openapi/articles \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: string' \
  -H 'authorization: string' \
  -d '{
    "articles": [
      {
        "article_number": "LEU-1500-50-840",
        "category": "Feuchtraumleuchte",
        "custom_attributes": {
          "lichtfarbe": "4000K",
          "lichtstrom_lm": "6500",
          "schutzart": "IP65"
        },
        "delivery_quantity": "1",
        "description": "LED-Feuchtraumwannenleuchte, 1500 mm, 50 W, 6500 lm, 4000 K neutralweiß, Schutzart IP65, Polycarbonat-Gehäuse, inkl. Durchgangsverdrahtung.",
        "ean_number": "4260001234562",
        "etim_features": [
          {
            "etim_code": "EF000008",
            "human_label": "Nennspannung",
            "type": "number",
            "value_number": 230
          },
          {
            "etim_code": "EF000131",
            "human_label": "Mit Anschlussleitung",
            "type": "boolean",
            "value_boolean": true
          }
        ],
        "list_price": "89.90",
        "manufacturer": "Lumaris",
        "manufacturer_article_number": "LM-DP1500-50",
        "name": "LED-Feuchtraumleuchte 1500 mm 50 W 4000 K IP65",
        "series": "AquaLine PRO",
        "tags": [
          "LED",
          "Eigenmarke"
        ],
        "unit": "Stk"
      },
      {
        "article_number": "LEU-1200-30-840",
        "category": "Feuchtraumleuchte",
        "ean_number": "4260001234579",
        "etim_features": [
          {
            "etim_code": "EF000056",
            "human_label": "Leistungsbereich",
            "type": "range",
            "value_range": {
              "gte": 18,
              "lte": 30
            }
          }
        ],
        "list_price": "69.90",
        "manufacturer": "Lumaris",
        "manufacturer_article_number": "LM-DP1200-30",
        "name": "LED-Feuchtraumleuchte 1200 mm 30 W 4000 K IP65",
        "series": "AquaLine PRO",
        "tags": [
          "LED"
        ],
        "unit": "Stk"
      }
    ]
  }'

Responses

Idempotent replay — same job returned

Bodyapplication/json
job_idstring(Job Id)required
Example:"4242"
status_urlstring(Status Url)required

Relative URL to poll for this job's status

Example:"/api/public/v1/jobs/4242"
Response
{ "job_id": "4242", "status_url": "/api/public/v1/jobs/4242" }