- Inventory management solution release notes
- Commercial pricing solution release notes
- June 2026
- May 2026
- April 2026
- Merchandising solution release notes
Supply Chain & Retail Solutions release notes
June 3, 2026
New: Integration walkthrough
A new Integration walkthrough page in the API Guide walks customer IT teams, solution engineers, and support engineers through the four stages of integrating with the Data Ingestion API: extract, transform, align field names, and batch + send. Each stage has the relevant API calls embedded inline — GET /api/v2/schema/solutions to confirm what's rolled out, POST /api/v2/objects/{objectName} for ingesting batches (with a dryRun variant), and POST /api/v2/schema/{objectName}/add-attribute for adding tenant-specific columns — alongside Snowflake COPY INTO and Redshift UNLOAD recipes for the extract step. Designed as a single one-stop guide rather than scattered references.
Cross-links between User Guide datasets and API Guide tables
Every Commercial Pricing dataset page in the User Guide and its matching resource page in the API Guide now carry a short cross-link to each other. Readers can jump from business context (purpose, usage notes) to the canonical technical schema (data types, validation rules, request/response examples) in one click, in either direction. The two guides remain separate — the cross-links just make navigation between them explicit. Affects the customer, merchant, project, list price, product cost, competitor price, quote line, sale, region, and product pages.
Bulk-ingest guide: folder-load sort order spelled out
The Historical data ingestion guide's "File or folder?" section now spells out the folder-load sort-order rules. Lexicographic sort gives the right order when filenames encode order as zero-padded numbers (part-0001.csv) or ISO-style date prefixes (2024-06-01.csv) — both forms warehouse exports produce by default. It gives the wrong order for non-padded part numbers, DD-MM-YYYY or MM-DD-YYYY date names, or month-name files like January_report.csv. The doc now lists each failure case in a comparison table and recommends the safe naming pattern.
June 2, 2026
Commercial Pricing schemas aligned with the canonical schema registry
The Commercial Pricing data documentation has been brought in line with the canonical schema. Several columns have been renamed to their canonical names, a few tenant-specific columns that had crept into the public docs have been removed, and previously-optional columns are now marked Required to match the schema's validation rules. The most visible changes:
- Sale:
region_idandprice_list_idare now in the resource. The primary key forsaleis nowsale_id + product_id + region_id + sold_at. - Quote line: the primary key now includes
region_id(so it'squote_id + product_id + region_id). New columns includeoriginal_quote_id,quote_status,decided_at, andprice_list_id. Some field names have been renamed to their canonical form (for example,quoted_units→quantity,quoted_price→selling_price). - Product, Customer, Project, Merchant, Region, List price, Product cost: all non-PK columns are now marked Required to reflect the schema's actual validation rules.
- List price and Product cost no longer document
valid_from/valid_tocolumns — those were tenant-specific and aren't part of the canonical schema.
Pipelines preparing data against the previous documentation may need their column names and required-field coverage reconciled with the updated pages.
Recommended ingestion method per table
The Commercial Pricing page now records the recommended operationType (APPEND or UPSERT) for each resource. For Commercial Pricing, most tables use APPEND because the solution uses the historical state of customers, products, prices, and merchants as model features. quote_line and sale use UPSERT, since re-submissions of the same business key are corrections rather than new versions.
New: Competitor prices dataset documentation
The Competitor prices dataset is now documented in the user guide. The dataset was already part of the API; it just didn't have a customer-facing data-requirements page until now.
Historical data ingestion guide
A new guide covers loading large historical datasets (millions to billions of rows) into the Data Ingestion API. It explains the design considerations for at-scale loads — streaming, dynamic batching, rate-limiting, foreign-key ordering, checkpointing, and failed-row handling — and provides a self-contained Python reference script you can configure and run. See Historical data ingestion.
Bulk-ingest script
The Python reference script in the historical-data-ingestion guide:
- Loads one table per run with a minimal
CONFIGblock (csv_path,object_name,solution_name,operation_type,parallel). To load several tables, run the script once per table. - Accepts a folder of CSV part-files as the source, in addition to a single CSV file. Chunked exports are loaded in sorted filename order.
- Reads gzip-compressed CSVs transparently, detected from the
.gzextension. - Recognises both empty string (Redshift
UNLOADdefault) and\N(SnowflakeCOPY INTOdefault) as null markers. - Fails fast if a CSV row has more cells than the header, instead of silently shifting data into the wrong columns.
- Tolerates uncastable cells (e.g.
"abc"in an integer column) by passing them through to the API as raw strings, so one bad cell becomes one rejected row, not a stopped load. - Exposes a
paralleltoggle forUPSERTloads where a primary key can appear more than once in the source — set it toFalseso concurrent workers don't apply revisions in an unpredictable order.
The guide also includes warehouse-specific UNLOAD / COPY INTO recipes for Snowflake and Redshift, and a section on re-running the script (resume behaviour, where checkpoint and failed-row files live, how to start fresh).
quote_line and sale: quantity is float, not integer
The quantity field on Quote line and Sale has been corrected from integer to float in both the API Guide and the User Guide dataset pages. The schema has always accepted decimals here; the doc was wrong. Pipelines that were rounding to integer-typed values should switch to sending the value as a number (decimal or whole) without coercion.
Per-table pages now show Nullable alongside Required
Every per-table page in the API Guide and the corresponding dataset pages in the User Guide now include a Nullable column next to the existing Required column. The two flags are independent:
Required: Yes— the column's key must appear in every ingest payload. This is the case for every column in the standard schema, so the value isYesthroughout.Nullable: Yes— the value may be sent asnullwhen no data is available for the row.Nullable: No— a non-null value must be sent for every row.
This makes it possible to distinguish "I must send the key but the value can be null" from "I must send a non-null value" at a glance per column. See Schema definition structure for the underlying validation rules.
Add-column endpoint: nullability guidance
The Add a new column section now has a Controlling required-ness and nullability on the new column subsection. It documents that required and nonNull are independent validators in the add-column path and lays out the four valid combinations as a small table. It also calls out the API-enforced mutual exclusion of defaultValue and nonNull — sending both returns 400 Bad Request with the exact error message the API produces, so customers can match the failure in their integration logs.
- June 3, 2026
- New: Integration walkthrough
- Cross-links between User Guide datasets and API Guide tables
- Bulk-ingest guide: folder-load sort order spelled out
- June 2, 2026
- Commercial Pricing schemas aligned with the canonical schema registry
- Recommended ingestion method per table
- New: Competitor prices dataset documentation
- Historical data ingestion guide
- Bulk-ingest script
quote_lineandsale:quantityisfloat, notinteger- Per-table pages now show Nullable alongside Required
- Add-column endpoint: nullability guidance