Skip to main content

For developers working on EUDR within prduct.com

This is a introduction on how to work and test EUDR integration in prduct.com

Andreas Stensig avatar
Written by Andreas Stensig
Updated this week

This document describes a happy path from adding the related and required Master Data to adding the transactional data through the specific EUDR endpoints.

Please note that this is an advanced guide, which requires experience in setting up an API integration!

Becoming familiar with prduct terms

Starting with prduct, the compliance platform for the purchase department, you need to become familiar with multiple “data documents” in the platforms master data management.

A data document (or just document) is a data container, also used in other business systems where they often can be named everything from: Entity, Object, Record, Item or Nodes. prduct comes with both predefined documents but also allows clients to create custom documents. To distinguish between these documents, you will used the document type id.

A specific value inside a document, e.g. a products weight is in product known as attributes. Other business systems might call these values everything from: fields, property, parameter, feature, property value or data point.

Like in most master data management systems these values are bound together through data models. A data model defines what attributes are used on a specific document, and multiple can be created for each type of document. An example could be that a microwave required different attributes than a furniture. Data models is also what helps define the completeness level of a document and for that reason a data model id, is used when creating documents to define what data it should include.

Companies are both supplier and clients and is in the prduct platform an important endpoint because the collaboration about data in the supply chain requires the system knows with who to interact. A company is like a document but comes with predefined data points and the ability to add custom fields. Fields on companies are comparable to attributes while not being as comprehensive in use. Use cases for fields are often related to filtering and overview.


Setup API test in the sandbox environment

Find more about setting up the sandbox enviroment here

Creating a company

Start by creating a company using the POST method at:

Not all fields are required, but in this example you’ll see both the predefined values as well as examples of custom fields.

Example request body

{
"name": "Acme Inc",
"business_id": "123456790",
"external_id": "EXT123",
"type": "supplier",
"slug": "acme2-inc",
"local_name": "Acme Inc",
"basic_information": "This is some basic information about the company.",
"business_types": [
"Manufacturer"
],
"turnover": 1000000,
"trademarks": "Acme Trademark",
"number_of_employees": 100,
"establish_year": 2000,
"patents": "Patent information",
"customers": "Customer information",
"currency": "EUR",
"terms_of_payment": "30% deposit,70% 30days after shipping out",
"address": {
"company_name": "Acme Inc",
"address": "123 Main St",
"local_address": "123 Main St",
"zip": "12345",
"city": "New York",
"province": "NY",
"country": "US"
},
"custom_fields": {
"Delivering information via ASN": "Yes",
"External ID": "EXT123"
}
}

Be specifically aware of the following fields:

business_id - often known as business registration number or VAT

external_id – reference to your external business logic, e.g. creditor number from ERP

type – being either “supplier” or “customer”

address -> country - being the origin of the company entity

custom_fields – being all your custom created fields


Receiving Document types

Document types are received using the GET method at:

Using no params or body.

Example response:

{
"data": [
{
"id": 1,
"name": "Brand",
"slug": "brands",
"is_custom": false
},
{
"id": 2,
"name": "Product",
"slug": "products",
"is_custom": false
},
{
"id": 3,
"name": "Part",
"slug": "parts",
"is_custom": false
}
]
}

Document type id’s is important to know forward, but they don’t change over time when first defined.

Creating a data model

Data models are created using the POST method at:

Example request body

{
"name": "Test",
"document_type_id": 2,
"default": false
}

Be specifically aware of the following fields:

document_type_id – using the id 2 the data model will be for “products”.


Receiving Data Models

Document types are received using the GET method at:

Using no params or body.

Example response:

{
"data": [
{
"id": 1000000000000,
"name": "Test",
"document_type_id": 2,
"default": false
}
]
}

Data Model id’s are important to know forward, but they don’t change over time when first defined.

Creating a document (product)

Documents are created using the POST method at:

Example request body

{
"document_type_id": 2, // Document type id 2 for product
"data_model_id": 1000000000000, // Data model id you created
"external_id": "P100", // External id of product from ERP
"status": 1, // Document is set to live
"company": {
"type": "supplier", // Adding a supplier relation
"by": "external_id", // Using the external_id of the supplier
"value": "EXT123" // Supplier ID from ERP
},
"attributes": {}, // Used for attributes that are not translatable
"translations": [ // Used for attributes that are translatable (one translation is required – but no attributes on it is required)
{
"name": "Test Product 1",
"market": null,
"language": "en",
"default": true,
"second_name": "",
"functional_name": "",
"attributes": {
"hs_code": [ // example of single value attribute
{
"value": "4415"
}
],
"weight": [ // example of multi value attribute
{
"name": "net_weight",
"value": "12.3",
"unit": "kg"
}
]
}
}
]
}

Be specifically aware of the following fields:

document_type_id – using the id 2 the data model will be for “products”.

Creating a EUDR Purchase invoice (PO with multiple item rows)

EUDR Purchase invoices are creating multiple documents at once and connecting existing documents. Its purpose is to create invoices together with their item rows, product relations and protentional due diligence documents or locations. The endpoint is use with POST method at:

Example request body

{
"type": "invoice",
"external_id": "123456",
"name": "PO123456",
"created_date": "2025-08-28T14:31:34.596Z",
"internal_reference_number": "PO123456",
"supplier": {
"external_id": "EXT123"
},
"batches": [
{
"external_id": "B-123456",
"name": "PO123456-B01",
"created_date": "2025-08-28T14:53:59.369Z",
"operator_type": "TRADER",
"internal_reference_number": "PO123456-B01",
"activity_type": "domestic",
"quantity": 1,
"unit": "kg",
"product": {
"external_id": "P100"
},
"related_dds": [
{
"reference_number": "25SETVJO144350",
"verification_number": "RHSTDZU2"
}
]
}
]
}

Test the EUDR-endpoint

Find more guidance on how to test the EUDR-endpoint here.

Support and questions

If you encounter any issues or have questions along the way, feel free to contact us. Reach out via the chatbot in the lower-right corner or email us at support@prduct.com

Did this answer your question?