Models
The Channel account object
Every field of the Channel account object, with types, required flags and validation rules.
ChannelAccount
| Field | Type | Description |
|---|---|---|
id | string | Opaque. Kept when an expired login is reconnected (channel_account_id). Disconnecting removes it: connecting that account again gives a NEW id, the old one answers 404 channel_account_not_found, and the listings it had now carry the new id in channel_account_id. e.g. chac_66a1f09b2 |
object | string | always channel_account |
channel | string | Base channel (e.g. ebay, shopify, etsy). New channels appear over time. e.g. ebay |
label | string | Display name of the channel. e.g. eBay |
currency | string · nullable | ISO 4217 currency the shop sells in (e.g. USD for an eBay.com account, GBP on OnBuy), looked up when the account connects; for accounts connected earlier, at the first read of the account (the read waits for it). null = not known: the channel has no single currency (Meta, Pinterest), or it couldn't be read (then a currency_unknown warning says so). Nembol publishes the store's prices as numbers, with no conversion. e.g. USD |
warnings | array of object | Things to fix on this account that don't stop it. Today: currency_mismatch, when currency differs from the store's currency (GET /store): 19.90 EUR is published as 19.90 USD; and currency_unknown, when Nembol couldn't read the shop's currency (check it matches the store's). Set a price rule (pricing.mode / pricing.value) to adjust. The same warning appears in the issues of its listings |
warnings[].code | string | e.g. currency_mismatch |
warnings[].message | string | |
shop_name | string · nullable | The seller's account/shop name on the channel. e.g. carboagez |
status | string | one of: connected, error, disconnected |
sync | object | The seller's per-channel sync switches. A newly connected account has every switch off (false), on every channel and through the API as in the dashboard: turn on the ones you need with PATCH. null means the switch isn't there: the channel doesn't have it, or an older account never stored it (it then behaves as off). Only the switches listed in writable can be changed. See the guide "Edit a product: what actually reaches the channels" |
sync.product_edits | boolean · nullable | When false, Nembol pushes only quantity to this channel (content and price stay channel-side) |
sync.quantity_from_orders | boolean · nullable | Sales on this channel adjust stock everywhere |
sync.quantity_from_channel_edits | boolean · nullable | Channel-side quantity edits flow into Nembol |
sync.content_from_channel_edits | boolean · nullable | This channel is the content leader (at most one channel per store): its title/description edits become the product's and replace every listing's own texts (overrides). To keep a channel's content untouched, turn off content updates for that channel |
sync.transfer_orders | boolean · nullable | Orders received on this channel are transferred to the store's fulfillment channel (at most one channel per store) |
pricing | object | Per-channel price rule applied when Nembol pushes prices to this channel |
pricing.mode | string | percentage: price × (1 + value/100). absolute: price + value (in the store currency). Negative values lower the price. One of: off, percentage, absolute |
pricing.value | number · nullable | The adjustment; null when mode is off |
pricing.rounding | boolean · nullable | Round the pushed price to the nearest whole amount minus 0.01 (e.g. 21.37 → 20.99) |
inventory | object | Per-channel stock control, active when control is true. On channels that receive quantities (eBay, Etsy, Faire…) threshold is a cap: the channel shows at most that many units (threshold 5 with 40 in stock → 5). On Google Merchant Center, which only receives availability, it is a minimum: the product shows in stock only while quantity ≥ threshold |
inventory.control | boolean · nullable | |
inventory.threshold | integer · nullable | The cap; null while control is off |
defaults | object | The channel objects new listings use by default. Present only for channels that have them (eBay: shipping/return/payment policy; Etsy: shipping/return policy; Shopify: collection). null = not picked yet. Ids come from GET .../policies and GET .../collections |
defaults.shipping_policy | string · nullable | e.g. pol_6178493000 |
defaults.return_policy | string · nullable | |
defaults.payment_policy | string · nullable | |
defaults.collection | string · nullable | e.g. col_344508170434 |
policy_validation | object · nullable | eBay only. eBay's verdict on the selected policies, checked with a dry-run listing every time they change. valid: false means publishing will fail until another policy is picked |
policy_validation.valid | boolean | |
policy_validation.invalid_policies | array of string | |
policy_validation.message | string · nullable | |
policy_validation.checked_at | string · nullable | ISO 8601 |
writable | array of string | Dotted paths this account accepts in PATCH /channel_accounts/{id} (e.g. sync.transfer_orders, defaults.collection). e.g. sync.product_edits,pricing.mode,pricing.value,inventory.threshold,defaults.shipping_policy |
discovery | object | Which discovery endpoints this channel supports |
discovery.categories | boolean | Reserved: always false until category discovery is available |
discovery.attribute_schema | boolean | Reserved: always false until category discovery is available |
discovery.policies | boolean | |
discovery.collections | boolean |
Policy
| Field | Type | Description |
|---|---|---|
id | string | e.g. pol_6178493000 |
object | string | always policy |
type | string | one of: shipping, return, payment |
name | string | e.g. Standard shipping EU |
marketplace | string · nullable | The marketplace the policy belongs to (eBay site, e.g. US); null where the channel has a single marketplace. e.g. US |
Collection
| Field | Type | Description |
|---|---|---|
id | string | e.g. col_344508170434 |
object | string | always collection |
name | string | e.g. Summer 2026 |
Request models
What you send when creating or updating. Fields not listed are ignored.
ChannelAccountUpdate
Any subset of the account's settings. Only the paths listed in the account's writable are accepted. null is accepted where the read model can return it, so an event's previous_attributes can always be sent back as-is: a null switch is left unchanged, a null pricing.value / inventory.threshold is valid only while the mode / control is off, a null default clears it.
| Field | Type | Required | Description |
|---|---|---|---|
sync | object | optional | |
sync.product_edits | boolean · nullable | optional | |
sync.quantity_from_orders | boolean · nullable | optional | |
sync.quantity_from_channel_edits | boolean · nullable | optional | |
sync.content_from_channel_edits | boolean · nullable | optional | Turning it on turns it off on every other account |
sync.transfer_orders | boolean · nullable | optional | Turning it on turns it off on every other account |
pricing | object | optional | |
pricing.mode | string | optional | one of: off, percentage, absolute |
pricing.value | number · nullable | optional | Required (non-zero) when turning a mode on. Percentage must be > -100 and ≤ 1000 |
pricing.rounding | boolean · nullable | optional | |
inventory | object | optional | |
inventory.control | boolean · nullable | optional | |
inventory.threshold | integer · nullable | optional | min 0 |
defaults | object | optional | |
defaults.shipping_policy | string · nullable | optional | A shipping policy id; null clears it (the channel then needs one before publishing) |
defaults.return_policy | string · nullable | optional | A return policy id; null clears it |
defaults.payment_policy | string · nullable | optional | A payment policy id (eBay); null clears it |
defaults.collection | string · nullable | optional | A collection id (Shopify); null = no collection |
Last updated on October 18, 2026
Need help?
Email us and a human replies, usually within one business day.