Catalog API
Integration Manual
This API provides item data, specifically product categories and the products that belong to those categories. Both endpoints require authentication using an API token, which will be provided separately.
Authentication
All requests must include a valid Bearer token and request JSON responses.
Headers
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Base URL example
https://www.max-power.com/api
Endpoint
Get Categories
/categories
Returns all linked product categories. The endpoint is not paginated.
| Parameter | Type | Required | Description |
|---|---|---|---|
| locales | array | No | Limits translated fields to the requested locales. Example: locales[]=en&locales[]=el. |
| active | boolean | No | true returns active categories, false returns inactive categories, and an omitted value returns all categories. |
Example Request
GET /api/categories?locales[]=en&locales[]=el
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Example Response
{
"data": [
{
"id": "1001",
"parent_id": null,
"title": {
"en": "Lifejackets",
"el": "Σωσίβια"
},
"slug": {
"en": "lifejackets",
"el": "sosivia"
},
"description": {
"en": "<p>Category description</p>",
"el": "<p>Περιγραφή κατηγορίας</p>"
},
"images": [
"https://www.max-power.com/storage/categories/image.jpg"
],
"is_active": true
}
]
}
| Property | Type | Description |
|---|---|---|
| id | string | The public category identifier. |
| parent_id | string/null | The parent category id. null means this is a top-level category. |
| title | object | Translated category title, keyed by locale. |
| slug | object | Translated URL slug, keyed by locale. |
| description | object | Translated HTML description. CSS class attributes are removed and relative links are converted to absolute URLs. |
| images | array | Public image URLs for the category, ordered by display order. |
| is_active | boolean | Indicates whether the category is active. |
Endpoint
Get Products
/products
Returns paginated product data, including product categories, product images, product variants/items, and item attributes.
| Parameter | Type | Required | Description |
|---|---|---|---|
| locales | array | No | Limits translated fields to the requested locales. Example: locales[]=en&locales[]=el. |
| locale | string | No | Validated by the API, but translated responses are currently controlled by locales. |
| active | boolean | No | true returns active products, false returns inactive products, and an omitted value returns all products. |
| per_page | integer | No | Number of products per page. Minimum: 10. Maximum: 500. Default: 200. |
Example Request
GET /api/products?locales[]=en&locales[]=el&per_page=100
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Example Response
{
"data": {
"current_page": 1,
"data": [
{
"id": "01HXAMPLEULID1234567890",
"title": {
"en": "Product title",
"el": "Τίτλος προϊόντος"
},
"description": {
"en": "<p>Product description</p>",
"el": "<p>Περιγραφή προϊόντος</p>"
},
"details": {
"en": "<p>Product details</p>",
"el": "<p>Λεπτομέρειες προϊόντος</p>"
},
"benefits": {
"en": "<ul><li>Benefit</li></ul>",
"el": "<ul><li>Πλεονέκτημα</li></ul>"
},
"videos": [],
"is_active": true,
"categories": ["1001", "1002"],
"images": [
"https://www.max-power.com/storage/products/product-image.jpg"
],
"items": [
{
"id": "ITEM-CODE-001",
"is_active": true,
"title": {
"en": "Product title",
"el": "Τίτλος προϊόντος"
},
"images": [
"https://www.max-power.com/storage/items/item-image.jpg"
],
"attributes": [
{
"id": 1,
"title": {
"en": "Size",
"el": "Μέγεθος"
},
"value": {
"en": "Large",
"el": "Μεγάλο"
}
}
]
}
]
}
],
"first_page_url": "https://www.max-power.com/api/products?page=1",
"from": 1,
"last_page": 10,
"next_page_url": "https://www.max-power.com/api/products?page=2",
"path": "https://www.max-power.com/api/products",
"per_page": 100,
"prev_page_url": null,
"to": 100,
"total": 1000
}
}
| Product Property | Type | Description |
|---|---|---|
| id | string | The product ULID. This is the public product identifier. |
| title | object | Translated product title, keyed by locale. |
| description | object | Translated HTML product description. CSS class attributes are removed and relative links are converted to absolute URLs. |
| details | object | Translated HTML product details, keyed by locale. |
| benefits | object | Translated HTML product benefits, keyed by locale. |
| videos | array/object/null | Product video data as stored in the system. |
| is_active | boolean | Indicates whether the product is active. |
| categories | array | List of category ids that this product belongs to. |
| images | array | Public product image URLs, ordered by display order. |
| items | array | Product item/variant records. |
| Item Property | Type | Description |
|---|---|---|
| id | string | The item code. |
| is_active | boolean | Indicates whether the item is active. |
| title | object | Translated product title, keyed by locale. |
| images | array | Public item image URL, if available. Empty array if no item image exists. |
| attributes | array | List of item-specific product attributes. |
| Attribute | Type |
|---|---|
| id | integer |
| title | object |
| value | object/null |
Pagination
The /products endpoint is paginated. Use per_page to control the number of products returned per page.
GET /api/products?per_page=100
GET /api/products?page=2&per_page=100
Laravel pagination metadata is included inside the data object. The /categories endpoint is not paginated.
Locale Filtering
The API supports translated fields. Use the locales query parameter to request specific languages.
GET /api/products?locales[]=en&locales[]=el
GET /api/categories?locales[]=en&locales[]=el
Translated fields are returned as objects keyed by locale.
{
"title": {
"en": "Product title",
"el": "Τίτλος προϊόντος"
}
}
If locales is not provided, the API may return all available translations, depending on the stored translations.