This is the PSI Backend API Documentation.
This documentation aims to provide all the information you need to work with our API.
To authenticate requests, include an Authorization
header with the value "Bearer {YOUR_BEARER_TOKEN}"
.
All authenticated endpoints are marked with a requires authentication
badge in the documentation below.
This endpoint allows you to authenticate and retrieve an access_token and a refresh_token. The access_token must be included in the header of every API request to access protected resources. You can log in using your standard PSI account credentials. However, to avoid potential issues caused by password changes of regular user accounts, we strongly recommend creating a dedicated Sub-Account for API access. You can set up a Sub-Account in your PSI account settings (https://www.psi-network.de/).
curl --request POST \
"https://api.psiproductfinder.de/v2/auth" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"username\": \"demo@psi-network.de\",
\"password\": \"password\"
}"
{
"access_token": "eyJ0eXAidemoV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwcLmRlIiwiYXVkIjoicHNpcHJvZHVjdansmRlci5kZSIsImp0adIeoQzNjMwIiwiaWF0IjoxNzM3MDE5NTQ2LjE2OTkyMiwibmJmIjoxNzM3MDE5NTQ2LjE2OTkyMiwiZXhwIjoxNzM3MDE5NTQ2LjE2OTkyMiwicGF5bG9hZCI6eyJwc2lubyI6NDM2MzAsInVzZXJfaWQiOjEyNDcyOSwiZ3JvdXBzIjoiMTQiLCJlbWFpbCI6ImZyYW5rQHJoZWluc2NoYWZlLmRlIn19",
"refresh_token": "07070512341eacdemo3a64267c377cdcf06501",
"expires_in": 1737019546
}
Your access_token is valid for the duration specified in the expires_in field of the authentication response (e.g., typically 1 hour). Once the token expires, you must generate a new one to continue accessing protected resources.
curl --request POST \
"https://api.psiproductfinder.de/v2/refresh" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"username\": \"demo@psi-network.de\",
\"refresh_token\": \"07070512341eacdemo3a64267c377cdcf06501\"
}"
{
"access_token": "eyJ0eXAidemoV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwcLmRlIiwiYXVkIjoicHNpcHJvZHVjdansmRlci5kZSIsImp0adIeoQzNjMwIiwiaWF0IjoxNzM3MDE5NTQ2LjE2OTkyMiwibmJmIjoxNzM3MDE5NTQ2LjE2OTkyMiwiZXhwIjoxNzM3MDE5NTQ2LjE2OTkyMiwicGF5bG9hZCI6eyJwc2lubyI6NDM2MzAsInVzZXJfaWQiOjEyNDcyOSwiZ3JvdXBzIjoiMTQiLCJlbWFpbCI6ImZyYW5rQHJoZWluc2NoYWZlLmRlIn19",
"expires_in": 1737020073
}
The Get Entities endpoint allows you to retrieve all products associated with your PSI number. It returns all products that belong to your account, but you can customize the results using optional query parameters.
de
en
de
en
Must be at least 1.
Must be at least 1. Must not be greater than 100.
curl --request GET \
--get "https://api.psiproductfinder.de/v2/products?language=en&locale=en&filter=outdated&search=Suchen&page=1&size=6" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
{
"code": 200,
"status": "OK",
"data": [],
"meta": {}
}
This endpoint is used to retrieve a specific product or variant. You can identify the entity using one of the following methods: Internal Identifier: A unique identifier generated from your master_product_number, PSI number, and product_number. Identifiers starting with p- refer to a master product, and identifiers starting with v- refer to a variant. Product Number: You can also use your custom product_number as an identifier. Note: If you request a master product (p-), the response will include all associated variants.
required.
de
en
de
en
curl --request GET \
--get "https://api.psiproductfinder.de/v2/products/p-c2a1cf5x?language=en&locale=en" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
{
"code": 400,
"status": "Bad request"
}
To create a variant or translation, simply post a payload containing the required parameters. If you specify a language other than the default (en), a new translation for the specified language will be added.
curl --request POST \
"https://api.psiproductfinder.de/v2/products/store" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Demo Product\",
\"product_number\": \"demo-001\",
\"language\": \"en\",
\"locale\": \"en\",
\"master_product_number\": \"demo-001\",
\"brand\": \"PSI-Demo\",
\"description\": \"This is just a demo product\",
\"tags\": \"demo1, demo2\",
\"ean_code\": \"1234567890\",
\"product_groups\": [
\"05138008\",
\"08094001\"
],
\"certificates\": [
\"CERT-04200000\"
],
\"colors\": [
\"CG-BLAK5\"
],
\"color_description\": \"red\",
\"country_origin\": \"CC-DE\",
\"made_in\": \"CC-DE\",
\"images\": [
{
\"src\": \"https:\\/\\/psiproductfinder.de\\/images\\/logo\\/logo.svg\",
\"name\": \"Demo logo image\",
\"description\": \"Custom description\"
}
],
\"delivery_time_max\": 3,
\"delivery_time_min\": 1,
\"finishings\": [
{
\"group\": \"FG-APPN11\",
\"included\": true,
\"description\": \"Demo application\"
}
],
\"finishings_information\": \"Finishing information\",
\"legal_information\": \"Legal information\",
\"material_description\": \"Material description\",
\"materials\": [
\"MG-ACRC7\"
],
\"measurement_length\": 100,
\"measurement_volume\": 10,
\"measurement_height\": 150,
\"measurement_width\": 135,
\"measurement_information\": \"Measurement information\",
\"weight_netto\": 10,
\"weight_brutto\": 13,
\"minimum_order_amount\": 1,
\"packaging\": 2,
\"price_ranges\": [
{
\"amount\": 1,
\"price_ek\": 1.5,
\"price_uvp\": 2
},
{
\"amount\": 5,
\"price_ek\": 1,
\"price_uvp\": 1.5
}
],
\"price_ranges_information\": \"Price ranges information\",
\"product_information\": \"Product information\",
\"stock_available\": true,
\"delivery_information\": \"Delivery information\",
\"target_group\": \"Target group\",
\"video\": \"https:\\/\\/www.youtube.com\\/watch?v=pCHJAj5oPu0\"
}"
{
"code": 200,
"status": "OK",
"message": "Product with identifier 'v-1b93b0c9' has been successfully created.",
"data": {
"product_id": "9df97825-f13f-44b0-a20f-126b463d25eb",
"product_identifier": "p-9a33ae89",
"selected_identifier": "v-1b93b0c9",
"variant_id": "9df97825-f2c2-43ea-9f3d-e2b3c8a1ebf5",
"variant_identifier": "v-1b93b0c9",
"master_article_number": "43630S31463938362D64424946456578573178",
"master_product_number": "1F986-dBIFEexW1x",
"available_translations": [
"en"
],
"brand": null,
"certificates": [],
"color_description": null,
"colors": [],
"country_origin": null,
"delivery_information": null,
"delivery_time_max": null,
"delivery_time_min": null,
"description": null,
"ean_code": null,
"finishings_information": null,
"finishings": [],
"images": [],
"legal_information": null,
"made_in": null,
"material_description": null,
"materials": [],
"measurement_height": null,
"measurement_information": null,
"measurement_length": null,
"measurement_volume": null,
"measurement_width": null,
"minimum_order_amount": null,
"name": "Demo Product",
"packaging": null,
"price_ranges_information": null,
"price_ranges": [],
"product_groups": [],
"product_information": null,
"product_number": "demo-001",
"stock_available": false,
"tags": null,
"target_group": null,
"video": null,
"weight_brutto": null,
"weight_netto": null
}
}
To update variants and translations, you need to specify the variant_identifier (e.g., v-88c62663). For updating a translation, you must also include the language parameter.
All parameters available in the "Create Entity" endpoint can also be used when updating an entity, allowing for flexible modifications.
curl --request PATCH \
"https://api.psiproductfinder.de/v2/products/update/v-88c62663" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Demo Product updated\",
\"language\": \"en\",
\"locale\": \"en\",
\"description\": \"This is just a demo product - updated\"
}"
{
"code": 200,
"status": "OK",
"message": "Product with identifier 'v-88c62663' has been successfully updated.",
"data": {
"product_id": "9dfb33f7-03b7-4598-9178-9799e3710560",
"product_identifier": "p-76ca02e6",
"selected_identifier": "v-88c62663",
"variant_id": "9dfb33f7-061d-4737-93fb-71e62bc9b25d",
"variant_identifier": "v-88c62663",
"master_article_number": "43630S64656D6F2D303031",
"master_product_number": "1F43C-UQlQJ9yMwQ",
"available_translations": [
"en"
],
"brand": "PSI-Demo",
"certificates": [
{
"group": "CERT-04200000",
"label": "Fair for life"
}
],
"color_description": "red",
"colors": [
{
"group": "CG-BLAK5",
"label": "Black"
}
],
"country_origin": null,
"delivery_information": "Delivery information",
"delivery_time_max": 3,
"delivery_time_min": 1,
"description": "This is just a demo product - updated",
"ean_code": "1234567890",
"finishings_information": "Finishing information",
"finishings": [
{
"group": "FG-APPN11",
"label": "Application",
"description": "Demo application",
"included": true
}
],
"images": [
{
"src": "https://psiproductfinder.de/images/logo/logo.svg",
"name": "Demo logo image",
"description": "Custom description"
},
{
"src": null,
"name": null,
"description": null
}
],
"legal_information": "Legal information",
"made_in": null,
"material_description": "Material description",
"materials": [
{
"group": "MG-ACRC7",
"label": "Acrylic"
}
],
"measurement_height": 150,
"measurement_information": "Measurement information",
"measurement_length": 100,
"measurement_volume": "10.00",
"measurement_width": 135,
"minimum_order_amount": 1,
"name": "Demo Product updated",
"packaging": 2,
"price_ranges_information": "Price ranges information",
"price_ranges": [
{
"amount": 1,
"price_ek": 1.5,
"price_uvp": 2
},
{
"amount": 5,
"price_ek": 1,
"price_uvp": 1.5
}
],
"product_groups": [
{
"label": "Kitchen Items > Slicer",
"group": "05138008"
},
{
"label": "Beverages > Beer",
"group": "08094001"
}
],
"product_information": "Product information",
"product_number": "demo-001",
"stock_available": true,
"tags": "demo1, demo2",
"target_group": "Target group",
"video": "https://www.youtube.com/watch?v=pCHJAj5oPu0",
"weight_brutto": 13,
"weight_netto": 10
}
}
To delete a variant, translation, or product, you need to provide the identifier (e.g., p-88c62663 for a product or v-88c62663 for a variant). If you want to delete a translation in a language other than the default (English), you must also specify the language parameter.
curl --request DELETE \
"https://api.psiproductfinder.de/v2/products/delete/v-88c62663" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"language\": \"en\"
}"
{
"code": 200,
"status": "success",
"message": "Product with identifier ':identifier' has been successfully deleted."
}
To upload an image, the system requires a unique identifier for each image, which acts like an access token for the upload process. First, call the dedicated endpoint to generate the identifier. Once you have the identifier, use it to upload the image through the upload endpoint.
curl --request GET \
--get "https://api.psiproductfinder.de/v2/upload-identifier" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
{
"identifier": "57842050-b8be-4a0a-9383-130b0fa4d84e"
}
To upload images directly to the Productfinder, use a multipart form upload. Each image requires a unique identifier, which can be obtained by calling the respective endpoint beforehand. Once the images are uploaded, the returned URLs can be used as image URLs and assigned to variants.
curl --request POST \
"https://api.psiproductfinder.de/v2/upload-image" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "identifier=57842050-demo-4a0a-9383-130b0fa4d84e"\
--form "image=@/tmp/phpjfX9Zj"
{
"identifier": "57842050-demo-4a0a-9383-130b0fa4d84e",
"filename": "42d0050d623c8ec4481539245c1e6de9.png",
"absolute": "https://media.psiproductfinder.de/__temp/43630/57842050-b8be-4a0a-9383-130b0fa4d84e/42d0050d623c8ec4481539245c1e6de9.png"
}
curl --request POST \
"https://api.psiproductfinder.de/v2/products/translation" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
The Group Search allows you to query available group codes, which are also listed in the XLSX file (download). You can use the search parameter to filter results by a specific term and the locale parameter (en or de) to retrieve the corresponding results in your preferred language. This makes it easy to find and integrate group codes into your workflow.
curl --request POST \
"https://api.psiproductfinder.de/v2/productGroups/search" \
--header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"locale\": \"en\",
\"search\": \"Jackets\"
}"
[
{
"label": "Clothing",
"options": [
{
"label": "Clothing > Jackets",
"value": "01027009"
},
{
"label": "Clothing > Quilted Jackets",
"value": "01027025"
},
{
"label": "Clothing > Wind Jackets, Windcheaters",
"value": "01027031"
},
{
"label": "Clothing > Winter Jackets",
"value": "01027032"
}
]
},
{
"label": "Rucksacks",
"options": [
{
"label": "Rucksacks > Rain Jackets",
"value": "13206004"
}
]
}
]