Tuindeco

Tuindeco - Customer API v1 (1.0.0)

Download OpenAPI specification:

Please note: this documentation may be updated or changed. Do you have suggestions or additions? Please let us know at [email protected].

OAuth

Issue an OAuth token

Issues an access token using either the client_credentials or refresh_token grant type. This endpoint does not require authentication.

Request Body schema: application/json
required
grant_type
required
string
client_id
required
string non-empty
client_secret
required
string non-empty

Responses

Response Schema: application/json
access_token
required
string
token_type
required
string
expires_in
required
integer <int32>
refresh_token
string or null

Request samples

Content type
application/json
Example
{
  • "grant_type": "client_credentials",
  • "client_id": "my-client-id",
  • "client_secret": "my-client-secret"
}

Response samples

Content type
application/json
{
  • "access_token": "string",
  • "token_type": "Bearer",
  • "expires_in": 3600,
  • "refresh_token": "string"
}

Profile

Get customer profile

Returns the authenticated customer's profile.

Authorizations:
BearerAuth

Responses

Response Schema: application/json
required
object (customer_profile)

Response samples

Content type
application/json
{
  • "customer": {
    }
}

Assortment

Use GET /assortment to retrieve the product numbers available to you. Then retrieve the PLC status and the assortment type of these products via GET /products. Both are returned in the details object of each product.

PLC status

The field details.plcStatus indicates the lifecycle status of a product. The value is returned in the language of the request (parameter language). Example for nl: "Actief".

  • Active: the product is active and part of the current assortment.
  • Temporarily not available: the product is temporarily unavailable and cannot currently be ordered from the supplier.
  • Phase out: the product is being phased out. Once the stock runs out, the product is removed from the assortment.
  • Discontinued: the product has been removed from the assortment.

Assortment type

The field details.assortmentType mainly applies to products with a certification, such as FSC or PEFC. The value is returned in the language of the request (parameter language). Example for nl: "Primair assortiment".

Tuindeco does not always have the same certification in stock: one batch of a product may be FSC certified, while the next batch is PEFC certified. For this reason, one variant is marked as Primary assortment and the other variants as Substitute assortment.

  • Primary assortment can always be ordered, regardless of the PLC status and the stock. If there is insufficient stock, the product is ordered as a backorder.
  • Substitute assortment can only be ordered when the PLC status is Active and stock is available. A Substitute assortment product can never be ordered as a backorder.

Example: the FSC version of a product is the Primary assortment and the PEFC version is the Substitute assortment. The FSC version can always be ordered. The PEFC version can also be ordered, but only when its PLC status is Active and it is in stock.

Get assortment product numbers

Returns a paginated list of product numbers that belong to the customer's assortment.

Authorizations:
BearerAuth
query Parameters
language
string >= 2 characters
Default: "nl"

Language code (nl, en, de)

page
integer <int32> >= 1
Default: 1

Page number (1-based)

limit
integer <int32> <= 100
Default: 100

Page size (maximum 100)

Responses

Response Schema: application/json
required
object (_meta)

Standard pagination metadata

results
required
Array of strings

Response samples

Content type
application/json
{
  • "_meta": {
    },
  • "results": [
    ]
}

Product

Get product configurators

Returns a paginated list of product configurators in the customer's assortment.

Authorizations:
BearerAuth
query Parameters
productIds
required
string non-empty
Example: productIds=e1aad7c3052a443bb1c0e081fffb9dd5,fc6d36cca5fd46738d76e82509525148

Comma-separated list of product IDs. Example: "e1aad7c3052a443bb1c0e081fffb9dd5,fc6d36cca5fd46738d76e82509525148"

language
string >= 2 characters
Default: "nl"

Language code (nl, en, de)

page
integer <int32> >= 1
Default: 1

Page number (1-based)

limit
integer <int32> <= 100
Default: 100

Page size (maximum 100)

Responses

Response Schema: application/json
required
object (_meta)

Standard pagination metadata

required
Array of objects (product_configurator)

Response samples

Content type
application/json
{
  • "_meta": {
    },
  • "results": [
    ]
}

List products

Returns a paginated list of products in the customer's assortment. Optionally filter by productNumbers (comma-separated).

Authorizations:
BearerAuth
query Parameters
language
string >= 2 characters
Default: "nl"

Language code (nl, en, de)

page
integer <int32> >= 1
Default: 1

Page number (1-based)

limit
integer <int32> <= 100
Default: 100

Page size (maximum 100)

productNumbers
required
string non-empty
Example: productNumbers=SW-10001,SW-10002

Comma-separated list of product numbers. Example: "SW-10001,SW-10002"

Responses

Response Schema: application/json
required
object (_meta)

Standard pagination metadata

required
Array of objects (product)

Response samples

Content type
application/json
{}

Get product models

Returns a paginated list of product models in the customer's assortment. Optionally filter by productNumbers (comma-separated).

A product model is a product family: a group of related products that are offered as variants of one product, for example in a different colour or treatment. Product models are independent of the assortment type (Primary or Substitute assortment).

Authorizations:
BearerAuth
query Parameters
productNumbers
required
string non-empty
Example: productNumbers=SW-10001,SW-10002

Comma-separated list of product numbers. Example: "SW-10001,SW-10002"

language
string >= 2 characters
Default: "nl"

Language code (nl, en, de)

page
integer <int32> >= 1
Default: 1

Page number (1-based)

limit
integer <int32> <= 100
Default: 100

Page size (maximum 100)

Responses

Response Schema: application/json
required
object (_meta)

Standard pagination metadata

results
required
Array of any (product_model)

Response samples

Content type
application/json
{
  • "_meta": {
    },
  • "results": [
    ]
}

Stock

Lookup stock by product numbers

Returns a paginated stock mapping for the given comma-separated productNumbers. Only products in the customer's assortment are considered.

Stock threshold: for some products the Tuindeco purchasing department has set a stock threshold (see the product field details.stockThreshold). If the stock is equal to or higher than that threshold, stock contains the threshold value and the threshold field is included. Recommended display: show "more than [threshold]" instead of an exact quantity. If the threshold field is absent, stock is the exact stock level.

Authorizations:
BearerAuth
query Parameters
productNumbers
required
string non-empty
Example: productNumbers=SW-10001,SW-10002

Comma-separated list of product numbers. Example: "SW-10001,SW-10002"

language
string >= 2 characters
Default: "nl"

Language code (nl, en, de)

page
integer <int32> >= 1
Default: 1

Page number (1-based)

limit
integer <int32> <= 100
Default: 100

Page size (maximum 100)

Responses

Response Schema: application/json
required
object (_meta)

Standard pagination metadata

required
object

Map of productNumber to stock info (stock is optionally capped by threshold)

Response samples

Content type
application/json
{
  • "_meta": {
    },
  • "results": {
    }
}

Pricing

Lookup prices by product numbers

Returns price information for the given comma-separated productNumbers. Only products in the customer's assortment are considered.

Authorizations:
BearerAuth
query Parameters
productNumbers
required
string non-empty
Example: productNumbers=SW-10001,SW-10002

Comma-separated list of product numbers. Example: "SW-10001,SW-10002"

language
string >= 2 characters
Default: "nl"

Language code (nl, en, de)

limit
integer <int32> <= 100
Default: 100

Page size (maximum 100)

Responses

Response Schema: application/json
required
object (_meta)

Standard pagination metadata

required
Array of objects (price_result)

Response samples

Content type
application/json
{
  • "_meta": {
    },
  • "results": [
    ]
}

Order

Create an order from line items

Creates an order for the authenticated customer. Note: If a productNumber cannot be resolved, it is added as a cart error internally. This endpoint still returns 201 without a response body.

Ordering rules per assortment type (see the product fields details.assortmentType and details.plcStatus):

  • Primary assortment: always orderable, regardless of the PLC status and the stock. If stock is insufficient, the product is ordered as a backorder.
  • Substitute assortment: only orderable when the PLC status is Active and stock is available. Never order a Substitute assortment product as a backorder. Before placing an order for a Substitute assortment product, check the PLC status via GET /products and the stock via GET /stock.
Authorizations:
BearerAuth
Request Body schema: application/json
required
required
Array of objects (order_create_line_item) non-empty
shippingAddressId
string or null <uuid>

Optional shipping address id to override the customer's active shipping address.

deliveryWeek
integer >= 1

Optional delivery week number (positive integer). If omitted, the server defaults to the current ISO week.

reference
string or null

Optional order reference.

object or null

Optional one-time delivery address for dropshipment. When provided the order is shipped to this address instead of the customer's active shipping address. The address is not saved to the customer's address book.

Responses

Request samples

Content type
application/json
Example
{
  • "lineItems": [
    ]
}

Response samples

Content type
application/json
{
  • "error": "Invalid request body.",
  • "exception": "Expected a non-empty-string at key lineItems.0.productNumber"
}

List orders

Returns a paginated list of customer orders. Optionally filter by status.

Authorizations:
BearerAuth
query Parameters
language
string >= 2 characters
Default: "nl"

Language code (nl, en, de)

page
integer <int32> >= 1
Default: 1

Page number (1-based)

limit
integer <int32> <= 100
Default: 100

Page size (maximum 100)

status
string (order_status)
Enum: "Open" "Done" "Paid" "Paid In Full" "Pending Approval" "Pending Fulfillment" "Partially Fulfilled" "Fulfilled" "Partially Billed" "Billed" "Closed" "Cancelled" "In Progress" "Shipped (partially)" "Paid (partially)" "Shipped" "Pending Billing" "Pending Billing/Partially Fulfilled"

Optional order status filter (status key).

from
string <date>
Example: from=2026-01-01

Start date (inclusive) for filtering orders.

to
string <date>
Example: to=2026-12-31

End date (inclusive) for filtering orders.

Responses

Response Schema: application/json
required
object (_meta)

Standard pagination metadata

required
Array of objects (order)

Response samples

Content type
application/json
{
  • "_meta": {
    },
  • "results": [
    ]
}