{
  "openapi": "3.0.0",
  "info": {
    "title": "Corenio API",
    "description": "The API provides access to:\n\t    <ul>\n\t    <li>Categories</li>\n\t    <li>Products</li>\n\t    <li>Orders</li> \n\t    </ul>",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.corenio.com",
      "description": "Api Server"
    },
    {
      "url": "https://corenio.backend.local",
      "description": "Local development"
    }
  ],
  "paths": {
    "/api/v1.0/carts/{cart_id}/items/list": {
      "get": {
        "tags": [
          "Carts"
        ],
        "summary": "List cart items",
        "description": "Returns a paginated list of items from a cart belonging to the authenticated user.",
        "operationId": "listCartItems",
        "parameters": [
          {
            "name": "cart_id",
            "in": "path",
            "description": "ID of the cart whose items should be returned.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 19403076
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items returned per page.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 30,
              "minimum": 1,
              "example": 10
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1,
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cart items successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "cart_items",
                    "total_items",
                    "pages",
                    "items_per_page",
                    "current_page",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "cart_items": {
                      "description": "Cart item collection keyed by cart item ID.",
                      "type": "object",
                      "additionalProperties": {
                        "required": [
                          "item_id",
                          "quantity"
                        ],
                        "properties": {
                          "item_id": {
                            "description": "Unique ID of the cart item.",
                            "type": "integer",
                            "example": 1508
                          },
                          "quantity": {
                            "description": "Quantity of the item in the cart.",
                            "type": "integer",
                            "minimum": 1,
                            "example": 3
                          }
                        },
                        "type": "object"
                      }
                    },
                    "total_items": {
                      "type": "integer",
                      "example": 3
                    },
                    "pages": {
                      "type": "integer",
                      "example": 1
                    },
                    "items_per_page": {
                      "type": "integer",
                      "example": 10
                    },
                    "current_page": {
                      "type": "integer",
                      "example": 1
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid cart ID or pagination parameters."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The cart was not found or contains no items."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/carts/{cart_id}/items": {
      "post": {
        "tags": [
          "Carts"
        ],
        "summary": "Add an item to a cart",
        "description": "Adds a product to a cart belonging to the authenticated user.",
        "operationId": "addCartItem",
        "parameters": [
          {
            "name": "cart_id",
            "in": "path",
            "description": "ID of the cart to which the item will be added.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 19403076
            }
          }
        ],
        "requestBody": {
          "description": "Product and quantity to add to the cart.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "product_id",
                  "quantity"
                ],
                "properties": {
                  "product_id": {
                    "description": "ID of the product to add.",
                    "type": "integer",
                    "example": 48291
                  },
                  "quantity": {
                    "description": "Quantity to add. Must be between 1 and the maximum allowed item quantity.",
                    "type": "integer",
                    "default": 1,
                    "minimum": 1,
                    "example": 2
                  },
                  "configuration_id": {
                    "description": "Optional ID of the selected product configuration.",
                    "type": "integer",
                    "example": 125,
                    "nullable": true
                  },
                  "user_input": {
                    "description": "Optional product configuration input supplied by the user.",
                    "type": "object",
                    "example": {
                      "engraving": "Example",
                      "color": "black"
                    },
                    "nullable": true,
                    "additionalProperties": {}
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Cart item successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "item_id",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "item_id": {
                      "description": "ID of the newly created cart item.",
                      "type": "integer",
                      "example": 1508
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The product_id, quantity, configuration_id, or user_input field is invalid."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The cart or product was not found."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Carts"
        ],
        "summary": "Remove items from a cart",
        "description": "Removes one or more specified items from a cart belonging to the authenticated user.",
        "operationId": "removeCartItems",
        "parameters": [
          {
            "name": "cart_id",
            "in": "path",
            "description": "ID of the cart.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 19403076
            }
          }
        ],
        "requestBody": {
          "description": "An array containing the IDs of the cart items to remove.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "cartitem_ids"
                ],
                "properties": {
                  "cartitem_ids": {
                    "description": "Cart item IDs to remove. At least one ID is required.",
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "minItems": 1,
                    "uniqueItems": true,
                    "example": [
                      1508,
                      1509,
                      1512
                    ]
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cart items successfully removed.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "removed",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "removed": {
                      "description": "IDs of the cart items that were successfully removed.",
                      "type": "array",
                      "items": {
                        "type": "integer"
                      },
                      "example": [
                        1508,
                        1509,
                        1512
                      ]
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The cartitem_ids field is missing, empty, or invalid."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The cart was not found or none of the specified cart items were found."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/carts/{cart_id}/items/{cartitem_id}": {
      "patch": {
        "tags": [
          "Carts"
        ],
        "summary": "Update cart item quantity",
        "description": "Updates the quantity of an existing item in a cart belonging to the authenticated user.",
        "operationId": "setCartItemQuantity",
        "parameters": [
          {
            "name": "cart_id",
            "in": "path",
            "description": "ID of the cart.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 19403076
            }
          },
          {
            "name": "cartitem_id",
            "in": "path",
            "description": "ID of the item in the cart.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 1508
            }
          }
        ],
        "requestBody": {
          "description": "The new quantity for the cart item.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "quantity"
                ],
                "properties": {
                  "quantity": {
                    "description": "New quantity for the cart item. Must be between 1 and the maximum allowed item quantity.",
                    "type": "integer",
                    "minimum": 1,
                    "example": 3
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cart item quantity successfully updated.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "cart_id",
                    "cartitem_id",
                    "new_quantity",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "cart_id": {
                      "description": "ID of the updated cart.",
                      "type": "integer",
                      "example": 19403076
                    },
                    "cartitem_id": {
                      "description": "ID of the updated cart item.",
                      "type": "integer",
                      "example": 1508
                    },
                    "new_quantity": {
                      "description": "The updated quantity of the cart item.",
                      "type": "integer",
                      "minimum": 1,
                      "example": 3
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The quantity field is missing or outside the allowed range."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The cart or cart item was not found."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/carts/create": {
      "post": {
        "tags": [
          "Carts"
        ],
        "summary": "Create a cart",
        "description": "Creates a new empty cart for the authenticated user. No request body is required.",
        "operationId": "createCart",
        "responses": {
          "201": {
            "description": "Cart successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "cart_id",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "cart_id": {
                      "description": "ID of the newly created cart.",
                      "type": "integer",
                      "example": 19403076
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/carts/{cart_id}/finalize": {
      "post": {
        "tags": [
          "Carts"
        ],
        "summary": "Finalize a cart",
        "description": "Converts a cart belonging to the authenticated user into a new order.",
        "operationId": "finalizeCart",
        "parameters": [
          {
            "name": "cart_id",
            "in": "path",
            "description": "ID of the cart to finalize.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 19403076
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Cart successfully finalized and order created.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "order_id",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "order_id": {
                      "description": "ID of the newly created order.",
                      "type": "integer",
                      "example": 205481
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The cart ID is invalid or the cart cannot be finalized."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The cart was not found or does not belong to the authenticated user."
          },
          "409": {
            "description": "The cart has already been finalized."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/carts/{cart_id}/shipping": {
      "post": {
        "tags": [
          "Carts"
        ],
        "summary": "Set the cart shipping method",
        "description": "Selects an available shipping method for a cart belonging to the authenticated user.",
        "operationId": "setCartShippingMethod",
        "parameters": [
          {
            "name": "cart_id",
            "in": "path",
            "description": "ID of the cart.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 19403076
            }
          }
        ],
        "requestBody": {
          "description": "The shipping method to select for the cart.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "shipping_method_id"
                ],
                "properties": {
                  "shipping_method_id": {
                    "description": "ID of an available shipping method.",
                    "type": "integer",
                    "example": 12
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Shipping method successfully selected.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "shipping_method_id",
                    "shipping_method",
                    "shipping_price_ex_vat",
                    "shipping_price_vat",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "shipping_method_id": {
                      "description": "ID of the selected shipping method.",
                      "type": "integer",
                      "example": 12
                    },
                    "shipping_method": {
                      "description": "Name of the selected shipping method.",
                      "type": "string",
                      "example": "Standard shipping"
                    },
                    "currency": {
                      "description": "Currency.",
                      "type": "string",
                      "example": "EUR"
                    },
                    "shipping_price_ex_vat": {
                      "description": "Shipping price excluding VAT.",
                      "type": "number",
                      "format": "float",
                      "example": 7
                    },
                    "shipping_price_vat": {
                      "description": "VAT charged on the shipping price.",
                      "type": "number",
                      "format": "float",
                      "example": 1.47
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The shipping_method_id is missing, invalid, or unavailable for this cart."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The cart was not found or does not belong to the authenticated user."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/carts/{cart_id}/shippingmethods/{language}": {
      "get": {
        "tags": [
          "Carts"
        ],
        "summary": "List available shipping methods",
        "description": "Returns the shipping methods available for a cart based on its contents and shipping address.",
        "operationId": "getCartShippingMethods",
        "parameters": [
          {
            "name": "cart_id",
            "in": "path",
            "description": "ID of the cart.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 19403076
            }
          },
          {
            "name": "language",
            "in": "path",
            "description": "Two-character language code used for the translated title and description.",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "nl",
                "en",
                "de"
              ],
              "example": "nl"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Available shipping methods successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "shipping_methods",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "shipping_methods": {
                      "description": "Shipping methods available for the cart.",
                      "type": "array",
                      "items": {
                        "required": [
                          "id",
                          "icon",
                          "icon_thumb",
                          "title",
                          "description",
                          "price"
                        ],
                        "properties": {
                          "id": {
                            "description": "ID of the shipping method.",
                            "type": "integer",
                            "example": 12
                          },
                          "icon": {
                            "description": "URL of the shipping method icon.",
                            "type": "string",
                            "format": "uri",
                            "example": "https://example.com/images/shipping/dhl.svg"
                          },
                          "icon_thumb": {
                            "description": "URL of the thumbnail version of the icon.",
                            "type": "string",
                            "format": "uri",
                            "example": "https://example.com/images/shipping/thumb_dhl.svg"
                          },
                          "title": {
                            "description": "Translated name of the shipping method.",
                            "type": "string",
                            "example": "Standaard verzending"
                          },
                          "description": {
                            "description": "Translated description of the shipping method.",
                            "type": "string",
                            "example": "Levering binnen 1 tot 2 werkdagen."
                          },
                          "price": {
                            "required": [
                              "currency",
                              "vat_percentage",
                              "price_ex_vat"
                            ],
                            "properties": {
                              "currency": {
                                "description": "ISO 4217 currency code.",
                                "type": "string",
                                "example": "EUR"
                              },
                              "vat_percentage": {
                                "description": "VAT percentage applied to the shipping price.",
                                "type": "number",
                                "format": "float",
                                "example": 21
                              },
                              "price_ex_vat": {
                                "description": "Shipping price excluding VAT.",
                                "type": "string",
                                "example": "7.00"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The cart_id or language parameter is invalid."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The cart was not found or no shipping methods are available."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/carts/list": {
      "get": {
        "tags": [
          "Carts"
        ],
        "summary": "List carts",
        "description": "Returns a paginated list of carts belonging to the authenticated user.",
        "operationId": "listCarts",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of carts returned per page. The maximum allowed value is 30.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 30,
              "example": 10
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1,
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Carts successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "carts",
                    "total_items",
                    "pages",
                    "items_per_page",
                    "current_page",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "carts": {
                      "description": "Cart collection keyed by cart ID.",
                      "type": "object",
                      "additionalProperties": {
                        "required": [
                          "cart_id",
                          "helpdeskcode",
                          "item_quantity",
                          "item_subtotal",
                          "shipping",
                          "total_vat",
                          "total_ex_vat",
                          "total"
                        ],
                        "properties": {
                          "cart_id": {
                            "type": "integer",
                            "example": 19403076
                          },
                          "helpdeskcode": {
                            "type": "string",
                            "example": "bf04e"
                          },
                          "item_quantity": {
                            "type": "integer",
                            "example": 3
                          },
                          "item_subtotal": {
                            "description": "Formatted subtotal of all cart items.",
                            "type": "string",
                            "example": "€ 97,05"
                          },
                          "shipping": {
                            "description": "Formatted shipping cost.",
                            "type": "string",
                            "example": "€ 7,00"
                          },
                          "total_vat": {
                            "description": "Formatted total VAT amount.",
                            "type": "string",
                            "example": "€ 21,85"
                          },
                          "total_ex_vat": {
                            "description": "Formatted total excluding VAT.",
                            "type": "string",
                            "example": "€ 104,05"
                          },
                          "total": {
                            "description": "Formatted total including VAT.",
                            "type": "string",
                            "example": "€ 125,90"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "total_items": {
                      "type": "integer",
                      "example": 2
                    },
                    "pages": {
                      "type": "integer",
                      "example": 1
                    },
                    "items_per_page": {
                      "type": "integer",
                      "example": 10
                    },
                    "current_page": {
                      "type": "integer",
                      "example": 1
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "No carts were found for the authenticated user."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/carts/{cart_id}": {
      "delete": {
        "tags": [
          "Carts"
        ],
        "summary": "Remove a cart",
        "description": "Permanently removes a cart belonging to the authenticated user.",
        "operationId": "removeCart",
        "parameters": [
          {
            "name": "cart_id",
            "in": "path",
            "description": "ID of the cart to remove.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 19403076
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cart successfully removed.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "removed",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "removed": {
                      "description": "ID of the cart that was removed.",
                      "type": "integer",
                      "example": 19403076
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The cart_id path parameter is invalid."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The cart was not found or does not belong to the authenticated user."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/categories/byParent": {
      "post": {
        "tags": [
          "Categories"
        ],
        "description": "Query parent id must be provided.",
        "operationId": "getCategoriesByParent",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "parent_id"
                ],
                "properties": {
                  "parent_id": {
                    "description": "An category ID.",
                    "type": "integer"
                  },
                  "language": {
                    "description": "The language of the response.",
                    "type": "string",
                    "default": "en"
                  },
                  "page": {
                    "description": "The page number for pagination, starting from 0.",
                    "type": "integer",
                    "default": 1
                  },
                  "limit": {
                    "description": "The maximum number of items per page.",
                    "type": "integer",
                    "default": 10
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get categories by parent_id successfully."
          },
          "400": {
            "description": "Invalid input. parent_id must be provided."
          },
          "404": {
            "description": "No categories found."
          }
        }
      }
    },
    "/api/v1.0/categories/search": {
      "post": {
        "tags": [
          "Categories"
        ],
        "description": "Query search_term must be provided.",
        "operationId": "getCategoriesSearch",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "search_term"
                ],
                "properties": {
                  "search_term": {
                    "description": "1 or multiple search_term (use variations for more hits) title, seo_path etc.",
                    "type": "array",
                    "items": {
                      "type": "string",
                      "default": ""
                    },
                    "example": [
                      "name, seo_path"
                    ]
                  },
                  "language": {
                    "description": "The language of the response.",
                    "type": "string",
                    "default": "en"
                  },
                  "page": {
                    "description": "The page number for pagination, starting from 0.",
                    "type": "integer",
                    "default": 1
                  },
                  "limit": {
                    "description": "The maximum number of items per page.",
                    "type": "integer",
                    "default": 10
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get categories by search_term."
          },
          "400": {
            "description": "Invalid input. search_term must be provided."
          },
          "404": {
            "description": "No categories found."
          }
        }
      }
    },
    "/api/v1.0/orders": {
      "get": {
        "tags": [
          "Orders"
        ],
        "summary": "List orders",
        "description": "Returns a filtered and paginated list of orders belonging to the authenticated user.",
        "operationId": "listOrders",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of orders returned per page.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 30,
              "minimum": 1,
              "example": 10
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1,
              "example": 1
            }
          },
          {
            "name": "language",
            "in": "query",
            "description": "Two-character language code used for translated order data.",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2,
              "minLength": 2,
              "example": "nl"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Comma-separated list of order status IDs. An order is returned when its status matches one of the supplied IDs.",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d+(,\\d+)*$",
              "example": "1,3,4"
            }
          },
          {
            "name": "date_from",
            "in": "query",
            "description": "Return orders created on or after this date.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-01-01"
            }
          },
          {
            "name": "date_till",
            "in": "query",
            "description": "Return orders created on or before this date.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-08-31"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Orders successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "orders",
                    "total_items",
                    "pages",
                    "items_per_page",
                    "current_page",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "orders": {
                      "description": "Order collection keyed by order ID.",
                      "type": "object",
                      "additionalProperties": {
                        "description": "Order data generated by OrderListDTO.",
                        "type": "object"
                      }
                    },
                    "total_items": {
                      "description": "Total number of orders matching the filters.",
                      "type": "integer",
                      "minimum": 0,
                      "example": 24
                    },
                    "pages": {
                      "description": "Total number of available pages.",
                      "type": "integer",
                      "minimum": 0,
                      "example": 3
                    },
                    "items_per_page": {
                      "description": "Maximum number of orders returned per page.",
                      "type": "integer",
                      "example": 10
                    },
                    "current_page": {
                      "description": "Current page number.",
                      "type": "integer",
                      "minimum": 1,
                      "example": 1
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "One or more pagination, language, or date parameters are invalid."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "No orders matching the supplied filters were found."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/orders/paymentlink": {
      "post": {
        "tags": [
          "Orders"
        ],
        "summary": "Create an order payment link",
        "description": "Creates a payment link for the outstanding amount, or a specified partial amount, of an order belonging to the authenticated user.",
        "operationId": "createOrderPaymentLink",
        "requestBody": {
          "description": "The order, payment method and optional partial payment amount.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "order_id",
                  "payment_method"
                ],
                "properties": {
                  "order_id": {
                    "description": "ID of the order for which the payment link should be created.",
                    "type": "integer",
                    "example": 205481
                  },
                  "payment_method": {
                    "description": "ID of the payment method to use.",
                    "type": "integer",
                    "example": 3
                  },
                  "payment_amount": {
                    "description": "Optional partial payment amount. When omitted, a link for the total unpaid amount is created. The amount cannot exceed the outstanding order amount.",
                    "type": "number",
                    "format": "float",
                    "minimum": 0.01,
                    "example": 50,
                    "nullable": true
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Payment link successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "order_id",
                    "total_unpaid",
                    "payment_method",
                    "payment_url",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "order_id": {
                      "description": "ID of the order.",
                      "type": "integer",
                      "example": 205481
                    },
                    "total_unpaid": {
                      "description": "Total outstanding amount on the order before this payment is completed.",
                      "type": "number",
                      "format": "float",
                      "example": 125.9
                    },
                    "payment_method": {
                      "description": "Name of the selected payment method.",
                      "type": "string",
                      "example": "iDEAL"
                    },
                    "payment_url": {
                      "description": "URL where the customer can complete the payment.",
                      "type": "string",
                      "format": "uri",
                      "example": "https://payments.example.com/pay/abc123"
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required field is missing, the payment amount is invalid, the payment method is unavailable, or the order has already been fully paid."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The order was not found or does not belong to the authenticated user."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/orders/{order_id}/pdf/{type}": {
      "get": {
        "tags": [
          "Orders"
        ],
        "summary": "Get an order document as PDF",
        "description": "Returns an order, invoice, or credit document as a Base64-encoded PDF for an order belonging to the authenticated user.",
        "operationId": "getOrderPdf",
        "parameters": [
          {
            "name": "order_id",
            "in": "path",
            "description": "ID of the order.",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 205481
            }
          },
          {
            "name": "type",
            "in": "path",
            "description": "Type of PDF document to generate.",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "order",
                "invoice",
                "credit"
              ],
              "example": "invoice"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PDF document successfully generated.",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "order_id",
                    "filename",
                    "pdf_base64",
                    "format",
                    "success",
                    "error_message"
                  ],
                  "properties": {
                    "order_id": {
                      "description": "ID of the order.",
                      "type": "integer",
                      "example": 205481
                    },
                    "filename": {
                      "description": "Suggested filename for the PDF document.",
                      "type": "string",
                      "example": "invoice-205481.pdf"
                    },
                    "pdf_base64": {
                      "description": "Base64-encoded contents of the PDF document.",
                      "type": "string",
                      "format": "byte",
                      "example": "JVBERi0xLjQKJc..."
                    },
                    "format": {
                      "type": "string",
                      "example": "json"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "error_message": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The order_id is invalid or the document type is not order, invoice, or credit."
          },
          "401": {
            "description": "Invalid, missing, or expired authentication token."
          },
          "404": {
            "description": "The order or requested PDF document was not found."
          },
          "500": {
            "description": "The PDF document could not be generated."
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/products/stock/{identifier}": {
      "get": {
        "tags": [
          "Products"
        ],
        "description": "This method allows to query the current stock level of a specific product. The enquiry relates to a single product ID.<br>The enquiry parameter can be the supplier's <b>Product ID</b> or  <b>Product EAN</b> or  <b>Product SKU</b>.",
        "operationId": "Stock",
        "parameters": [
          {
            "name": "identifier",
            "in": "path",
            "description": "<b>ID</b> or <b>EAN</b> or <b>SKU</b>.",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9A-Z]+$"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "ean",
                "sku"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get stock",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product"
                }
              }
            }
          },
          "404": {
            "description": "Product Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "example": false
                    },
                    "error_message": {
                      "properties": {
                        "code": {
                          "type": "integer",
                          "example": 404
                        },
                        "message": {
                          "type": "string",
                          "example": "Product Not Found"
                        },
                        "details": {
                          "type": "string",
                          "example": "The product with the specified ID: '{productId}', could not be found. Please verify the ID and try again."
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1.0/products/search": {
      "post": {
        "tags": [
          "Products"
        ],
        "description": "Query product ids. By [ brands:name, brand_ids:ids, categories:seo_path, categorie_ids:ids, producttype_ids:ids, vehicle_ids, ktype_ids, property_ids ].",
        "operationId": "findProductIds",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "filters": {
                    "description": "The filters ",
                    "properties": {
                      "productnumbers": {
                        "description": "1 or multiple productnumbers.",
                        "type": "array",
                        "items": {
                          "type": "string",
                          "default": ""
                        },
                        "example": [
                          "productnumber"
                        ]
                      },
                      "eancodes": {
                        "description": "1 or multiple eancodes.",
                        "type": "array",
                        "items": {
                          "type": "string",
                          "default": ""
                        },
                        "example": [
                          "eancode"
                        ]
                      },
                      "brands": {
                        "description": "1 or multiple brand names.",
                        "type": "array",
                        "items": {
                          "type": "string",
                          "default": ""
                        },
                        "example": [
                          "Brand name"
                        ]
                      },
                      "brand_ids": {
                        "description": "1 or multiple brand ids.",
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "default": 0
                        },
                        "example": [
                          1,
                          2,
                          3
                        ]
                      },
                      "categories": {
                        "description": "1 or multiple category seo_paths.",
                        "type": "array",
                        "items": {
                          "type": "string",
                          "default": ""
                        },
                        "example": [
                          "/parts/subcat"
                        ]
                      },
                      "categorie_ids": {
                        "description": "1 or multiple category ids.",
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "default": 0
                        },
                        "example": [
                          1,
                          2,
                          3
                        ]
                      },
                      "producttype_ids": {
                        "description": "1 or multiple producttype ids.",
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "default": 0
                        },
                        "example": [
                          1,
                          2,
                          3
                        ]
                      },
                      "vehicle_ids": {
                        "description": "1 or multiple internal vehicle ids.",
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "default": 0
                        },
                        "example": [
                          1,
                          2,
                          3
                        ]
                      },
                      "ktype_ids": {
                        "description": "1 or multiple ktype ids.",
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "default": 0
                        },
                        "example": [
                          1,
                          2,
                          3
                        ]
                      },
                      "property_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        },
                        "example": [
                          120,
                          151
                        ]
                      }
                    },
                    "type": "object"
                  },
                  "page": {
                    "description": "The page number for pagination, starting from 0.",
                    "type": "integer",
                    "default": 1
                  },
                  "limit": {
                    "description": "The maximum number of items per page.",
                    "type": "integer",
                    "default": 10,
                    "maximum": 50,
                    "minimum": 10
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get product ids successfully."
          },
          "400": {
            "description": "Invalid input. 1 or multiple variables must be provided."
          }
        }
      }
    },
    "/api/v1.0/products/search/filters": {
      "post": {
        "tags": [
          "Products"
        ],
        "summary": "Get product filters based on search criteria",
        "description": "Returns available filters (brands, properties, etc.) based on the provided product search filters.",
        "operationId": "getProductSearchFilters",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "filters": {
                    "properties": {
                      "productnumbers": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "example": [
                          "12345",
                          "67890"
                        ]
                      },
                      "eancodes": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "example": [
                          "8712345678901"
                        ]
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "example": [
                          "engine-parts"
                        ]
                      },
                      "category_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        },
                        "example": [
                          10,
                          20
                        ]
                      },
                      "brands": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "example": [
                          "FEBI BILSTEIN"
                        ]
                      },
                      "brand_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        },
                        "example": [
                          19,
                          60
                        ]
                      },
                      "producttype_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        },
                        "example": [
                          1,
                          2
                        ]
                      },
                      "vehicle_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        },
                        "example": [
                          1001
                        ]
                      },
                      "ktype_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        },
                        "example": [
                          12345
                        ]
                      },
                      "property_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        },
                        "example": [
                          120,
                          151
                        ]
                      }
                    },
                    "type": "object"
                  },
                  "limit": {
                    "type": "integer",
                    "maximum": 50,
                    "example": 10
                  },
                  "page": {
                    "type": "integer",
                    "minimum": 1,
                    "example": 1
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Filters retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "total_items": {
                      "type": "integer",
                      "example": 2
                    },
                    "pages": {
                      "type": "integer",
                      "example": 1
                    },
                    "items_per_pages": {
                      "type": "integer",
                      "example": 10
                    },
                    "current_page": {
                      "type": "integer",
                      "example": 1
                    },
                    "filters": {
                      "type": "object",
                      "example": {
                        "5_property_120": {
                          "id": "property_120",
                          "title": "fitting position",
                          "filters": [
                            {
                              "title": "front axle left",
                              "id": 153,
                              "icon": "",
                              "count": 2,
                              "selected": false
                            },
                            {
                              "title": "front axle right",
                              "id": 154,
                              "icon": "",
                              "count": 1,
                              "selected": false
                            },
                            {
                              "title": "front",
                              "id": 937,
                              "icon": "",
                              "count": 1,
                              "selected": false
                            },
                            {
                              "title": "upper",
                              "id": 1283,
                              "icon": "",
                              "count": 1,
                              "selected": false
                            }
                          ],
                          "selected": null
                        }
                      },
                      "additionalProperties": {
                        "properties": {
                          "id": {
                            "type": "string",
                            "example": "property_120"
                          },
                          "title": {
                            "type": "string",
                            "example": "fitting position"
                          },
                          "filters": {
                            "type": "array",
                            "items": {
                              "properties": {
                                "title": {
                                  "type": "string",
                                  "example": "front axle left"
                                },
                                "id": {
                                  "type": "integer",
                                  "example": 153
                                },
                                "icon": {
                                  "type": "string",
                                  "example": ""
                                },
                                "count": {
                                  "type": "integer",
                                  "example": 2
                                },
                                "selected": {
                                  "type": "boolean",
                                  "example": false
                                }
                              },
                              "type": "object"
                            }
                          },
                          "selected": {
                            "example": null,
                            "nullable": true
                          }
                        },
                        "type": "object"
                      }
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "No products found",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "type": "string",
                      "example": "No Products Found"
                    },
                    "message": {
                      "type": "string",
                      "example": "The products with the specified filters could not be found."
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Missing filters",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "type": "string",
                      "example": "Missing required filters"
                    },
                    "fields": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1.0/products/data": {
      "post": {
        "tags": [
          "Products"
        ],
        "description": "Query product data.ids and language must be provided.",
        "operationId": "getProducts",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "products",
                  "language"
                ],
                "properties": {
                  "products": {
                    "description": "An array of product IDs.",
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "default": ""
                    }
                  },
                  "language": {
                    "description": "The language of the response.",
                    "type": "string",
                    "default": "en"
                  },
                  "options": {
                    "description": "The optional flags",
                    "properties": {
                      "vehicle_id": {
                        "description": "Vehicle id required for vehicle properties.",
                        "type": "integer",
                        "default": "0"
                      },
                      "oenumbers": {
                        "description": "Include OE numbers.",
                        "type": "boolean",
                        "default": false
                      },
                      "images": {
                        "description": "Include images.",
                        "type": "boolean",
                        "default": false
                      },
                      "usageNumbers": {
                        "description": "Include usage numbers.",
                        "type": "boolean",
                        "default": false
                      },
                      "measurements": {
                        "description": "Include measurements.",
                        "type": "boolean",
                        "default": false
                      },
                      "package_measurements": {
                        "description": "Include package measurements.",
                        "type": "boolean",
                        "default": false
                      },
                      "stock": {
                        "description": "Include internal,external stock.",
                        "type": "boolean",
                        "default": false
                      },
                      "categories": {
                        "description": "Include categories.",
                        "type": "boolean",
                        "default": false
                      },
                      "brand": {
                        "description": "Include brand.",
                        "type": "boolean",
                        "default": false
                      },
                      "properties": {
                        "description": "Include properties.",
                        "type": "boolean",
                        "default": false
                      }
                    },
                    "type": "object"
                  },
                  "page": {
                    "description": "The page number for pagination, starting from 0.",
                    "type": "integer",
                    "default": 1
                  },
                  "limit": {
                    "description": "The maximum number of items per page.",
                    "type": "integer",
                    "default": 10,
                    "maximum": 50,
                    "minimum": 10
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get product data successfully."
          },
          "400": {
            "description": "Invalid input. Either products and language or categorieUrl and language must be provided."
          }
        }
      }
    },
    "/api/v1.0/products/data/vehicles": {
      "post": {
        "tags": [
          "Products"
        ],
        "description": "Query product id must be provided.",
        "operationId": "getProductVehicles",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "product_id"
                ],
                "properties": {
                  "product_id": {
                    "description": "An product ID.",
                    "type": "integer"
                  },
                  "page": {
                    "description": "The page number for pagination, starting from 0.",
                    "type": "integer",
                    "default": 1
                  },
                  "limit": {
                    "description": "The maximum number of items per page.",
                    "type": "integer",
                    "default": 10
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get product vehicles successfully."
          },
          "400": {
            "description": "Invalid input. product_id must be provided."
          },
          "404": {
            "description": "No vehicles found."
          }
        }
      }
    },
    "/api/v1.0/products/alternatives": {
      "post": {
        "tags": [
          "Products"
        ],
        "description": "Query product data, alternatives to the supplied product_id",
        "operationId": "getProductsAlternatives",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "product_id",
                  "language",
                  "vehicle_id"
                ],
                "properties": {
                  "product_id": {
                    "description": "Product id.",
                    "type": "integer",
                    "default": ""
                  },
                  "language": {
                    "description": "The language of the response.",
                    "type": "string",
                    "default": "en"
                  },
                  "vehicle_id": {
                    "description": "The vehicle_id required for compatibility.",
                    "type": "integer",
                    "default": ""
                  },
                  "brand_id": {
                    "description": "The brand_id (optional)",
                    "type": "integer",
                    "default": ""
                  },
                  "options": {
                    "description": "The optional flags",
                    "properties": {
                      "images": {
                        "description": "Include images.",
                        "type": "boolean",
                        "default": false
                      },
                      "stock": {
                        "description": "Include internal,external stock.",
                        "type": "boolean",
                        "default": false
                      },
                      "categories": {
                        "description": "Include categories.",
                        "type": "boolean",
                        "default": false
                      },
                      "brand": {
                        "description": "Include brand.",
                        "type": "boolean",
                        "default": false
                      },
                      "properties": {
                        "description": "Include properties.",
                        "type": "boolean",
                        "default": false
                      }
                    },
                    "type": "object"
                  },
                  "page": {
                    "description": "The page number for pagination, starting from 0.",
                    "type": "integer",
                    "default": 1
                  },
                  "limit": {
                    "description": "The maximum number of items per page.",
                    "type": "integer",
                    "default": 10,
                    "maximum": 50,
                    "minimum": 10
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get product data successfully."
          },
          "400": {
            "description": "Invalid input. products, language and vehicle_id must be provided."
          }
        }
      }
    },
    "/api/v1.0/products/maintenance": {
      "post": {
        "tags": [
          "Products"
        ],
        "description": "Query product data, related for the maintenance of the requested product",
        "operationId": "getProductsMaintenance",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "product_id",
                  "language"
                ],
                "properties": {
                  "product_id": {
                    "description": "Product id.",
                    "type": "integer",
                    "default": ""
                  },
                  "language": {
                    "description": "The language of the response.",
                    "type": "string",
                    "default": "en"
                  },
                  "options": {
                    "description": "The optional flags",
                    "properties": {
                      "images": {
                        "description": "Include images.",
                        "type": "boolean",
                        "default": false
                      },
                      "stock": {
                        "description": "Include internal,external stock.",
                        "type": "boolean",
                        "default": false
                      },
                      "categories": {
                        "description": "Include categories.",
                        "type": "boolean",
                        "default": false
                      },
                      "brand": {
                        "description": "Include brand.",
                        "type": "boolean",
                        "default": false
                      },
                      "properties": {
                        "description": "Include properties.",
                        "type": "boolean",
                        "default": false
                      }
                    },
                    "type": "object"
                  },
                  "page": {
                    "description": "The page number for pagination, starting from 0.",
                    "type": "integer",
                    "default": 1
                  },
                  "limit": {
                    "description": "The maximum number of items per page.",
                    "type": "integer",
                    "default": 10,
                    "maximum": 50,
                    "minimum": 10
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get product data successfully."
          },
          "400": {
            "description": "Invalid input. products, language and vehicle_id must be provided."
          }
        }
      }
    },
    "/api/v1.0/users/create": {
      "post": {
        "tags": [
          "Users"
        ],
        "summary": "Create a new user",
        "description": "Creates a new user account using the provided user information. Required fields depend on the configured default signup fields in the user group.",
        "operationId": "createUser",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "username": {
                    "description": "Username for login. If the system is configured to use email as username, this must be a valid email address.",
                    "type": "string",
                    "example": "john@example.com"
                  },
                  "email": {
                    "description": "Email address of the user.",
                    "type": "string",
                    "example": "john@example.com"
                  },
                  "password": {
                    "description": "User password. If not provided, a random password will be generated automatically.",
                    "type": "string",
                    "example": "StrongPassword123"
                  },
                  "gender": {
                    "description": "Gender of the user.",
                    "type": "string",
                    "example": "male"
                  },
                  "firstname": {
                    "type": "string",
                    "example": "John"
                  },
                  "lastname": {
                    "type": "string",
                    "example": "Doe"
                  },
                  "address": {
                    "type": "string",
                    "example": "Main Street"
                  },
                  "address2": {
                    "type": "string",
                    "example": "Apartment 5"
                  },
                  "addressnumber": {
                    "type": "string",
                    "example": "12"
                  },
                  "postalcode": {
                    "type": "string",
                    "example": "1234AB"
                  },
                  "city": {
                    "type": "string",
                    "example": "Amsterdam"
                  },
                  "country": {
                    "description": "Country code (ISO2 or ISO3). Will be converted internally to the country ID.",
                    "type": "string",
                    "example": "NL"
                  },
                  "state": {
                    "type": "string",
                    "example": "North Holland"
                  },
                  "phone": {
                    "type": "string",
                    "example": "+31 20 1234567"
                  },
                  "mobphone": {
                    "type": "string",
                    "example": "+31 6 12345678"
                  },
                  "companyname": {
                    "type": "string",
                    "example": "Example BV"
                  },
                  "chambercommerce": {
                    "description": "Chamber of Commerce registration number.",
                    "type": "string",
                    "example": "12345678"
                  },
                  "eori_number": {
                    "type": "string",
                    "example": "NL123456789"
                  },
                  "vatnumber": {
                    "type": "string",
                    "example": "NL123456789B01"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "User successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "id": {
                      "type": "integer",
                      "example": 125
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation error (missing or invalid fields)."
          }
        }
      }
    },
    "/api/v1.0/users/auth/login": {
      "post": {
        "tags": [
          "Users",
          "Authentication"
        ],
        "summary": "Authenticate a user",
        "description": "Authenticates a user and returns a session token.",
        "operationId": "loginUser",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "username",
                  "password"
                ],
                "properties": {
                  "username": {
                    "type": "string",
                    "example": "john@example.com"
                  },
                  "password": {
                    "type": "string",
                    "example": "StrongPassword123"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Login successful",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "token": {
                      "type": "string",
                      "example": "4e6c6d4f5b1c4b1c3f8e6f4d"
                    },
                    "user_id": {
                      "type": "integer",
                      "example": 125
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid credentials"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/api/v1.0/users/auth/logout": {
      "post": {
        "tags": [
          "Users",
          "Authentication"
        ],
        "summary": "Logout current user",
        "description": "Invalidates the current session token.",
        "operationId": "logoutUser",
        "responses": {
          "200": {
            "description": "User logged out",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "logged_out": {
                      "type": "boolean",
                      "example": true
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing token"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/users/auth/logout/all": {
      "post": {
        "tags": [
          "Users",
          "Authentication"
        ],
        "summary": "Logout all of the current user`s sessions",
        "description": "Invalidates the ALL session token.",
        "operationId": "logoutUserAll",
        "responses": {
          "200": {
            "description": "User logged out",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "logged_out": {
                      "type": "boolean",
                      "example": true
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing token"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/users/auth/refresh": {
      "post": {
        "tags": [
          "Users",
          "Authentication"
        ],
        "summary": "Refresh authentication token",
        "description": "Refreshes the current session token and returns a new token.",
        "operationId": "refreshUserToken",
        "responses": {
          "200": {
            "description": "Token refreshed",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "token": {
                      "type": "string",
                      "example": "new_token_abcdef123456"
                    },
                    "expires_in": {
                      "description": "Token lifetime in seconds",
                      "type": "integer",
                      "example": 2592000
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired token"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/users/auth/whoami": {
      "post": {
        "tags": [
          "Users",
          "Authentication"
        ],
        "summary": "Get authenticated user",
        "description": "Returns information about the currently authenticated user.",
        "operationId": "whoAmI",
        "responses": {
          "200": {
            "description": "User information",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "user_id": {
                      "type": "integer",
                      "example": 125
                    },
                    "username": {
                      "type": "string",
                      "example": "john@example.com"
                    },
                    "email": {
                      "type": "string",
                      "example": "john@example.com"
                    },
                    "firstname": {
                      "type": "string",
                      "example": "John"
                    },
                    "lastname": {
                      "type": "string",
                      "example": "Doe"
                    }
                  },
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired token"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1.0/vehicles/search": {
      "post": {
        "tags": [
          "Vehicles"
        ],
        "description": "Query vehicles. By [ licenseplates, vinnumbers, vehicle_ids, ktype_ids ].",
        "operationId": "findVehicles",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "filters"
                ],
                "properties": {
                  "filters": {
                    "description": "At least one filter must be provided.",
                    "properties": {
                      "licenseplates": {
                        "description": "1 or multiple licenseplates. Requires 'country' to be set.",
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "vinnumbers": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "vehicle_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        }
                      },
                      "ktype_ids": {
                        "type": "array",
                        "items": {
                          "type": "integer"
                        }
                      }
                    },
                    "type": "object"
                  },
                  "country": {
                    "description": "ISO country code (e.g. 'nl'). REQUIRED when using 'filters.licenseplates'.",
                    "type": "string",
                    "example": "nl"
                  },
                  "language": {
                    "type": "string",
                    "default": "en"
                  },
                  "page": {
                    "type": "integer",
                    "default": 1
                  },
                  "limit": {
                    "type": "integer",
                    "default": 10,
                    "maximum": 50,
                    "minimum": 10
                  }
                },
                "type": "object"
              },
              "examples": {
                "licenseplate_search": {
                  "summary": "Licenseplate search (country REQUIRED)",
                  "value": {
                    "filters": {
                      "licenseplates": [
                        "AB123CD"
                      ]
                    },
                    "country": "nl",
                    "language": "en",
                    "page": 1,
                    "limit": 10
                  }
                },
                "multiple_licenseplates": {
                  "summary": "Multiple licenseplates",
                  "value": {
                    "filters": {
                      "licenseplates": [
                        "AB123CD",
                        "XY987ZT"
                      ]
                    },
                    "country": "nl",
                    "language": "en"
                  }
                },
                "vin_search": {
                  "summary": "Search by VIN (no country required)",
                  "value": {
                    "filters": {
                      "vinnumbers": [
                        "WBA123456789",
                        "VF1123456789"
                      ]
                    },
                    "language": "en"
                  }
                },
                "vehicle_ids_search": {
                  "summary": "Search by internal vehicle IDs",
                  "value": {
                    "filters": {
                      "vehicle_ids": [
                        1,
                        25,
                        99
                      ]
                    },
                    "language": "en"
                  }
                },
                "ktype_ids_search": {
                  "summary": "Search by TecDoc ktype IDs",
                  "value": {
                    "filters": {
                      "ktype_ids": [
                        12345,
                        67890
                      ]
                    },
                    "language": "en"
                  }
                },
                "combined_search": {
                  "summary": "Combined filters (VIN + ktype)",
                  "value": {
                    "filters": {
                      "vinnumbers": [
                        "WBA123456789"
                      ],
                      "ktype_ids": [
                        12345
                      ]
                    },
                    "language": "en",
                    "page": 1,
                    "limit": 20
                  }
                },
                "invalid_missing_country": {
                  "summary": "Invalid: licenseplate without country",
                  "value": {
                    "filters": {
                      "licenseplates": [
                        "AB123CD"
                      ]
                    },
                    "language": "en"
                  }
                },
                "invalid_no_filters": {
                  "summary": "Invalid: no filters provided",
                  "value": {
                    "filters": [],
                    "language": "en"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get vehicles successfully. Vehicles are returned as an object keyed by vehicle ID. Each vehicle contains a 'matched_on' field describing which input matched it.",
            "content": {
              "application/json": {
                "examples": {
                  "licenseplate_result": {
                    "summary": "Licenseplate search result",
                    "value": {
                      "vehicles": {
                        "1": {
                          "id": 1,
                          "ktype": 116873,
                          "manufacturer": "TOYOTA",
                          "short_name": "1.2 (PAB40)",
                          "model": {
                            "id": 1,
                            "model": "AYGO",
                            "model_group": "AYGO",
                            "model_type": "_B4_",
                            "vehicle_type": null
                          },
                          "cylinder_amount": 3,
                          "cylinder_capacity_ccm": 1199,
                          "cylinder_capacity_liter": 120,
                          "valves": 4,
                          "impulsion_type": "Voorwielaandrijving",
                          "construction_type": "Hatchback",
                          "construction_start": "2014-04",
                          "construction_end": null,
                          "power_hp": 82,
                          "power_kw": 60,
                          "fueltype": "Benzine",
                          "matched_on": {
                            "type": "licenseplate",
                            "country": "ch",
                            "value": "3mp480"
                          }
                        }
                      },
                      "total_items": 1,
                      "pages": 1,
                      "items_per_pages": 10,
                      "current_page": 1,
                      "format": "json",
                      "success": true,
                      "error_message": []
                    }
                  },
                  "vin_result": {
                    "summary": "VIN search result",
                    "value": {
                      "vehicles": {
                        "201": {
                          "id": 201,
                          "ktype": 99887,
                          "manufacturer": "BMW",
                          "short_name": "320d",
                          "fueltype": "Diesel",
                          "matched_on": {
                            "type": "vinnumber",
                            "value": "WBA123456789"
                          }
                        }
                      },
                      "total_items": 1,
                      "pages": 1,
                      "items_per_pages": 10,
                      "current_page": 1,
                      "format": "json",
                      "success": true,
                      "error_message": []
                    }
                  },
                  "empty_result": {
                    "summary": "No vehicles found",
                    "value": {
                      "vehicles": [],
                      "total_items": 0,
                      "pages": 0,
                      "items_per_pages": 10,
                      "current_page": 1,
                      "format": "json",
                      "success": false,
                      "error_message": [
                        "No vehicles found"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1.0/vehicles/searchByNameModel": {
      "post": {
        "tags": [
          "Vehicles"
        ],
        "description": "Search vehicles by manufacturer, model name, model group, construction type and production dates.",
        "operationId": "findVehiclesByNameModel",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "manufacturer"
                ],
                "properties": {
                  "manufacturer": {
                    "description": "Manufacturer name (required)",
                    "type": "string",
                    "example": "BMW"
                  },
                  "short_name": {
                    "description": "Vehicle short name",
                    "type": "string",
                    "example": "320d"
                  },
                  "modelname": {
                    "description": "Vehicle model name",
                    "type": "string",
                    "example": "3 Series"
                  },
                  "modelgroup": {
                    "description": "Vehicle model group",
                    "type": "string",
                    "example": "Golf"
                  },
                  "construction_type": {
                    "description": "Vehicle construction type",
                    "type": "string",
                    "example": "Hatchback"
                  },
                  "construction_start": {
                    "description": "Production start date",
                    "type": "string",
                    "format": "date",
                    "example": "2018-01-01"
                  },
                  "construction_end": {
                    "description": "Production end date",
                    "type": "string",
                    "format": "date",
                    "example": "2022-12-31"
                  },
                  "language": {
                    "type": "string",
                    "default": "en",
                    "example": "en"
                  },
                  "page": {
                    "type": "integer",
                    "default": 1,
                    "example": 1
                  },
                  "limit": {
                    "type": "integer",
                    "default": 10,
                    "maximum": 50,
                    "minimum": 10,
                    "example": 10
                  }
                },
                "type": "object"
              },
              "examples": {
                "manufacturer_and_model": {
                  "summary": "Manufacturer + model name",
                  "value": {
                    "manufacturer": "BMW",
                    "modelname": "3 Series",
                    "language": "en",
                    "page": 1,
                    "limit": 10
                  }
                },
                "manufacturer_and_modelgroup": {
                  "summary": "Manufacturer + model group",
                  "value": {
                    "manufacturer": "Volkswagen",
                    "modelgroup": "Golf",
                    "language": "en"
                  }
                },
                "full_search": {
                  "summary": "Complete search",
                  "value": {
                    "manufacturer": "Mercedes-Benz",
                    "short_name": "220 CDI",
                    "modelname": "C-Class",
                    "construction_type": "Sedan",
                    "construction_start": "2018-01-01",
                    "construction_end": "2022-12-31",
                    "language": "en",
                    "page": 1,
                    "limit": 20
                  }
                },
                "construction_type_search": {
                  "summary": "Manufacturer + construction type",
                  "value": {
                    "manufacturer": "Audi",
                    "construction_type": "Hatchback",
                    "language": "en"
                  }
                },
                "invalid_request": {
                  "summary": "Invalid request",
                  "value": {
                    "language": "en"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Vehicles found successfully",
            "content": {
              "application/json": {
                "schema": {},
                "example": {
                  "vehicles": [
                    {
                      "id": 123,
                      "ktype": 456789,
                      "manufacturer": "BMW",
                      "short_name": "320d",
                      "model": {
                        "id": 10,
                        "model": "3 Series",
                        "model_group": "3 Series",
                        "model_type": "F30",
                        "vehicle_type": null
                      },
                      "fueltype": "Diesel",
                      "construction_type": "Sedan",
                      "construction_start": "2018-01",
                      "construction_end": null,
                      "power_hp": 190,
                      "power_kw": 140
                    }
                  ],
                  "total_items": 1,
                  "pages": 1,
                  "items_per_pages": 10,
                  "current_page": 1,
                  "success": true,
                  "error_message": []
                }
              }
            }
          },
          "404": {
            "description": "No vehicles found"
          },
          "403": {
            "description": "TecDoc service disabled"
          },
          "422": {
            "description": "Validation error"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "StockItem": {
        "properties": {
          "stock": {
            "type": "integer",
            "example": 1
          },
          "batch_id": {
            "type": "string",
            "example": ""
          },
          "warehouse_id": {
            "type": "integer",
            "example": 1
          },
          "warehouse_name": {
            "type": "string",
            "example": "Central Warehouse"
          },
          "warehouse_location_id": {
            "type": "integer",
            "example": 3
          },
          "warehouse_location_code": {
            "type": "string",
            "example": "W001R001C01S01",
            "nullable": true
          }
        },
        "type": "object"
      },
      "InventoryDetail": {
        "properties": {
          "unique_identifier": {
            "type": "string",
            "example": "178_0_0_0"
          },
          "configuration_id": {
            "type": "integer",
            "example": 0
          },
          "user_input_hash": {
            "type": "string",
            "example": ""
          },
          "stock": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockItem"
            }
          },
          "total_quantity": {
            "type": "integer",
            "example": 21
          }
        },
        "type": "object"
      },
      "InventoryDetails": {
        "type": "object",
        "example": {
          "178_0_0_0": {
            "unique_identifier": "178_0_0_0",
            "configuration_id": 0,
            "user_input_hash": "",
            "stock": [
              {
                "stock": 1,
                "batch_id": "",
                "warehouse_id": 1,
                "warehouse_name": "Central Warehouse",
                "warehouse_location_id": 3,
                "warehouse_location_code": "W001R001C01S01"
              }
            ],
            "total_quantity": 10
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/InventoryDetail"
        }
      },
      "Product": {
        "required": [
          "product_id",
          "total_quantity",
          "success"
        ],
        "properties": {
          "product_id": {
            "type": "string",
            "example": "1"
          },
          "product_ean": {
            "type": "string",
            "example": "10011001000101"
          },
          "product_number": {
            "type": "string",
            "example": "AB120923"
          },
          "total_quantity": {
            "type": "integer",
            "example": 10
          },
          "inventory_details": {
            "$ref": "#/components/schemas/InventoryDetails"
          },
          "success": {
            "type": "boolean",
            "example": true
          }
        },
        "type": "object"
      },
      "OrderCreateDTO": {
        "title": "OrderCreateResponse",
        "description": "Response schema returned after attempting to create an order. Provides identifiers, item details, and status information.",
        "properties": {
          "order_id": {
            "description": "Unique identifier assigned to the order by the Corenio system. This ID is used to track and manage the order internally.",
            "type": "integer",
            "example": 126
          },
          "external_order_id": {
            "description": "Optional identifier provided by an external system. Useful for correlating this order with external platforms such as e-commerce or ERP systems.",
            "type": "string",
            "example": "EXT-4589-XYZ"
          },
          "order_items": {
            "description": "List of items included in the order. Each item contains a product ID and the quantity ordered.",
            "type": "array",
            "items": {
              "properties": {
                "product_id": {
                  "description": "Unique identifier of the product being ordered.",
                  "type": "integer",
                  "example": 1679
                },
                "amount": {
                  "description": "Quantity of the product to be included in the order.",
                  "type": "integer",
                  "example": 1
                }
              },
              "type": "object"
            }
          },
          "format": {
            "description": "The response format. Typically set to 'json'.",
            "type": "string",
            "example": "json"
          },
          "success": {
            "description": "Indicates whether the order was created successfully. `true` means the operation succeeded, `false` indicates failure.",
            "type": "boolean",
            "example": true
          },
          "error_message": {
            "description": "Array of error messages, if any occurred during order creation. Empty if the operation was successful.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": []
          }
        },
        "type": "object"
      },
      "OrderStatusDTO": {
        "title": "OrderStatusResponse",
        "description": "Response schema for checking the current status of an order. Includes status code, message, and success flag.",
        "properties": {
          "order_id": {
            "description": "Internal identifier of the order whose status is being queried. This is Corenio orderID.",
            "type": "string",
            "example": "123"
          },
          "is_credit_for": {
            "description": "If this order is a credit, it references the original order ID. Optional field.",
            "type": "string",
            "example": "456",
            "nullable": true
          },
          "credited_by": {
            "description": "If this order has been credited by another order, it references that order ID. Optional field.",
            "type": "string",
            "example": "789",
            "nullable": true
          },
          "success": {
            "description": "Indicates whether the status check was successful. 1 for success, 0 for failure.",
            "type": "integer",
            "example": 1
          },
          "status": {
            "description": "Current status of the order. This can be represented as an integer status code or a string such as 'shipped'.",
            "oneOf": [
              {
                "type": "integer",
                "example": 2
              },
              {
                "type": "string",
                "example": "shipped"
              }
            ]
          },
          "error-message": {
            "description": "Error message in case the status retrieval failed. Can be null if no error occurred.",
            "type": "string",
            "example": "No errors",
            "nullable": true
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "description": "Bearer token authentication",
        "bearerFormat": "JWT",
        "scheme": "bearer"
      },
      "apiKeyAuth": {
        "type": "apiKey",
        "description": "API Key authentication",
        "name": "api-key",
        "in": "header"
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    },
    {
      "apiKeyAuth": []
    }
  ],
  "tags": [
    {
      "name": "Carts",
      "description": "Endpoints related to carts."
    },
    {
      "name": "Categories",
      "description": "Endpoints related to categories management."
    },
    {
      "name": "Orders",
      "description": "Endpoints related to orders."
    },
    {
      "name": "Products",
      "description": "Endpoints related to product management, including product details and inventory."
    },
    {
      "name": "Users",
      "description": "Endpoints related to users."
    },
    {
      "name": "Vehicles",
      "description": "Endpoints related to vehicles, including details and search."
    },
    {
      "name": "Authentication",
      "description": "Authentication"
    }
  ]
}