Product API (1.0.0-Preview1)

Download OpenAPI specification:

Product API Support: support@product.2ba.nl License: Apache 2.0

API for managing product information, specifications, and categories based on ETIM xChange V2.0.

Features

  • Individual product operations via /products
  • Bulk data retrieval via /products/bulk/* endpoints with cursor-based pagination

Data Model

Based on ETIM xChange V2.0 Product schema (excluding TradeItem). Flattened structure with minimal nesting for efficient API consumption.

Single Product

Product management operations

Get product

Retrieve the complete product information for a specific manufacturer product combination.

This endpoint returns a single product identified by the composite key of manufacturerIdGln and manufacturerProductNumber. The product key is at the root level, with nested objects for each component:

  • details: GTINs, brand, dates, customs data, status, warranties
  • descriptions: Multilingual product descriptions (nested array)
  • etimClassifications: ETIM classifications with embedded features (nested array)
  • lcaEnvironmental: Life Cycle Assessment and Environmental Product Declaration (EPD) data
  • attachments: Product documents, images, videos, and other attachments (nested array)

Subresources: Each component is also available as a dedicated subresource:

  • /details - Core product information
  • /descriptions - Multilingual descriptions with language filtering
  • /etim-classifications - ETIM classifications with features
  • /lca-environmental - Life Cycle Assessment and EPD data
  • /attachments - Product documents, images, and certificates

ETIM Classification Filtering: Use the optional etimReleaseVersion query parameter to filter ETIM classifications to a specific release version (e.g., "9.0", "10.0").

Examples: Example payloads show documented fields only. Clients must accept and ignore additional fields, including nested fields, when they are added in backward-compatible updates.

No pagination - Returns exactly one product document or 404 if not found.

Composite Key: The combination of manufacturer GLN and product number uniquely identifies a product in the system.

Authorizations:
oauth2
path Parameters
manufacturerIdGln
required
string = 13 characters ^[0-9]{13}$
Example: 1234567890123

Global Location Number (GLN) of the manufacturer. Must be a valid 13-digit GLN. Part of the composite key for identifying a unique product.

manufacturerProductNumber
required
string [ 1 .. 35 ] characters
Example: 929002376910

Manufacturer's unique product number (MPN). Part of the composite key for identifying a unique product. Together with manufacturerIdGln, this uniquely identifies a product.

query Parameters
etimReleaseVersion
string^[0-9]{1,2}[.]{1}[0-9]{1}|DYNAMIC$
Examples: etimReleaseVersion=9.0 etimReleaseVersion=10.0 etimReleaseVersion=DYNAMIC

Filter ETIM classifications by ETIM release version. Format: Major.Minor version number (e.g., "9.0", "10.0") or "DYNAMIC" for dynamic releases.

Responses

Response samples

Content type
application/json
Example
{
  • "data": {
    }
}

Get product details

Retrieve core product information for a specific manufacturer product combination.

This endpoint returns comprehensive product information including identifiers (GTINs), brand, lifecycle dates, customs data, status, type, warranties, and product groups for a single product identified by the composite key of manufacturerIdGln and manufacturerProductNumber.

The product key is at the root level, with details nested inside. This structure aligns with other single-product subresource responses.

Examples: Example payloads show documented fields only. Clients must accept and ignore additional fields, including nested fields, when they are added in backward-compatible updates.

Product descriptions: For multilingual product descriptions, use the dedicated /descriptions subresource which supports language filtering.

No pagination - Returns exactly one product's details or 404 if not found.

Authorizations:
oauth2
path Parameters
manufacturerIdGln
required
string = 13 characters ^[0-9]{13}$
Example: 1234567890123

Global Location Number (GLN) of the manufacturer. Must be a valid 13-digit GLN. Part of the composite key for identifying a unique product.

manufacturerProductNumber
required
string [ 1 .. 35 ] characters
Example: 929002376910

Manufacturer's unique product number (MPN). Part of the composite key for identifying a unique product. Together with manufacturerIdGln, this uniquely identifies a product.

Responses

Response samples

Content type
application/json
Example
{
  • "data": {
    }
}

Get product descriptions

Retrieve multilingual descriptions for a specific manufacturer product combination.

This endpoint returns product descriptions including minimal, unique main, full descriptions, marketing text, specification text, application instructions, keywords, and product page URLs for each available language.

Language filtering: Use the optional language query parameter to filter descriptions to specific language(s). If not specified, all available languages are returned.

Nested structure: Unlike the bulk endpoint /products/bulk/descriptions which uses a flattened structure optimized for ETL, this single-product endpoint returns descriptions in their natural nested format for easier consumption.

No pagination - Returns all descriptions for the specified product.

Authorizations:
oauth2
path Parameters
manufacturerIdGln
required
string = 13 characters ^[0-9]{13}$
Example: 1234567890123

Global Location Number (GLN) of the manufacturer. Must be a valid 13-digit GLN. Part of the composite key for identifying a unique product.

manufacturerProductNumber
required
string [ 1 .. 35 ] characters
Example: 929002376910

Manufacturer's unique product number (MPN). Part of the composite key for identifying a unique product. Together with manufacturerIdGln, this uniquely identifies a product.

query Parameters
language
Array of strings (LanguageCode) [ items^[a-z]{2}[-][A-Z]{2}$ ]
Examples:
  • language=en-GB - Single language filter
  • language=en-GB&language=de-DE&language=nl-NL - Multiple language filter

Filter results by language code(s). Uses ISO 639-1 language code with ISO 3166-1 country code (e.g., "en-GB", "de-DE", "nl-NL").

If not specified, all available languages are returned. Multiple languages can be specified to return descriptions in those languages only.

Responses

Response samples

Content type
application/json
Example
{
  • "data": {
    }
}

Get product ETIM classifications

Retrieve all ETIM classification information for a specific manufacturer product combination.

This endpoint returns all ETIM classifications (class codes, features, version information) for a single product identified by the composite key of manufacturerIdGln and manufacturerProductNumber.

ETIM Classification Filtering: Use the optional etimReleaseVersion query parameter to filter classifications to a specific release version (e.g., "9.0", "10.0"). If omitted, the latest etimReleaseVersion is returned.

No pagination - Returns all ETIM classifications for the specified product. A product can have multiple ETIM classifications across different releases.

Use case: Ideal for retrieving detailed ETIM classification data for a single product without fetching all product details.

Authorizations:
oauth2
path Parameters
manufacturerIdGln
required
string = 13 characters ^[0-9]{13}$
Example: 1234567890123

Global Location Number (GLN) of the manufacturer. Must be a valid 13-digit GLN. Part of the composite key for identifying a unique product.

manufacturerProductNumber
required
string [ 1 .. 35 ] characters
Example: 929002376910

Manufacturer's unique product number (MPN). Part of the composite key for identifying a unique product. Together with manufacturerIdGln, this uniquely identifies a product.

query Parameters
etimReleaseVersion
string^[0-9]{1,2}[.]{1}[0-9]{1}|DYNAMIC$
Examples: etimReleaseVersion=9.0 etimReleaseVersion=10.0 etimReleaseVersion=DYNAMIC

Filter ETIM classifications by ETIM release version. Format: Major.Minor version number (e.g., "9.0", "10.0") or "DYNAMIC" for dynamic releases.

Responses

Response samples

Content type
application/json
Example
{
  • "data": {
    }
}

Get product LCA environmental

Retrieve Life Cycle Assessment (LCA) environmental data for a specific manufacturer product combination.

This endpoint returns Environmental Product Declaration (EPD) information including:

  • Declared unit (unit and quantity)
  • Reference service lifetime
  • Third-party verification status
  • EPD operator and registration details
  • Product Category Rules (PCR) references
  • Life cycle declarations for different stages (A1-A3, B1-B7, C1-C4, D)

The product key is at the root level, with LCA environmental data nested inside. This structure aligns with other single-product subresource responses.

Examples: Example payloads show documented fields only. Clients must accept and ignore additional fields, including nested fields, when they are added in backward-compatible updates.

No pagination - Returns exactly one product's LCA data or 404 if not found. Returns null for lcaEnvironmental if the product exists but has no LCA data.

Authorizations:
oauth2
path Parameters
manufacturerIdGln
required
string = 13 characters ^[0-9]{13}$
Example: 1234567890123

Global Location Number (GLN) of the manufacturer. Must be a valid 13-digit GLN. Part of the composite key for identifying a unique product.

manufacturerProductNumber
required
string [ 1 .. 35 ] characters
Example: 929002376910

Manufacturer's unique product number (MPN). Part of the composite key for identifying a unique product. Together with manufacturerIdGln, this uniquely identifies a product.

Responses

Response samples

Content type
application/json
Example
{
  • "data": {
    }
}

Get product attachments

Retrieve attachments for a specific manufacturer product combination.

This endpoint returns product attachments including images, datasheets, technical drawings, certificates, manuals, and other document types. Each attachment contains type information and one or more file detail records (e.g., the same datasheet in different languages or formats).

Nested structure: Unlike the bulk endpoint /products/bulk/attachments which uses a flattened structure optimized for ETL, this single-product endpoint returns attachments in their natural nested format for easier consumption.

No pagination - Returns all attachments for the specified product.

ETIM xChange: ProductAttachments[] Path: Supplier[].Product[].ProductAttachments[]

Authorizations:
oauth2
path Parameters
manufacturerIdGln
required
string = 13 characters ^[0-9]{13}$
Example: 1234567890123

Global Location Number (GLN) of the manufacturer. Must be a valid 13-digit GLN. Part of the composite key for identifying a unique product.

manufacturerProductNumber
required
string [ 1 .. 35 ] characters
Example: 929002376910

Manufacturer's unique product number (MPN). Part of the composite key for identifying a unique product. Together with manufacturerIdGln, this uniquely identifies a product.

Responses

Response samples

Content type
application/json
Example
{
  • "data": {
    }
}

Bulk Products

Bulk data retrieval operations for products with cursor-based pagination

List product details

Retrieve product detail information in bulk with cursor-based pagination. Returns product status, type, descriptions, warranties, and product groups.

Use this endpoint for product status synchronization.

Authorizations:
oauth2
query Parameters
cursor
string
Example: cursor=eyJpZCI6MTIzNDU2Nzg5MCwic29ydCI6ImFzYyJ9

Cursor for pagination to fetch the next set of results

limit
integer [ 1 .. 1000 ]
Default: 100
Examples: limit=10 limit=50 limit=100

Maximum number of items to return per page

selectionId
string (TechnicalId) [ 1 .. 50 ] characters
Examples: selectionId=SELECTION-2024-Q1 selectionId=123456 selectionId=f47ac10b-58cc-4372-a567-0e02b2c3d479

Filter results by selection identifier. Used to retrieve a specific subset of items based on a predefined selection.

manufacturerIdGln
string (Gln) = 13 characters ^\d{13}$
Examples: manufacturerIdGln=4012345000016 manufacturerIdGln=8712345678906

Filter products by manufacturer Global Location Number (GLN). A 13-digit identifier for the manufacturer of the products.

mutationDateTime
string <date-time>
Example: mutationDateTime=2024-10-15T00:00:00Z

Filter results by mutation timestamp (RFC 3339 / ISO 8601 UTC format). Returns items created or modified on or after this timestamp. Must use UTC timezone with 'Z' suffix.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

List product descriptions

Retrieve product descriptions in bulk with cursor-based pagination. Returns a flattened structure where each row represents a single language description with the product identifier (manufacturerIdGln + manufacturerProductNumber). A product with descriptions in 3 languages will result in 3 rows.

Authorizations:
oauth2
query Parameters
cursor
string
Example: cursor=eyJpZCI6MTIzNDU2Nzg5MCwic29ydCI6ImFzYyJ9

Cursor for pagination to fetch the next set of results

limit
integer [ 1 .. 1000 ]
Default: 100
Examples: limit=10 limit=50 limit=100

Maximum number of items to return per page

selectionId
string (TechnicalId) [ 1 .. 50 ] characters
Examples: selectionId=SELECTION-2024-Q1 selectionId=123456 selectionId=f47ac10b-58cc-4372-a567-0e02b2c3d479

Filter results by selection identifier. Used to retrieve a specific subset of items based on a predefined selection.

manufacturerIdGln
string (Gln) = 13 characters ^\d{13}$
Examples: manufacturerIdGln=4012345000016 manufacturerIdGln=8712345678906

Filter products by manufacturer Global Location Number (GLN). A 13-digit identifier for the manufacturer of the products.

mutationDateTime
string <date-time>
Example: mutationDateTime=2024-10-15T00:00:00Z

Filter results by mutation timestamp (RFC 3339 / ISO 8601 UTC format). Returns items created or modified on or after this timestamp. Must use UTC timezone with 'Z' suffix.

language
Array of strings (LanguageCode) [ items^[a-z]{2}[-][A-Z]{2}$ ]
Examples:
  • language=en-GB - Single language filter
  • language=en-GB&language=de-DE&language=nl-NL - Multiple language filter

Filter results by language code(s). Uses ISO 639-1 language code with ISO 3166-1 country code (e.g., "en-GB", "de-DE", "nl-NL").

If not specified, all available languages are returned. Multiple languages can be specified to return descriptions in those languages only.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

List product ETIM classifications

Retrieve product ETIM classification feature data in a flattened format with cursor-based pagination.

Flattened Structure: Each row represents a single feature value within a product's ETIM classification. This structure is optimized for:

  • Predictable payload sizes (each row has consistent structure)
  • Efficient cursor-based pagination by feature
  • ETL/data warehouse ingestion
  • Streaming data processing

Payload Optimization: Optional properties with null values are omitted from the response to minimize payload size. Clients should treat missing properties as null/not applicable.

Data Reconstruction: To reconstruct the hierarchical structure:

  1. Group rows by manufacturerIdGln + manufacturerProductNumber for products
  2. Within each product, group by etimClassCode + etimReleaseVersion for classifications
  3. Features are individual rows within each classification group

Classification-Only Rows: Products with classifications but no features are represented with etimFeatureCode omitted to ensure all classifications are included in the response.

ETIM Release Filtering: Use the optional etimReleaseVersion query parameter to filter classifications to a specific ETIM release version (e.g., "9.0", "10.0"). If omitted, latest etimReleaseVersion is returned.

Use case: Ideal for bulk synchronization of ETIM classification data to external systems, data warehouses, or analytics platforms.

Authorizations:
oauth2
query Parameters
cursor
string
Example: cursor=eyJpZCI6MTIzNDU2Nzg5MCwic29ydCI6ImFzYyJ9

Cursor for pagination to fetch the next set of results

limit
integer [ 1 .. 1000 ]
Default: 100
Examples: limit=10 limit=50 limit=100

Maximum number of items to return per page

selectionId
string (TechnicalId) [ 1 .. 50 ] characters
Examples: selectionId=SELECTION-2024-Q1 selectionId=123456 selectionId=f47ac10b-58cc-4372-a567-0e02b2c3d479

Filter results by selection identifier. Used to retrieve a specific subset of items based on a predefined selection.

manufacturerIdGln
string (Gln) = 13 characters ^\d{13}$
Examples: manufacturerIdGln=4012345000016 manufacturerIdGln=8712345678906

Filter products by manufacturer Global Location Number (GLN). A 13-digit identifier for the manufacturer of the products.

mutationDateTime
string <date-time>
Example: mutationDateTime=2024-10-15T00:00:00Z

Filter results by mutation timestamp (RFC 3339 / ISO 8601 UTC format). Returns items created or modified on or after this timestamp. Must use UTC timezone with 'Z' suffix.

etimReleaseVersion
string^[0-9]{1,2}[.]{1}[0-9]{1}|DYNAMIC$
Examples: etimReleaseVersion=9.0 etimReleaseVersion=10.0 etimReleaseVersion=DYNAMIC

Filter ETIM classifications by ETIM release version. Format: Major.Minor version number (e.g., "9.0", "10.0") or "DYNAMIC" for dynamic releases.

Responses

Response samples

Content type
application/json
Example
{
  • "data": [
    ],
  • "meta": {
    }
}

List product LCA declarations

Retrieve product LCA (Life Cycle Assessment) declaration data in a flattened format with cursor-based pagination.

Flattened Structure: Each row represents a single life cycle stage declaration within a product's LCA environmental data. This structure is optimized for:

  • Predictable payload sizes (each row has consistent structure)
  • Efficient cursor-based pagination by declaration
  • ETL/data warehouse ingestion
  • Streaming data processing
  • Filtering by life cycle stage

Payload Optimization: Optional properties with null values are omitted from the response to minimize payload size. Clients should treat missing properties as null/not applicable.

Parent Context: Each row includes key parent fields from LcaEnvironmental (declaredUnitUnit, declaredUnitQuantity, lcaReferenceLifetime, thirdPartyVerification, epdValidityStartDate, epdValidityExpiryDate, epdOperatorName, epdOperatorUri, operatorEpdId, manufacturerEpdId, productCategoryRulesDescription, productCategoryRulesUri, productSpecificRulesDescription, productSpecificRulesUri) to provide necessary context for interpreting the environmental indicators.

Data Reconstruction: To reconstruct the hierarchical structure:

  1. Group rows by manufacturerIdGln + manufacturerProductNumber for products
  2. All rows for a product share the same parent context (declared unit, lifetime, verification, EPD metadata)
  3. Each row represents a different life cycle stage (A1-A3, B1-B7, C1-C4, D)

Life Cycle Stage Filtering: Use the optional lifeCycleStage query parameter to filter declarations to a specific EN 15804 life cycle stage.

Use case: Ideal for bulk synchronization of environmental product declaration data to external systems, sustainability reporting, or analytics platforms.

Authorizations:
oauth2
query Parameters
cursor
string
Example: cursor=eyJpZCI6MTIzNDU2Nzg5MCwic29ydCI6ImFzYyJ9

Cursor for pagination to fetch the next set of results

limit
integer [ 1 .. 1000 ]
Default: 100
Examples: limit=10 limit=50 limit=100

Maximum number of items to return per page

selectionId
string (TechnicalId) [ 1 .. 50 ] characters
Examples: selectionId=SELECTION-2024-Q1 selectionId=123456 selectionId=f47ac10b-58cc-4372-a567-0e02b2c3d479

Filter results by selection identifier. Used to retrieve a specific subset of items based on a predefined selection.

manufacturerIdGln
string (Gln) = 13 characters ^\d{13}$
Examples: manufacturerIdGln=4012345000016 manufacturerIdGln=8712345678906

Filter products by manufacturer Global Location Number (GLN). A 13-digit identifier for the manufacturer of the products.

mutationDateTime
string <date-time>
Example: mutationDateTime=2024-10-15T00:00:00Z

Filter results by mutation timestamp (RFC 3339 / ISO 8601 UTC format). Returns items created or modified on or after this timestamp. Must use UTC timezone with 'Z' suffix.

lifeCycleStage
Array of strings
Items Enum: "A1" "A2" "A3" "A1-A3" "A4" "A5" "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B1-B7" "C1" "C2" "C3" "C4" "C1-C4" "D"
Examples:
  • lifeCycleStage=A1-A3 - Product stage only
  • lifeCycleStage=A1-A3&lifeCycleStage=C1-C4&lifeCycleStage=D - Product and end-of-life stages
  • lifeCycleStage=B6 - Operational energy use

Filter LCA declarations by life cycle stage(s) according to EN 15804. Multiple stages can be specified to return declarations for those stages only. If not specified, all stages are returned.

Product stage (A):

  • A1: Raw material supply
  • A2: Transport to manufacturer
  • A3: Manufacturing
  • A1-A3: Combined product stage
  • A4: Transport to building site
  • A5: Installation into building

Use stage (B):

  • B1: Use/Application
  • B2: Maintenance
  • B3: Repair
  • B4: Replacement
  • B5: Refurbishment
  • B6: Operational energy use
  • B7: Operational water use
  • B1-B7: Combined use stage

End of life stage (C):

  • C1: Deconstruction/demolition
  • C2: Transport to waste processing
  • C3: Waste processing
  • C4: Disposal
  • C1-C4: Combined end of life stage

Beyond life cycle (D):

  • D: Reuse, recovery, recycling potential

Responses

Response samples

Content type
application/json
Example
{
  • "data": [
    ],
  • "meta": {
    }
}

List product attachments

Retrieve product attachments in bulk with cursor-based pagination. Returns a flattened structure where each row represents a single attachment file with the product identifier (manufacturerIdGln + manufacturerProductNumber) and attachment-level fields (attachmentType, attachmentTypeSpecification, attachmentOrder) denormalized into each row.

A product with 2 attachment types, each with 2 files (e.g., different languages), will result in 4 rows.

This flattened structure is optimized for:

  • Predictable payload sizes per row
  • Efficient cursor-based pagination
  • ETL/data warehouse ingestion
  • Streaming data processing
Authorizations:
oauth2
query Parameters
cursor
string
Example: cursor=eyJpZCI6MTIzNDU2Nzg5MCwic29ydCI6ImFzYyJ9

Cursor for pagination to fetch the next set of results

limit
integer [ 1 .. 1000 ]
Default: 100
Examples: limit=10 limit=50 limit=100

Maximum number of items to return per page

selectionId
string (TechnicalId) [ 1 .. 50 ] characters
Examples: selectionId=SELECTION-2024-Q1 selectionId=123456 selectionId=f47ac10b-58cc-4372-a567-0e02b2c3d479

Filter results by selection identifier. Used to retrieve a specific subset of items based on a predefined selection.

manufacturerIdGln
string (Gln) = 13 characters ^\d{13}$
Examples: manufacturerIdGln=4012345000016 manufacturerIdGln=8712345678906

Filter products by manufacturer Global Location Number (GLN). A 13-digit identifier for the manufacturer of the products.

mutationDateTime
string <date-time>
Example: mutationDateTime=2024-10-15T00:00:00Z

Filter results by mutation timestamp (RFC 3339 / ISO 8601 UTC format). Returns items created or modified on or after this timestamp. Must use UTC timezone with 'Z' suffix.

Responses

Response samples

Content type
application/json
{
  • "data": [],
  • "meta": {
    }
}