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 all of the following is showcased on the sandbox-environment. If you want to do it on the live-environment? You need to change the request URL, see more here
Overall
The API type is REST and the data format is JSON.
Documentation can be found in Swagger.
Becoming familiar with prduct terms
We recommend reading more about product terminology to understand the terms used in connection with an integration.
Setup API test in the sandbox environment
Find more about setting up the sandbox enviroment here
Tip: We have full guidance on how to do the happy flow with Postman here
This video covers the happy path flow and Postman setup for testing. Use any testing method you prefer, this is general guidance only.
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"
}
]
}
]
}
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 [email protected]
