# Supplier data into Ergonode, mapped visually

Ergonode is GraphQL only, and every attribute kind has its own typed mutation. SDM Portal knows which one to use, writes your variants in the order Ergonode requires, and replays the same rules on every file that supplier sends.

Web version: https://sdmportal.com/ergonode/

## The connection

- **Protocol:** GraphQL only, /api/graphql/
- **Auth:** API key in an X-API-KEY header
- **Structure:** Template
- **Writes:** Aliased GraphQL mutations, 25 operations per request
- **Variants:** Simple products first, then the variable product with bindings
- **Delta sync:** Hash per write operation

## Where an Ergonode supplier feed actually gets stuck

### Every kind has its own mutation

Text, numeric, select, multi select, unit, price and relation each need a different typed mutation. Send a value through the wrong one and Ergonode answers with an unknown error and no detail.

### Variants need an order

Children have to exist before the variable product can bind them. Get the order wrong and the bindings fail.

### Status is a graph, not a field

Ergonode validates workflow transitions server-side, so you cannot simply set the status you want from wherever the product is now.

## How SDM Portal writes into Ergonode

### Template-scoped mapping

Pick the template and the attribute rail scopes to its attributes. Templates carry no display name in the API, so the picker shows the template code. The built-in SKU is not part of the attribute stream, so a field named esa_sku is injected and you map SKU like any other column.

### Typed writes, resolved live

Text, textarea and date go out as a string, numeric, price and unit as a float, select as an option code, multi select as a list of option codes and a relation as a list of SKUs. The kind comes from your live catalog, not from the shape of the value, so an article number that looks numeric still lands as text.

### Values per locale

Locale is a property of the connection you draw. Three description columns feed one attribute in three languages, and the run language decides the default.

### Variants with axes and bindings

Mark a parent key, one or more variant axes and the variant SKU on source columns. Simple products are created first, then the variable product with its bindings, which is the order Ergonode requires. Axis values that pass through a ValueMap still resolve to binding codes.

### Workflow status by shortest path

Because Ergonode enforces the transition graph, the shortest path from the product's current status to the one you mapped is computed and walked step by step instead of set in one jump.

### Categories from several taxonomies

A flow can hold more than one taxonomy node. Each maps a source value to a category, and a product gets the deduped union of everything that resolved, in one category call.

### Options, created and enriched

Missing options are created with a short suggested code, lowercased, that you can edit per value. Option custom fields of type text, textarea and rich text can be filled from other columns in the same row, so the long care text lands in a custom field while the option keeps a readable name. Option names cap at 255 characters.

### New attributes from the editor

Create text, textarea, numeric, date, select, multi select, unit, price and relation attributes from the canvas. Ergonode has no API to add an attribute to a template, so a created attribute is instance-wide and you add it to the template in Ergonode itself. The editor tells you this at the moment you create one.

### Batches that survive a bad cell

Writes go out as aliased GraphQL mutations, 25 operations per request, paced. One rejected value can fail a whole batched document, so a batch in which every operation failed with the same error is retried one operation at a time. Only the real offender fails, and Ergonode's own validation detail is shown on the row.

### Soft failures stay soft

A value like nvt on a numeric attribute is skipped with a warning naming the SKU. A duplicate value on a unique attribute, such as a shared customs code, is recorded as a skip rather than failing the product. A relation to a SKU that does not exist yet is dropped from that write and named in the warning, so the rest of the relation still lands.

## What we can write into Ergonode

Select and multi select map to option codes, and missing options can be created and enriched. A price attribute is a single float whose currency is configured on the attribute inside Ergonode, and a unit attribute reads its symbol from the attribute.

- Text
- Textarea
- Numeric
- Date
- Select
- Multi select
- Unit
- Price
- Product relation
- Categories
- Workflow status
- Variant bindings

## What the Ergonode connector does not do yet

### Images, galleries, files (not writable)

Media attributes are visible in the rail but not written. Option custom fields of type image are filtered out for the same reason.

### Prices (single currency)

An Ergonode price attribute holds one float and its currency is configured on the attribute inside Ergonode. Per-edge currency, where several columns merge into one collection, is an Akeneo feature.

### Grouping products (out of scope)

Simple and variable products only. Grouping products are not created.

### Adding an attribute to a template (manual step)

Ergonode has no API for it. An attribute created from the editor exists instance-wide, and you add it to the template in Ergonode before it appears in the scoped rail.

### Option names over 255 characters (api limit)

Ergonode refuses longer option names with an opaque error, so names are truncated at 255. Put the full text in an option custom field.

### Template names (cosmetic)

The Ergonode API returns no display name for a template, so pickers and warnings show the template code.

## FAQ

### How does SDM Portal connect to Ergonode?

Ergonode exposes GraphQL only, at /api/graphql/. You add the instance URL and an API key, which is sent as an X-API-KEY header, and the connection is verified with a live handshake. The key is stored encrypted and is never part of an exported mapping.

### Does SDM Portal handle Ergonode variants?

Yes. You mark the parent key, the variant axes and the variant SKU on source columns. Simple products are created first and then the variable product with its bindings, which is the order Ergonode requires. Axis values that run through a ValueMap still resolve to binding codes.

### Can it set the Ergonode workflow status?

Yes. Ergonode validates status transitions server-side, so SDM Portal computes the shortest path from the product's current status to the one you mapped and walks it step by step.

### How does one bad cell not fail a whole batch?

Writes are batched as aliased GraphQL mutations, 25 operations per request. A single rejected value can fail the whole batched document, so a batch in which every operation failed with the same error is retried one operation at a time. Only the real offender fails, and the reason Ergonode returned is shown on the row.

### Will a second run push everything again?

No. Every write is hashed per operation, so a re-run of an unchanged file reports the products as unchanged and writes nothing. A force full resync is there for the times you do want everything pushed again.

## Get started

Try free for 14 days: https://app.sdmportal.com/signup?lang=en

Other PIMs: https://sdmportal.com/ergonode/ · https://sdmportal.com/akeneo/ · https://sdmportal.com/pimcore/

SDM Portal.
