Version historyChanged
A restore leaves out a taken slug and keeps the variants when none of the version's is left
Restore a version
Restore a version ·POST /api/v1/orgs/{orgId}/core/history/{versionId}/restore- A slug another product holds now no longer refuses the restore with
409: the product keeps its own slug, the rest is restored, andnotRestoredanswers it ascatalog.slug_takenwith itsslug. - A version none of whose variants the product still holds no longer refuses the restore with
422: the product keeps its options and variants, the rest is restored, andnotRestoredanswers each of the version’s variants ascatalog.variant_deletedwith itsvariantId.
Create a product
Create a product ·POST /api/v1/orgs/{orgId}/catalog/products- Its
warningsno longer holdcatalog.map_below_costorcatalog.msrp_below_cost: a cost above the MAP or the MSRP is warned once, ascatalog.cost_above_maporcatalog.cost_above_msrp.
Update a product
Update a product ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}- Its
warningsno longer holdcatalog.map_below_costorcatalog.msrp_below_cost: a cost above the MAP or the MSRP is warned once, ascatalog.cost_above_maporcatalog.cost_above_msrp.
Update a product’s prices
Update a product’s prices ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}/prices- Its
warningsno longer holdcatalog.map_below_costorcatalog.msrp_below_cost: a cost above the MAP or the MSRP is warned once, ascatalog.cost_above_maporcatalog.cost_above_msrp.
Set a product’s status
Set a product’s status ·PUT /api/v1/orgs/{orgId}/catalog/products/{productId}/status- Its
warningsno longer holdcatalog.map_below_costorcatalog.msrp_below_cost: a cost above the MAP or the MSRP is warned once, ascatalog.cost_above_maporcatalog.cost_above_msrp.
Duplicate a product
Duplicate a product ·POST /api/v1/orgs/{orgId}/catalog/products/{productId}/duplicate- Copies a product as a new draft titled with (Copy), then (Copy 2) and so on, with its description, options and variants with their prices, costs, measures and stock settings, and answers
201with the copy. - The copy’s variants hold no identifiers: no SKU, GTIN, ISBN, part number or custom code.
- Needs the permission to duplicate products, and honors an
Idempotency-Key.
List a record’s versions
List a record’s versions ·GET /api/v1/orgs/{orgId}/core/history- Lists a product’s versions with
type=catalog.productand the product’s id: one when it is created, and one for each save of its content, prices or status that changes something, kept 30 days and up to 200.
Restore a version
Restore a version ·POST /api/v1/orgs/{orgId}/core/history/{versionId}/restore- Restores a product to one of its versions, with the
expectedVersionit was read at, as one save of its content, prices, status, codes, measures, customs data and stock tracking; its on-hand and supplier stock stay as they are. - Restoring other prices also needs the permission to edit prices, another status the one to set a product’s status, and removing a variant added since the one to delete variants.
- Answers in
notRestoredwhat it leaves out: a variant deleted since, ascatalog.variant_deletedwith itsvariantId, and a SKU, GTIN or ISBN another product holds now, ascatalog.identifier_takenwith itstypeandvalue.
Delete a product
Delete a product ·DELETE /api/v1/orgs/{orgId}/catalog/products/{productId}- Deletes a product for good with all its variants and answers
204; its listings in every store are released, and it cannot be undone. - Needs the permission to delete products.
Set a product’s status
Set a product’s status ·PUT /api/v1/orgs/{orgId}/catalog/products/{productId}/status- Sets a product to
draft,active,unlistedorarchived, from any other, with theexpectedVersionit was read at; a product saved since then answerscore.version_conflict, and the status it already has changes nothing. - Needs the permission to set a product’s status, apart from the one to edit products.
Create a product
Create a product ·POST /api/v1/orgs/{orgId}/catalog/products- Takes the product’s
descriptionHtml, its description in HTML. It keeps paragraphs, headings, lists and task lists, quotes, code blocks, images, tables, rules, line breaks, links, text styles, colour, highlight, alignment, and YouTube, Vimeo or video embeds; anything else, such as a script, an event attribute or another site’s frame, is removed and its text kept, and a description left with nothing is saved as none.
Update a product
Update a product ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}- Takes the same
descriptionHtml, kept when left out and cleared bynull.
Get a product
Get a product ·GET /api/v1/orgs/{orgId}/catalog/products/{productId}- Holds the product’s
descriptionHtmlas it was saved,nullwhen it has none.
Update a product’s prices
Update a product’s prices ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}/prices- The answer holds the product’s
descriptionHtml, as getting a product reads it.
Create a product
Create a product ·POST /api/v1/orgs/{orgId}/catalog/products- Each variant takes its
productWeight,productLength,productWidth,productHeight,shippingWeight,shippingLength,shippingWidthandshippingHeight, each avaluewith itsunit(g,kg,oz,lborctfor a weight,mm,cm,inorydfor a dimension); avalueof 0 is saved as none, and one too small or too large to keep answers422 catalog.measure_out_of_range. - Each variant takes its
countryOfOrigin, a two-letter code in any case such asmx, saved asMX(422 catalog.country_invalidotherwise), and itshsCode, kept as its digits alone, such asHS 8544.49.30-80saved as8544493080, which must be 6 to 13 digits from 0 to 9 (422 catalog.hs_code_invalidotherwise). - Each variant takes
trackInventoryand, when tracked, itsfallbackStock, 0 when left out; afallbackStockfor an untracked variant answers422 catalog.stock_untracked.
Update a product
Update a product ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}- Each variant takes the same fields, each kept when left out and cleared by
null,trackInventoryaside, with the same four new codes; a variant no longer tracked has none of its three stocks.
Get a product
Get a product ·GET /api/v1/orgs/{orgId}/catalog/products/{productId}- Each variant holds its eight measures in the unit each was given in,
nullwhere it has none, itscountryOfOrigin, itshsCode, itstrackInventoryand itsonHandStock,supplierStockandfallbackStock.
Update a product’s prices
Update a product’s prices ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}/prices- Each variant of the answer holds its eight measures, its
countryOfOrigin, itshsCode, itstrackInventoryand its three stocks, as getting a product reads them.
Update a product’s prices
Update a product’s prices ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}/prices- Changes the
price,compareAt,map,msrp,onHandCost,supplierCostandfallbackCostof the variants it names byid, each a decimal string in the variant’s currency such as"19.99",nullclearing it; a variant left out keeps its money. It needs the permission to edit prices, apart from the one to change a product’s content, and theexpectedVersionthe product was read at. - Refuses a compare-at price below the price (
422 catalog.compare_below_price), a price below the cost, the on-hand cost or else the supplier’s (422 catalog.price_below_cost), and a MAP above the MSRP (422 catalog.map_above_msrp), each only when the update changes one of its prices. Answers422 catalog.price_invalidfor an amount that is no number or has more decimals than its currency, and422 catalog.price_out_of_rangefor one below 0 or too large. - Answers
ProductSaved, whosewarningsname each other price rule the update leaves broken, such ascatalog.price_below_map, and a price below a cost the update raised (catalog.price_below_cost).
Create a product
Create a product ·POST /api/v1/orgs/{orgId}/catalog/products- Each variant takes the same seven amounts, which need the permission to edit prices (
403 core.forbiddenwithout it), and every price rule is checked: five new codes, and the price warnings.
Update a product
Update a product ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}- Each variant of the answer holds its
currencyand its seven amounts as decimal strings in it,nullwhere it has none.
Get a product
Get a product ·GET /api/v1/orgs/{orgId}/catalog/products/{productId}- Each variant holds its
currencyand its seven amounts as decimal strings in it,nullwhere it has none.
Get a free SKU
Get a free SKU ·GET /api/v1/orgs/{orgId}/catalog/products/free-sku- Answers
{ sku }, a SKU no variant of the organization holds, three letters, three digits and three letters such asKMT-472-BXR, without the letters I, L and O or the digits 0 and 1. It is not reserved: give it to a variant when creating or updating a product, which answers409 catalog.identifier_takenif another variant took it first.
Create a product
Create a product ·POST /api/v1/orgs/{orgId}/catalog/products- Each variant takes
identifiers, a list in order of{ type, value },typeone ofsku,gtin,isbn,mpn(the part number) orcustom, and alabelfor a custom code alone. Spaces are trimmed and collapsed; a GTIN or an ISBN is stored without spaces or hyphens, its check digit verified. - Answers
ProductSaved: the product, andwarnings, a list of{ code, params }.catalog.part_number_similarwarns when another product holds a part number that differs only in punctuation, such as hyphens or spaces, and never stops the save. - Answers
422 catalog.identifier_invalidwith the variant, the code’s place, its type and the reason;422 catalog.identifier_repeatedfor a variant’s second SKU, a repeated code or a repeated custom label; and409 catalog.identifier_takenwhen another variant of the organization holds the SKU, GTIN or ISBN: three new codes.
Update a product
Update a product ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}- Each variant of
variantstakesidentifiers, which replace its codes whole ([]removes them all); a variant that leaves them out keeps its own. A code moved from one variant to another in the same update passes. - Answers
ProductSaved, with the samewarnings, and the same three new codes as creating a product.
Get a product
Get a product ·GET /api/v1/orgs/{orgId}/catalog/products/{productId}- Each variant holds
identifiers, each with itstype, its storedvalueand itslabel(nullbut for a custom code), in their order.
Update a product
Update a product ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}- Takes
optionsandvariants, each the whole list: send the ones you keep with theirid, new ones without, and leave out the ones to remove. Withoptionssent andvariantsleft out, a variant holding a value you removed goes with it. - Removing a variant also needs the permission to delete variants,
catalog.product.delete_variant: without it the update answers403 core.forbidden. - Answers
422 catalog.option_unknownand422 catalog.variant_unknown, two new codes, when anidis not one of the product’s, the same422codes as creating a product when the options and variants break its rules, and403 core.usage_limit_reachedwhen new variants pass your plan’s limit.
Update a product
Update a product ·PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}- Changes a product’s title, slug, condition, product type, meta title or meta description: a field left out stays as it is, and
nullclears the product type, the meta title or the meta description. - Takes the
expectedVersionthe product was read at, and answers the product with its newversion. - Answers
409 core.version_conflict, a new code, when the product was saved after you read it, and409 catalog.slug_takenwhen another product already uses the slug.
List products
List products ·GET /api/v1/orgs/{orgId}/catalog/products- Lists the organization’s products page by page, the most recently changed first or by title, with each one’s title, slug, status and number of variants.
- Searches the title and filters by status.
Get a product
Get a product ·GET /api/v1/orgs/{orgId}/catalog/products/{productId}- Reads one product with its options, their values and its variants.
Create a product
Create a product ·POST /api/v1/orgs/{orgId}/catalog/products- Creates a product with its options and its variants, each variant one combination of the option values.
- Refuses a product with no variant, a repeated option, value or combination, or more than 10 options, 250 values in an option or 2,000 variants, each with its own
422code. - Answers
409 catalog.slug_takenwhen another product already uses the slug, and403 core.usage_limit_reachedwhen the variants would pass the organization’s free allowance.
Each operation’s error response now also lists
403 core.module_not_enabled, when the organization
has not activated the module the operation belongs to, and 403 core.module_read_only, when that
module is read-only for the organization, with params.module naming it. These operations could
already answer both codes.Both codes join the error response of:- Get the calling credential ·
GET /api/v1/credential - Get the organization ·
GET /api/v1/orgs/{orgId}/core/org - Update the organization ·
PATCH /api/v1/orgs/{orgId}/core/org - Get the billing summary ·
GET /api/v1/orgs/{orgId}/core/billing - Get this month’s usage ·
GET /api/v1/orgs/{orgId}/core/billing/usage - List record types ·
GET /api/v1/orgs/{orgId}/core/dataio/adapters - Get a record type ·
GET /api/v1/orgs/{orgId}/core/dataio/adapters/{entity} - List imports ·
GET /api/v1/orgs/{orgId}/core/imports - Complete an upload ·
POST /api/v1/orgs/{orgId}/core/imports/uploads/{fileId}/complete - Write an import’s results ·
POST /api/v1/orgs/{orgId}/core/imports/{jobId}/results - Get a file’s status ·
GET /api/v1/orgs/{orgId}/core/files/{fileId} - List exports ·
GET /api/v1/orgs/{orgId}/core/exports - Rename an export ·
PATCH /api/v1/orgs/{orgId}/core/exports/{jobId} - List export templates ·
GET /api/v1/orgs/{orgId}/core/exports/templates - Create an export template ·
POST /api/v1/orgs/{orgId}/core/exports/templates - Update an export template ·
PATCH /api/v1/orgs/{orgId}/core/exports/templates/{templateId} - Delete an export template ·
DELETE /api/v1/orgs/{orgId}/core/exports/templates/{templateId} - Get a job ·
GET /api/v1/orgs/{orgId}/core/jobs/{jobId} - List a job’s messages ·
GET /api/v1/orgs/{orgId}/core/jobs/{jobId}/messages - Get a job’s file link ·
GET /api/v1/orgs/{orgId}/core/jobs/{jobId}/files/{file} - Cancel a job ·
POST /api/v1/orgs/{orgId}/core/jobs/{jobId}/cancel - Search records ·
GET /api/v1/orgs/{orgId}/core/search - List a record’s versions ·
GET /api/v1/orgs/{orgId}/core/history - Compare a version ·
GET /api/v1/orgs/{orgId}/core/history/{versionId} - Restore a version ·
POST /api/v1/orgs/{orgId}/core/history/{versionId}/restore - List incidents ·
GET /api/v1/orgs/{orgId}/core/incidents - Mark an incident read or unread ·
PUT /api/v1/orgs/{orgId}/core/incidents/{incidentId}/read - Resolve an incident ·
POST /api/v1/orgs/{orgId}/core/incidents/{incidentId}/resolve - List notifications ·
GET /api/v1/orgs/{orgId}/core/notifications - Mark a notification read or unread ·
PUT /api/v1/orgs/{orgId}/core/notifications/{notificationId}/read - Mark all read ·
POST /api/v1/orgs/{orgId}/core/notifications/read - List saved views ·
GET /api/v1/orgs/{orgId}/core/views - Create a saved view ·
POST /api/v1/orgs/{orgId}/core/views - Set a table’s default view ·
PUT /api/v1/orgs/{orgId}/core/views/default - Update a saved view ·
PATCH /api/v1/orgs/{orgId}/core/views/{viewId} - Delete a saved view ·
DELETE /api/v1/orgs/{orgId}/core/views/{viewId} - List store connections ·
GET /api/v1/orgs/{orgId}/integrations/connections - Connect a store ·
POST /api/v1/orgs/{orgId}/integrations/connections - Reconnect a store ·
PUT /api/v1/orgs/{orgId}/integrations/connections/{connectionId}/credentials - Disconnect a store ·
DELETE /api/v1/orgs/{orgId}/integrations/connections/{connectionId}
core.module_read_only joins the error response of this operation, which already listed
core.module_not_enabled:- Start an export ·
POST /api/v1/orgs/{orgId}/core/exports
The developer site opens with the API reference and this changelog,
in English and Spanish. Every operation is in beta until launch, so it may still change: each
change is listed here, with the operations it touches.