Skip to content

PIM Developer Overview

In this article we will look at PIM from a developers perspective and provide you with the overview and references you need to get started.

Before getting started

In this concept article you can find an overview of PIM, delving into its fundamental concepts and detailing its key features. If you haven't already, we highly recommend reading it.

You should also review our versioning strategy to understand how we manage releases. Additionally, you may find it helpful to read about our approach to software development at Bizzkit.

API

PIM is composed of a REST API that includes endpoints related to attributes, brands, lists, hierarchies, segmentation system, products, and so forth.

Swagger API reference

Preview API

The API also provides a preview version where new functionality can be tested. However, be aware that this preview version may include features that are still under development and subject to change. As such, it is not recommended for use in production environments. Use it primarily for testing and providing feedback on upcoming features. Read more here.

Notable endpoints

Below is a table highlighting some of the most notable endpoints:

Endpoint Method Summary
/api/attribute-groups GET Lists available attribute groups with optional filtering
/api/attribute-groups POST Creates an attribute group
/api/attributes GET Get a list of existing Attributes, matching the given query
/api/brands/import/csv POST Enqueues a job to import brands from the uploaded file.
/api/domain-events GET List domain event types which can be subscribed to
/api/external-bulk-operations GET Get a list of external bulk operations
/api/global-lists/-without-items GET Get a list of existing global lists
/api/global-lists/import/csv POST Enqueues a job to import global list items from the uploaded CSV file
/api/pim-types GET Lists all available PIM types
/api/product-categories POST Create a new ProductCategory and place it within a defined hierarchy structure
/api/product-hierarchies/import/csv POST Enqueues a job to import product hierarchies from the uploaded CSV file
/api/products PATCH Patch multiple products' data with specified operations to be performed.
/api/products/-filter POST Filter indexed products based on the specified filter query.
/api/products/export/csv POST Enqueues a job to export products to a CSV file based on the supplied parameter set.
/api/products/import/csv POST Enqueues a job to import products from the uploaded CSV file
/api/products/import/json POST Enqueues a job to import products from the uploaded json file
/api/resolved-views/attribute-field-values/-resolve POST Resolves the supplied attribute fields from a view.
/api/resolved-views/attribute-predefined-values/-search POST Retrieves attribute predefined value views for the specified attribute uniquenames and segmentation.
/api/resolved-views/attributes/-search POST Retrieves attribute views for the specified attribute uniquenames and segmentation.
/api/resolved-views/brands/-search POST Retrieves resolved brand views for the specified brand uniquenames and segmentation.
/api/resolved-views/global-lists/-search POST Retrieves global list views for the specified global list uniquenames and segmentation.
/api/resolved-views/product-hierarchies/-search POST Retrieves resolved product hierarchy views for the specified hierarchy uniquenames and segmentation.
/api/resolved-views/products/-search POST Retrieves resolved product views for the specified product uniquenames and segmentation.
/api/resolved-views/products/families/-search POST Retrieves the full product family views for the specified product uniquenames and segmentation.
/api/segmentations GET Get a list of existing segmentations
/api/test GET Displays a simple hello message from the api.
/api/users/-search-by-ids POST Search for users matching the provided user ids.

This is just a brief highlight — please refer to the full Swagger API reference for the complete specification.

Resolved views

The resolved views endpoint provides a simplified representation of a PIM entity, designed for easy integration with external systems like online stores. For more details, please refer to the documentation here.

Using the API

Given a valid authentication token here is an example of calling the Test-endpoint:

curl -X GET https://myenv-pimapi.bizzkit.biz/api/test `
-H "Authorization: Bearer ..." 

Replace the URL with the URL to your environment and replace ... with the authtoken from the example mentioned above.

1
2
3
4
5
# authtoken defined and initialized previously
@api = https://myenv-pimapi.bizzkit.biz

GET {{api}}/api/test HTTP/1.1
Authorization: Bearer {{authtoken}} 

Replace the URL with the URL to your environment.

Using the Bizzkit .NET SDK

For easy integration with Microsoft .NET, Bizzkit offers SDK packages. These packages include auto-generated Swagger clients and a factory class to simplify authentication. They automate token renewal and provide type-safe methods for the API endpoints.

All SDK package names start with the prefix Bizzkit.Sdk., and the SDK packages incorporate the following elements:

  • A client factory
  • A dedicated client
  • Options to configure the client factory

Info

Preview versions are identified as Bizzkit.Sdk.[product].Preview, such as Bizzkit.Sdk.Iam.Preview or Bizzkit.Sdk.Pim.Preview.

To access the Bizzkit NuGet packages in your preferred development environment, you need to reference the Bizzkit Partner feed. You can, for example, do this by adding a nuget.config file to your project with the following configuration:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="nuget" value="https://api.nuget.org/v3/index.json" />
    <add key="bizzkit-partner" value="https://pkgs.dev.azure.com/bizzkit-platform/7dad82b4-f2ae-4a3a-ab87-3fc791e4ea62/_packaging/bizzkit-partner-feed/nuget/v3/index.json" />
  </packageSources>
  <packageSourceMapping>
    <packageSource key="nuget">
      <package pattern="*" />
    </packageSource>
    <packageSource key="bizzkit-partner">
      <package pattern="Bizzkit*" />
    </packageSource>
  </packageSourceMapping>
</configuration>

This configuration clears existing package sources and adds the Bizzkit Partner feed alongside the official NuGet source.

Once the feed is configured, you can install the required NuGet package using the following command:

dotnet add package Bizzkit.Sdk.Pim

To simplify the authentication process, all NuGet packages associated with Bizzkit applications come with a factory class. This class streamlines the creation of an authenticated Swagger-generated client.

Example

using Bizzkit.Sdk.Pim;

var factory = new PimClientFactory(new PimConnectionOptions
{
    BaseUrl = "https://myenv-pimapi.bizzkit.biz",
    Authority = "https://myenv-auth.bizzkit.biz",
    ClientId = "BizzkitClient",
    ClientSecret = "BizzkitSecret",
    Scope = "pimapi/"
});

var client = await factory.CreateAuthenticatedClientAsync();

As noted earlier, the SDK client is mainly an auto-generated client based on the OpenAPI interface, meaning all methods map directly to the API.

Below is an example of calling the Test endpoint using the SDK client (with the factory and client already created):

var test = await client.Test_GetAsync();
Console.WriteLine(test);

Warning

Please keep in mind that all examples provided are for illustrative purposes only. They are not intended to represent best practices and should not be used in production without a thorough code review.

Modelling

Creating a PIM data model to represent the data structure of products for a specific company is essential for ensuring accurate and efficient data management. A well-designed model helps in organizing and categorizing product information, making it easier to manage, retrieve, and update.

For more information, please refer to Data types, Attributes, Segmentations, and Modelling attributes.

Ingesting data

Our PIM system boasts a comprehensive data ingestion mechanism, harnessing the simplicity of the CSV format. This tool empowers you to efficiently import a variety of elements, including attributes, brands, products, hierarchies, and so forth. For a deeper understanding of the CSV specification utilized, please explore the dedicated article on the CSV specification.

For a more simple but fast import we also support the JSON format.

Product enrichment

When managing data in PIM, it’s important to understand the concepts of enrichers and validators. Product enrichers allow you to add, replace, set, and update product catalog item attributes, while validators ensure the quality of product data.

For more information, see Product enrichers and Product validators.

Events

PIM has the capability to communicate with other systems about events such as item creation, updates, or deletions using webhooks. You can set these up either through the User Interface (UI), by navigating to Settings -> Administration -> Webhooks, or via the API. For more detailed information, please refer to this article.

Extensibility

PIM can be extended in numerous ways. External bulk operations are an extension point in PIM, enabling you to perform custom operations or jobs on the product catalog, which are run on the customer solution side. UI Extension Frame Sets provide a way to call an external URL with parameters, and display the result either internally or externally.

UI Extension frameset

UI Extension frameset

UI Extension frameset

UI Extension frameset

Please refer to:

Job runners

PIM utilizes two job execution mechanisms, namely the notification hub and the task runner. The role of the notification hub is to inform the User Interface (UI) about modifications, while the task runner takes care of event processing, cache management, and related tasks.