Introduction

Two ways to integrate with Pobo. The REST API imports products and categories in bulk. The White Label API embeds the Pobo editor into your own application — it authenticates differently, see the note in its group.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by visiting your dashboard and clicking Generate API token.

The White Label endpoints do not use this token. They authenticate with a pobo-white-label-token header plus an Origin header of one of your allowed domains — a request without an allowed origin is rejected with 403. Both headers are listed on every endpoint of that group.

API V2 (Multilang)

Products


Product list

GET
https://api.pobo.space
/api/v2/rest/products
requires authentication

Get paginated list of products with content in all active languages. Only returns products in ready status with is_delete=false (includes both visible and hidden products). Draft, review and generate products are excluded. Language variants are returned only if is_active=true.

By default, only content.html is returned. Use the include parameter to request additional content: marketplace (marketplace HTML), nested (raw widget JSON), site_link (anchor navigation on H2 headings), rich_snippet (JSON-LD structured data), variant (product variants with code and EAN).

When site_link is included, response contains site_link.html (rendered nav HTML per language) and site_link.list (structured array of heading + slug per language). Requires enable_site_link to be enabled on the eshop.

When rich_snippet is included, response contains rich_snippet.html (JSON-LD script tags per language) and rich_snippet.json (parsed JSON-LD object per language). Requires enable_rich_snippet to be enabled on the eshop.

When variant is included, response contains variant — a list of the product's variants (code, ean) ordered by internal ID. Variants are language-independent. Products without variants return an empty array.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number. Default: 1.

Example:
1
per_page
integer

Items per page. Maximum: 100, Default: 100.

Example:
50
is_edited
boolean

Filter by edited status (is_loaded). Default: true.

Example:
true
last_update_time_from
string

Filter products updated after this datetime. Format: Y-m-d H:i:s.

Example:
2024-01-01 14:30:00
include
string

Comma-separated list of additional content to include: nested, marketplace, site_link, rich_snippet, variant.

Example:
marketplace,nested,site_link,rich_snippet,variant
lang
string

Comma-separated list of languages to include: default, cs, sk, en, de, pl, hu, all. Without this parameter only "default" is returned.

Example:
default,cs,sk
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v2/rest/products?page=1&per_page=50&is_edited=1&last_update_time_from=2024-01-01+14%3A30%3A00&include=marketplace%2Cnested%2Csite_link%2Crich_snippet%2Cvariant&lang=default%2Ccs%2Csk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": "PROD-001",
            "guid": "550e8400-e29b-41d4-a716-446655440000",
            "is_visible": true,
            "is_loaded": false,
            "image_preview": "https://example.com/preview.jpg",
            "name": {
                "default": "Product Name",
                "sk": "Názov produktu"
            },
            "short_description": {
                "default": "Short description",
                "sk": "Krátky popis"
            },
            "description": {
                "default": "<p>Full description</p>",
                "sk": "<p>Plný popis</p>"
            },
            "url": {
                "default": "https://example.com/product",
                "sk": "https://example.com/sk/produkt"
            },
            "seo_title": {
                "default": "SEO Title",
                "sk": "SEO Názov"
            },
            "seo_description": {
                "default": "SEO Description",
                "sk": "SEO Popis"
            },
            "content": {
                "html": {
                    "default": "<div class=\"pobo-content\">...</div>",
                    "cs": "..."
                },
                "marketplace": {
                    "default": "<div class=\"pobo-content\">...</div>",
                    "cs": "..."
                },
                "nested": [
                    [
                        {
                            "id": 2,
                            "class": "empty",
                            "tag": "div",
                            "children": []
                        }
                    ]
                ]
            },
            "site_link": {
                "html": {
                    "default": "<div id=\"pobo-site-link\" class=\"pobo-site-link__container\"><nav class=\"pobo-site-link__nav\"><a href=\"#nadpis\" class=\"pobo-site-link__anchor\">Nadpis</a></nav></div>"
                },
                "list": {
                    "default": [
                        {
                            "heading": "Nadpis",
                            "slug": "nadpis"
                        }
                    ]
                }
            },
            "rich_snippet": {
                "html": {
                    "default": "<script type=\"application/ld+json\">{...}</script>"
                },
                "json": {
                    "default": {
                        "@context": "https://schema.org",
                        "@type": "FAQPage",
                        "mainEntity": []
                    }
                }
            },
            "variant": [
                {
                    "code": "ABC-001",
                    "ean": "8591234567890"
                },
                {
                    "code": "ABC-002",
                    "ean": null
                }
            ],
            "created_at": "2024-01-15T10:30:00.000000Z",
            "updated_at": "2024-01-16T14:20:00.000000Z"
        }
    ],
    "meta": {
        "current_page": 1,
        "per_page": 100,
        "total": 150
    }
}
{
    "error": "Authorization token required"
}

Bulk import products

POST
https://api.pobo.space
/api/v2/rest/products
requires authentication

Import or update multiple products at once with multilingual content. Maximum 100 products per request. Invalid products will be skipped and reported in the errors array.

Supported languages: default, cs, sk, en, de, pl, hu

Validation rules:

  • name.default and url.default are always required
  • If a language key exists anywhere in the request, name.{lang} and url.{lang} are required
  • Other multilang fields (short_description, description, seo_title, seo_description) can be null but keys must exist
  • URL must start with https://
  • Unsupported languages are silently ignored

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v2/rest/products" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"*\": {
        \"id\": \"PROD-123-ABC\",
        \"is_visible\": true,
        \"images\": [
            \"https:\\/\\/example.com\\/img1.jpg\",
            \"https:\\/\\/example.com\\/img2.jpg\"
        ],
        \"categories_ids\": [
            \"CAT-001\",
            \"CAT-002\"
        ],
        \"brand_id\": \"BRAND-001\",
        \"parameters_ids\": [
            1,
            2,
            3
        ],
        \"name\": {
            \"default\": \"Product Name\",
            \"sk\": \"Názov produktu\",
            \"*\": \"Názov produktu\"
        },
        \"url\": {
            \"default\": \"https:\\/\\/example.com\\/product\",
            \"sk\": \"https:\\/\\/example.com\\/sk\\/produkt\",
            \"*\": \"https:\\/\\/example.com\\/sk\\/produkt\"
        },
        \"short_description\": {
            \"default\": \"Short desc\",
            \"sk\": \"Krátky popis\",
            \"*\": \"dolore\"
        },
        \"description\": {
            \"default\": \"<p>Full description<\\/p>\",
            \"sk\": \"<p>Plný popis<\\/p>\",
            \"*\": \"aliquam\"
        },
        \"seo_title\": {
            \"default\": \"SEO Title\",
            \"sk\": \"SEO Názov\",
            \"*\": \"enim\"
        },
        \"seo_description\": {
            \"default\": \"SEO Description\",
            \"sk\": \"SEO Popis\",
            \"*\": \"vero\"
        }
    }
}"
Example response:
{
    "success": true,
    "imported": 2,
    "updated": 1,
    "skipped": 1,
    "errors": [
        {
            "index": 3,
            "id": "PROD-004",
            "errors": [
                "The name.sk field is required when using language sk."
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk import"
        ]
    }
}

Bulk delete products

DELETE
https://api.pobo.space
/api/v2/rest/products
requires authentication

Soft-delete multiple products at once by setting is_delete = true. Maximum 100 products per request. Products that don't exist or are already deleted will be skipped.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request DELETE \
    "https://api.pobo.space/api/v2/rest/products" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
Example response:
{
    "success": true,
    "deleted": 2,
    "skipped": 1,
    "errors": [
        {
            "index": 2,
            "id": "PROD-999",
            "errors": [
                "Product not found"
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk delete"
        ]
    }
}

Categories


Category list

GET
https://api.pobo.space
/api/v2/rest/categories
requires authentication

Get paginated list of categories with content in all active languages. Only returns categories in ready status with is_delete=false (includes both visible and hidden categories). Draft, review and generate categories are excluded. Language variants are returned only if is_active=true.

By default, only content.html is returned. Use the include parameter to request additional content: marketplace (marketplace HTML), nested (raw widget JSON), rich_snippet (JSON-LD structured data).

When rich_snippet is included, response contains rich_snippet.html (JSON-LD script tags per language) and rich_snippet.json (parsed JSON-LD object per language). Requires enable_rich_snippet to be enabled on the eshop.

Note: site_link is not available for categories.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number. Default: 1.

Example:
1
per_page
integer

Items per page. Maximum: 100, Default: 100.

Example:
50
is_edited
boolean

Filter by edited status (is_loaded). Default: true.

Example:
true
last_update_time_from
string

Filter categories updated after this datetime. Format: Y-m-d H:i:s.

Example:
2024-01-01 14:30:00
include
string

Comma-separated list of additional content to include: nested, marketplace, rich_snippet.

Example:
marketplace,nested,rich_snippet
lang
string

Comma-separated list of languages to include: default, cs, sk, en, de, pl, hu, all. Without this parameter only "default" is returned.

Example:
default,cs,sk
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v2/rest/categories?page=1&per_page=50&is_edited=1&last_update_time_from=2024-01-01+14%3A30%3A00&include=marketplace%2Cnested%2Crich_snippet&lang=default%2Ccs%2Csk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": "CAT-001",
            "guid": "550e8400-e29b-41d4-a716-446655440000",
            "is_visible": true,
            "is_loaded": false,
            "name": {
                "default": "Electronics",
                "sk": "Elektronika"
            },
            "description": {
                "default": "<p>Electronics category</p>",
                "sk": "<p>Kategoria elektroniky</p>"
            },
            "url": {
                "default": "https://example.com/electronics",
                "sk": "https://example.com/sk/elektronika"
            },
            "seo_title": {
                "default": "Electronics | Shop",
                "sk": "Elektronika | Obchod"
            },
            "seo_description": {
                "default": "Best electronics",
                "sk": "Najlepsia elektronika"
            },
            "content": {
                "html": {
                    "default": "<div class=\"pobo-content\">...</div>",
                    "cs": "..."
                },
                "marketplace": {
                    "default": "<div class=\"pobo-content\">...</div>",
                    "cs": "..."
                },
                "nested": [
                    [
                        {
                            "id": 2,
                            "class": "empty",
                            "tag": "div",
                            "children": []
                        }
                    ]
                ]
            },
            "rich_snippet": {
                "html": {
                    "default": "<script type=\"application/ld+json\">{...}</script>"
                },
                "json": {
                    "default": {
                        "@context": "https://schema.org",
                        "@type": "FAQPage",
                        "mainEntity": []
                    }
                }
            },
            "created_at": "2024-01-15T10:30:00.000000Z",
            "updated_at": "2024-01-16T14:20:00.000000Z"
        }
    ],
    "meta": {
        "current_page": 1,
        "per_page": 100,
        "total": 50
    }
}
{
    "error": "Authorization token required"
}

Bulk import categories

POST
https://api.pobo.space
/api/v2/rest/categories
requires authentication

Import or update multiple categories at once with multilingual content. Maximum 100 categories per request. Invalid categories will be skipped and reported in the errors array.

Supported languages: default, cs, sk, en, de, pl, hu

Validation rules:

  • name.default and url.default are always required
  • If a language key exists anywhere in the request, name.{lang} and url.{lang} are required
  • Other multilang fields (description, seo_title, seo_description) can be null but keys must exist
  • URL must start with https://
  • Unsupported languages are silently ignored

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v2/rest/categories" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"*\": {
        \"id\": \"A01.01.07\",
        \"is_visible\": true,
        \"images\": [
            \"https:\\/\\/example.com\\/img1.jpg\"
        ],
        \"name\": {
            \"default\": \"Electronics\",
            \"sk\": \"Elektronika\",
            \"*\": \"Elektronika\"
        },
        \"url\": {
            \"default\": \"https:\\/\\/example.com\\/electronics\",
            \"sk\": \"https:\\/\\/example.com\\/sk\\/elektronika\",
            \"*\": \"https:\\/\\/example.com\\/sk\\/elektronika\"
        },
        \"description\": {
            \"default\": \"<p>Description<\\/p>\",
            \"sk\": \"<p>Popis<\\/p>\",
            \"*\": \"sit\"
        },
        \"seo_title\": {
            \"default\": \"SEO Title\",
            \"sk\": \"SEO Názov\",
            \"*\": \"reprehenderit\"
        },
        \"seo_description\": {
            \"default\": \"SEO Description\",
            \"sk\": \"SEO Popis\",
            \"*\": \"voluptatem\"
        }
    }
}"
Example response:
{
    "success": true,
    "imported": 2,
    "updated": 1,
    "skipped": 1,
    "errors": [
        {
            "index": 3,
            "id": "CAT-004",
            "errors": [
                "The name.sk field is required when using language sk."
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk import"
        ]
    }
}

Bulk delete categories

DELETE
https://api.pobo.space
/api/v2/rest/categories
requires authentication

Soft-delete multiple categories at once by setting is_delete = true. Maximum 100 categories per request. Categories that don't exist or are already deleted will be skipped.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request DELETE \
    "https://api.pobo.space/api/v2/rest/categories" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
Example response:
{
    "success": true,
    "deleted": 2,
    "skipped": 1,
    "errors": [
        {
            "index": 2,
            "id": "CAT-999",
            "errors": [
                "Category not found"
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk delete"
        ]
    }
}

Parameters


Bulk import parameters

POST
https://api.pobo.space
/api/v2/rest/parameters
requires authentication

Import or update multiple parameters with their values at once. Maximum 100 parameters per request. Invalid parameters will be skipped and reported in the errors array.

Note: Parameters do not have multilang support - same structure as V1.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v2/rest/parameters" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"*\": {
        \"id\": 1,
        \"name\": \"Color\",
        \"values\": [
            {
                \"id\": 1,
                \"value\": \"Red\"
            },
            {
                \"id\": 2,
                \"value\": \"Blue\"
            }
        ]
    }
}"
Example response:
{
    "success": true,
    "imported": 2,
    "updated": 1,
    "skipped": 0,
    "values_imported": 5,
    "values_updated": 2,
    "errors": []
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk import"
        ]
    }
}

Brands


Brand list

GET
https://api.pobo.space
/api/v2/rest/brands
requires authentication

Get paginated list of brands with content in selected languages. Only returns brands with is_delete=false (includes both visible and hidden brands). The id field in response is the external identifier (mapped to brand.remote_id).

By default only content.html is returned. Use the include parameter to request additional content: marketplace, nested, site_link, rich_snippet.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number. Default: 1.

Example:
1
per_page
integer

Items per page. Maximum: 100, Default: 100.

Example:
50
is_edited
boolean

Filter by edited status (is_loaded). Default: true.

Example:
true
last_update_time_from
string

Filter brands updated after this datetime. Format: Y-m-d H:i:s.

Example:
2024-01-01 14:30:00
include
string

Comma-separated list of additional content to include: nested, marketplace, site_link, rich_snippet.

Example:
marketplace,nested,site_link,rich_snippet
lang
string

Comma-separated list of languages to include: default, cs, sk, en, de, pl, hu, all. Without this parameter only "default" is returned.

Example:
default,cs,sk
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v2/rest/brands?page=1&per_page=50&is_edited=1&last_update_time_from=2024-01-01+14%3A30%3A00&include=marketplace%2Cnested%2Csite_link%2Crich_snippet&lang=default%2Ccs%2Csk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": "BRAND-001",
            "guid": "550e8400-e29b-41d4-a716-446655440099",
            "is_visible": true,
            "is_loaded": false,
            "image_preview": "https://example.com/brands/apple-logo.png",
            "name": {
                "default": "Apple",
                "cs": "Apple",
                "sk": "Apple SK",
                "en": "Apple EN",
                "de": "Apple DE",
                "pl": "Apple PL",
                "hu": "Apple HU"
            },
            "description": {
                "default": "<p>Brand description</p>",
                "cs": "<p>Popis značky</p>",
                "sk": "<p>Popis značky SK</p>",
                "en": "<p>Brand description EN</p>",
                "de": "<p>Markenbeschreibung</p>",
                "pl": "<p>Opis marki</p>",
                "hu": "<p>Márkaleírás</p>"
            },
            "url": {
                "default": "https://example.com/znacky/apple",
                "cs": "https://example.com/cs/znacky/apple",
                "sk": "https://example.com/sk/znacky/apple",
                "en": "https://example.com/en/brands/apple",
                "de": "https://example.com/de/marken/apple",
                "pl": "https://example.com/pl/marki/apple",
                "hu": "https://example.com/hu/markak/apple"
            },
            "seo_title": {
                "default": "Apple | Eshop",
                "cs": "Apple | E-shop",
                "sk": "Apple | Obchod",
                "en": "Apple | Shop",
                "de": "Apple | Shop",
                "pl": "Apple | Sklep",
                "hu": "Apple | Bolt"
            },
            "seo_description": {
                "default": "SEO description",
                "cs": "SEO popis",
                "sk": "SEO popis SK",
                "en": "SEO description EN",
                "de": "SEO Beschreibung",
                "pl": "Opis SEO",
                "hu": "SEO leírás"
            },
            "content": {
                "html": {
                    "default": "<div class=\"pobo-content\">...</div>",
                    "cs": "<div class=\"pobo-content\">...</div>",
                    "sk": "<div class=\"pobo-content\">...</div>",
                    "en": "<div class=\"pobo-content\">...</div>",
                    "de": "<div class=\"pobo-content\">...</div>",
                    "pl": "<div class=\"pobo-content\">...</div>",
                    "hu": "<div class=\"pobo-content\">...</div>"
                },
                "marketplace": {
                    "default": "<div class=\"pobo-content\">...</div>",
                    "cs": "<div class=\"pobo-content\">...</div>"
                },
                "nested": [
                    [
                        {
                            "id": 2,
                            "class": "empty",
                            "tag": "div",
                            "children": []
                        }
                    ]
                ]
            },
            "site_link": {
                "html": {
                    "default": "<div id=\"pobo-site-link\" class=\"pobo-site-link__container\"><nav class=\"pobo-site-link__nav\"><a href=\"#nadpis\" class=\"pobo-site-link__anchor\">Nadpis</a></nav></div>"
                },
                "list": {
                    "default": [
                        {
                            "heading": "Nadpis",
                            "slug": "nadpis"
                        }
                    ]
                }
            },
            "rich_snippet": {
                "html": {
                    "default": "<script type=\"application/ld+json\">{...}</script>"
                },
                "json": {
                    "default": {
                        "@context": "https://schema.org",
                        "@type": "FAQPage",
                        "mainEntity": []
                    }
                }
            },
            "created_at": "2024-01-15T10:30:00.000000Z",
            "updated_at": "2024-01-16T14:20:00.000000Z"
        }
    ],
    "meta": {
        "current_page": 1,
        "per_page": 100,
        "total": 12
    }
}
{
    "error": "Authorization token required"
}

Bulk import brands

POST
https://api.pobo.space
/api/v2/rest/brands
requires authentication

Import or update multiple brands at once with multilingual content. The string id field is mapped to brand.remote_id in the database. Maximum 100 brands per request. Invalid brands are skipped and reported in errors.

Supported languages: default, cs, sk, en, de, pl, hu

Validation rules:

  • name.default and url.default are always required
  • If a language key exists anywhere in the request, name.{lang} and url.{lang} are required
  • Other multilang fields (description, seo_title, seo_description) can be null but keys must exist
  • URL must start with https://
  • Unsupported languages are silently ignored

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v2/rest/brands" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"*\": {
        \"id\": \"BRAND-001\",
        \"is_visible\": true,
        \"image_preview\": \"https:\\/\\/example.com\\/brands\\/apple-logo.png\",
        \"name\": {
            \"default\": \"Apple\",
            \"cs\": \"Apple\",
            \"sk\": \"Apple SK\",
            \"en\": \"Apple EN\",
            \"de\": \"Apple DE\",
            \"pl\": \"Apple PL\",
            \"hu\": \"Apple HU\",
            \"*\": \"Apple SK\"
        },
        \"url\": {
            \"default\": \"https:\\/\\/example.com\\/znacky\\/apple\",
            \"cs\": \"https:\\/\\/example.com\\/cs\\/znacky\\/apple\",
            \"sk\": \"https:\\/\\/example.com\\/sk\\/znacky\\/apple\",
            \"en\": \"https:\\/\\/example.com\\/en\\/brands\\/apple\",
            \"de\": \"https:\\/\\/example.com\\/de\\/marken\\/apple\",
            \"pl\": \"https:\\/\\/example.com\\/pl\\/marki\\/apple\",
            \"hu\": \"https:\\/\\/example.com\\/hu\\/markak\\/apple\",
            \"*\": \"https:\\/\\/example.com\\/sk\\/znacky\\/apple\"
        },
        \"description\": {
            \"default\": \"<p>Brand description<\\/p>\",
            \"cs\": \"<p>Popis značky<\\/p>\",
            \"sk\": \"<p>Popis značky SK<\\/p>\",
            \"en\": \"<p>Brand description EN<\\/p>\",
            \"de\": \"<p>Markenbeschreibung<\\/p>\",
            \"pl\": \"<p>Opis marki<\\/p>\",
            \"hu\": \"<p>Márkaleírás<\\/p>\",
            \"*\": \"<p>Brand description<\\/p>\"
        },
        \"seo_title\": {
            \"default\": \"Apple | Eshop\",
            \"cs\": \"Apple | E-shop\",
            \"sk\": \"Apple | Obchod\",
            \"en\": \"Apple | Shop\",
            \"de\": \"Apple | Shop\",
            \"pl\": \"Apple | Sklep\",
            \"hu\": \"Apple | Bolt\",
            \"*\": \"Apple | Eshop\"
        },
        \"seo_description\": {
            \"default\": \"SEO description\",
            \"cs\": \"SEO popis\",
            \"sk\": \"SEO popis SK\",
            \"en\": \"SEO description EN\",
            \"de\": \"SEO Beschreibung\",
            \"pl\": \"Opis SEO\",
            \"hu\": \"SEO leírás\",
            \"*\": \"SEO description\"
        }
    }
}"
Example response:
{
    "success": true,
    "imported": 2,
    "updated": 1,
    "skipped": 1,
    "errors": [
        {
            "index": 3,
            "id": "BRAND-004",
            "errors": [
                "The name.sk field is required when using language sk."
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk import"
        ]
    }
}

Bulk delete brands

DELETE
https://api.pobo.space
/api/v2/rest/brands
requires authentication

Soft-delete multiple brands at once by setting is_delete = true. Brands are identified by external id (mapped to brand.remote_id). Maximum 100 brands per request. Brands that don't exist or are already deleted are skipped.

Note: deleting a brand does NOT clear product.brand_id on associated products — products continue pointing to the soft-deleted brand. The /brands list endpoint filters out soft-deleted brands.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request DELETE \
    "https://api.pobo.space/api/v2/rest/brands" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
Example response:
{
    "success": true,
    "deleted": 2,
    "skipped": 1,
    "errors": [
        {
            "index": 2,
            "id": "BRAND-999",
            "errors": [
                "Brand not found"
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk delete"
        ]
    }
}

Blogs


Blog list

GET
https://api.pobo.space
/api/v2/rest/blogs
requires authentication

Get paginated list of blogs with content in all active languages. Only returns blogs in ready status with is_delete=false (includes both visible and hidden blogs). Draft, review and generate blogs are excluded. Language variants are returned only if is_active=true.

By default, only content.html is returned. Use the include parameter to request additional content: marketplace (marketplace HTML), nested (raw widget JSON), site_link (anchor navigation on H2 headings), rich_snippet (JSON-LD structured data).

When site_link is included, response contains site_link.html (rendered nav HTML per language) and site_link.list (structured array of heading + slug per language). Requires enable_site_link to be enabled on the eshop.

When rich_snippet is included, response contains rich_snippet.html (JSON-LD script tags per language) and rich_snippet.json (parsed JSON-LD object per language). Requires enable_rich_snippet to be enabled on the eshop.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number. Default: 1.

Example:
1
per_page
integer

Items per page. Maximum: 100, Default: 100.

Example:
50
is_edited
boolean

Filter by edited status (is_loaded). Default: true.

Example:
true
last_update_time_from
string

Filter blogs updated after this datetime. Format: Y-m-d H:i:s.

Example:
2024-01-01 14:30:00
include
string

Comma-separated list of additional content to include: nested, marketplace, site_link, rich_snippet.

Example:
marketplace,nested,site_link,rich_snippet
lang
string

Comma-separated list of languages to include: default, cs, sk, en, de, pl, hu, all. Without this parameter only "default" is returned.

Example:
default,cs,sk
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v2/rest/blogs?page=1&per_page=50&is_edited=1&last_update_time_from=2024-01-01+14%3A30%3A00&include=marketplace%2Cnested%2Csite_link%2Crich_snippet&lang=default%2Ccs%2Csk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": "BLOG-001",
            "guid": "550e8400-e29b-41d4-a716-446655440000",
            "category": "news",
            "is_visible": true,
            "is_loaded": false,
            "name": {
                "default": "Blog Title",
                "sk": "Nazov blogu"
            },
            "description": {
                "default": "<p>Blog content</p>",
                "sk": "<p>Obsah blogu</p>"
            },
            "url": {
                "default": "https://example.com/blog-title",
                "sk": "https://example.com/sk/nazov-blogu"
            },
            "seo_title": {
                "default": "Blog Title | SEO",
                "sk": "Nazov blogu | SEO"
            },
            "seo_description": {
                "default": "SEO description",
                "sk": "SEO popis"
            },
            "content": {
                "html": {
                    "default": "<div class=\"pobo-content\">...</div>",
                    "cs": "..."
                },
                "marketplace": {
                    "default": "<div class=\"pobo-content\">...</div>",
                    "cs": "..."
                },
                "nested": [
                    [
                        {
                            "id": 2,
                            "class": "empty",
                            "tag": "div",
                            "children": []
                        }
                    ]
                ]
            },
            "site_link": {
                "html": {
                    "default": "<div id=\"pobo-site-link\" class=\"pobo-site-link__container\"><nav class=\"pobo-site-link__nav\"><a href=\"#nadpis\" class=\"pobo-site-link__anchor\">Nadpis</a></nav></div>"
                },
                "list": {
                    "default": [
                        {
                            "heading": "Nadpis",
                            "slug": "nadpis"
                        }
                    ]
                }
            },
            "rich_snippet": {
                "html": {
                    "default": "<script type=\"application/ld+json\">{...}</script>"
                },
                "json": {
                    "default": {
                        "@context": "https://schema.org",
                        "@type": "FAQPage",
                        "mainEntity": []
                    }
                }
            },
            "created_at": "2024-01-15T10:30:00.000000Z",
            "updated_at": "2024-01-16T14:20:00.000000Z"
        }
    ],
    "meta": {
        "current_page": 1,
        "per_page": 100,
        "total": 25
    }
}
{
    "error": "Authorization token required"
}

Bulk import blogs

POST
https://api.pobo.space
/api/v2/rest/blogs
requires authentication

Import or update multiple blogs at once with multilingual content. Maximum 100 blogs per request. Invalid blogs will be skipped and reported in the errors array.

Supported languages: default, cs, sk, en, de, pl, hu

Validation rules:

  • id, name.default and url.default are always required
  • If a language key exists anywhere in the request, name.{lang} and url.{lang} are required
  • Other multilang fields (description, seo_title, seo_description) can be null but keys must exist
  • URL must start with https://
  • Unsupported languages are silently ignored

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v2/rest/blogs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"*\": {
        \"id\": \"BLOG-001\",
        \"category\": \"news\",
        \"is_visible\": true,
        \"images\": [
            \"https:\\/\\/example.com\\/img1.jpg\"
        ],
        \"name\": {
            \"default\": \"Blog Title\",
            \"sk\": \"Názov blogu\",
            \"*\": \"Názov blogu\"
        },
        \"url\": {
            \"default\": \"https:\\/\\/example.com\\/blog\",
            \"sk\": \"https:\\/\\/example.com\\/sk\\/blog\",
            \"*\": \"https:\\/\\/example.com\\/sk\\/blog\"
        },
        \"description\": {
            \"default\": \"<p>Content<\\/p>\",
            \"sk\": \"<p>Obsah<\\/p>\",
            \"*\": \"sed\"
        },
        \"seo_title\": {
            \"default\": \"SEO Title\",
            \"sk\": \"SEO Názov\",
            \"*\": \"qui\"
        },
        \"seo_description\": {
            \"default\": \"SEO Description\",
            \"sk\": \"SEO Popis\",
            \"*\": \"eum\"
        }
    }
}"
Example response:
{
    "success": true,
    "imported": 2,
    "updated": 1,
    "skipped": 1,
    "errors": [
        {
            "index": 3,
            "id": "BLOG-004",
            "errors": [
                "The name.sk field is required when using language sk."
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk import"
        ]
    }
}

Bulk delete blogs

DELETE
https://api.pobo.space
/api/v2/rest/blogs
requires authentication

Soft-delete multiple blogs at once by setting is_delete = true. Maximum 100 blogs per request. Blogs that don't exist or are already deleted will be skipped.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request DELETE \
    "https://api.pobo.space/api/v2/rest/blogs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
Example response:
{
    "success": true,
    "deleted": 2,
    "skipped": 1,
    "errors": [
        {
            "index": 2,
            "id": "BLOG-999",
            "errors": [
                "Blog not found"
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk delete"
        ]
    }
}

Product listing


Enriched batch rows

GET
https://api.pobo.space
/api/v2/rest/listing/{run}/product
requires authentication

Collect the rows of one listing batch: what the client sent us, merged with what we found, with the origin of every field.

Each field carries source: feed (from the uploaded file), research (looked up, with confidence and reference URLs), generated (written by a model) or manual (corrected by Pobo staff).

Fields we have no value for are OMITTED rather than returned empty — an empty value taken literally by an import would overwrite data on the client's side that Pobo never saw.

external_id is the client's own identifier from the uploaded file (code, or EAN when there is no code), so rows can be matched back.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

run
integer
required

Batch id.

Example:
42

Query Parameters

page
integer

The page number. Default: 1.

Example:
1
per_page
integer

Items per page. Maximum: 200, Default: 200.

Example:
200
updated_since
string

Only rows changed after this datetime. Format: Y-m-d H:i:s.

Example:
2026-08-20 08:00:00
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v2/rest/listing/42/product?page=1&per_page=200&updated_since=2026-08-20+08%3A00%3A00" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "external_id": "2062123",
            "status": "done",
            "updated_at": "2026-08-20T10:00:00+00:00",
            "field": {
                "name": {
                    "value": "DART SMU SKATE SR",
                    "source": "feed"
                },
                "brand": {
                    "value": "Bauer",
                    "source": "feed"
                },
                "bullet": {
                    "value": [
                        "FLEXLITE Chassis"
                    ],
                    "source": "feed"
                }
            },
            "parameter": [
                {
                    "label": "Průměr koleček",
                    "value": "76 mm",
                    "source": "feed"
                },
                {
                    "label": "Vodní sloupec",
                    "value": "10 000 mm",
                    "source": "research",
                    "confidence": 100,
                    "reference": [
                        "https://example.com/product"
                    ]
                }
            ]
        }
    ],
    "meta": {
        "current_page": 1,
        "per_page": 200,
        "total": 994
    }
}
{
    "message": "Listing batch not found"
}

Bulk multi-entity import


Atomic multi-entity bulk import.

POST
https://api.pobo.space
/api/v2/rest/multi-import
requires authentication

Single endpoint for clients that need to import multiple entity types in one call with all-or-nothing semantics. Useful when entities have cross-section dependencies (e.g. products referencing brands or categories created in the same request) — those references are resolved within one DB transaction.

Sections accepted (each optional): parameters, categories, brands, products, blogs. Item structure inside each section is 1:1 with the single-entity endpoints (see api-rest-v2.md).

Behavior:

  • Maximum 100 items total across all sections (NOT per-section).
  • 2-phase processing:
    1. Pre-validation: every item is validated BEFORE the transaction opens. If ANY item has any error, the response is 422 and DB is untouched.
    2. Transactional persist: sections are processed in fixed order parameters → categories → brands → products → blogs. Any DB-layer exception triggers a full rollback.
  • Cross-section references: products can reference brands/categories/parameters that are being imported in the SAME request — pre-validation considers existing IDs ∪ in-request IDs as the valid set.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v2/rest/multi-import" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parameters\": [
        {
            \"id\": 1,
            \"name\": \"Color\",
            \"values\": [
                {
                    \"id\": 11,
                    \"value\": \"Red\"
                },
                {
                    \"id\": 12,
                    \"value\": \"Blue\"
                }
            ]
        }
    ],
    \"categories\": [
        {
            \"id\": \"CAT-1\",
            \"is_visible\": true,
            \"name\": {
                \"default\": \"Electronics\",
                \"sk\": \"Elektronika\"
            },
            \"url\": {
                \"default\": \"https:\\/\\/example.com\\/electronics\",
                \"sk\": \"https:\\/\\/example.com\\/sk\\/elektronika\"
            },
            \"description\": {
                \"default\": \"<p>Electronics category<\\/p>\",
                \"sk\": null
            },
            \"seo_title\": {
                \"default\": \"Electronics | Shop\",
                \"sk\": null
            },
            \"seo_description\": {
                \"default\": \"Best electronics\",
                \"sk\": null
            }
        }
    ],
    \"brands\": [
        {
            \"id\": \"BRAND-001\",
            \"is_visible\": true,
            \"image_preview\": \"https:\\/\\/example.com\\/brands\\/apple-logo.png\",
            \"name\": {
                \"default\": \"Apple\",
                \"sk\": \"Apple SK\"
            },
            \"url\": {
                \"default\": \"https:\\/\\/example.com\\/znacky\\/apple\",
                \"sk\": \"https:\\/\\/example.com\\/sk\\/znacky\\/apple\"
            },
            \"description\": {
                \"default\": \"<p>Brand description<\\/p>\",
                \"sk\": null
            },
            \"seo_title\": {
                \"default\": \"Apple | Eshop\",
                \"sk\": null
            },
            \"seo_description\": {
                \"default\": \"SEO description\",
                \"sk\": null
            }
        }
    ],
    \"products\": [
        {
            \"id\": \"PROD-1\",
            \"is_visible\": true,
            \"brand_id\": \"BRAND-001\",
            \"categories_ids\": [
                \"CAT-1\"
            ],
            \"parameters_ids\": [
                11
            ],
            \"name\": {
                \"default\": \"iPhone 15\",
                \"sk\": \"iPhone 15 SK\"
            },
            \"short_description\": {
                \"default\": \"Short desc\",
                \"sk\": \"Krátky popis\"
            },
            \"description\": {
                \"default\": \"<p>Full description<\\/p>\",
                \"sk\": null
            },
            \"url\": {
                \"default\": \"https:\\/\\/example.com\\/iphone-15\",
                \"sk\": \"https:\\/\\/example.com\\/sk\\/iphone-15-sk\"
            },
            \"seo_title\": {
                \"default\": \"iPhone 15 | Eshop\",
                \"sk\": null
            },
            \"seo_description\": {
                \"default\": \"SEO description\",
                \"sk\": null
            },
            \"images\": [
                \"https:\\/\\/example.com\\/iphone.jpg\"
            ]
        }
    ],
    \"blogs\": [
        {
            \"id\": \"BLOG-1\",
            \"category\": \"news\",
            \"is_visible\": true,
            \"name\": {
                \"default\": \"New article\",
                \"sk\": \"Nový článok\"
            },
            \"url\": {
                \"default\": \"https:\\/\\/example.com\\/news\\/article\",
                \"sk\": \"https:\\/\\/example.com\\/sk\\/spravy\\/clanok\"
            },
            \"description\": {
                \"default\": \"<p>Article body<\\/p>\",
                \"sk\": null
            },
            \"seo_title\": {
                \"default\": \"Article | Blog\",
                \"sk\": null
            },
            \"seo_description\": {
                \"default\": \"Article SEO description\",
                \"sk\": null
            }
        }
    ]
}"
Example response:
{
    "success": true,
    "results": {
        "parameters": {
            "imported": 2,
            "updated": 0,
            "skipped": 0,
            "errors": []
        },
        "categories": {
            "imported": 5,
            "updated": 0,
            "skipped": 0,
            "errors": []
        },
        "brands": {
            "imported": 1,
            "updated": 0,
            "skipped": 0,
            "errors": []
        },
        "products": {
            "imported": 0,
            "updated": 10,
            "skipped": 0,
            "errors": []
        },
        "blogs": {
            "imported": 3,
            "updated": 0,
            "skipped": 0,
            "errors": []
        }
    }
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "products": [
            {
                "index": 2,
                "id": "PROD-XYZ",
                "errors": [
                    "Invalid brand id: BRAND-MISSING"
                ]
            }
        ]
    }
}

API V1 (Legacy)

Products


Bulk import products

POST
https://api.pobo.space
/api/v1/products/bulk-import
requires authentication

Import or update multiple products at once. Maximum 100 products per request. Invalid products will be skipped and reported in the errors array.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v1/products/bulk-import" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
Example response:
{
    "success": true,
    "imported": 2,
    "updated": 0,
    "skipped": 1,
    "errors": [
        {
            "index": 0,
            "id": "PROD-123",
            "errors": [
                "The name field is required."
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk import"
        ]
    }
}

Product list

GET
https://api.pobo.space
/api/v1/products/list
requires authentication

Get paginated list of products with content in all supported languages. Only returns products in ready status — draft, review and generate products are excluded.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number. Default: 1.

Example:
1
per_page
integer

Items per page (max 100). Default: 100.

Example:
10
is_edited
boolean

Filter by edited status. If true, returns only edited products. If false, returns only unedited products. If omitted, returns all products.

Example:
true
last_update_time_from
string

Filter products updated after this datetime. Format: Y-m-d H:i:s (e.g., 2024-01-01 14:30:00).

Example:
2024-01-01 14:30:00
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v1/products/list?page=1&per_page=10&is_edited=1&last_update_time_from=2024-01-01+14%3A30%3A00" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "products": [
        {
            "id": "PROD-123",
            "name": "Sample Product",
            "short_description": "This is a sample product.",
            "url": "https://example.com/product/123",
            "content": {
                "html": {
                    "default": "<h1>Sample Product Description</h1><p>This product is used for demonstration purposes.</p>",
                    "cs": "<h1>Popis vzorového produktu</h1><p>Tento produkt slouží pro demonstrační účely.</p>",
                    "en": "<h1>Sample Product Description</h1><p>This product is used for demonstration purposes.</p>",
                    "de": "<h1>Beispiel Produktbeschreibung</h1><p>Dieses Produkt wird zu Demonstrationszwecken verwendet.</p>",
                    "sk": "<h1>Popis vzorového produktu</h1><p>Tento produkt slúži na demonštračné účely.</p>"
                },
                "marketplace": {
                    "default": "<h1>Sample Product Description</h1><p>This product is used for demonstration purposes.</p>",
                    "cs": "<h1>Popis vzorového produktu</h1><p>Tento produkt slouží pro demonstrační účely.</p>",
                    "en": "<h1>Sample Product Description</h1><p>This product is used for demonstration purposes.</p>",
                    "de": "<h1>Beispiel Produktbeschreibung</h1><p>Dieses Produkt wird zu Demonstrationszwecken verwendet.</p>",
                    "sk": "<h1>Popis vzorového produktu</h1><p>Tento produkt slúži na demonštračné účely.</p>"
                }
            }
        }
    ],
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
{
    "error": "Authorization token required"
}

Categories


Bulk import categories

POST
https://api.pobo.space
/api/v1/categories/bulk-import
requires authentication

Import or update multiple categories at once. Maximum 100 categories per request. Invalid categories will be skipped and reported in the errors array.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v1/categories/bulk-import" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
Example response:
{
    "success": true,
    "imported": 2,
    "updated": 0,
    "skipped": 1,
    "errors": [
        {
            "index": 0,
            "id": "A01.01.07",
            "errors": [
                "The name field is required."
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk import"
        ]
    }
}

Category list

GET
https://api.pobo.space
/api/v1/categories/list
requires authentication

Get paginated list of categories with content in all supported languages. Only returns categories in ready status — draft, review and generate categories are excluded.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number. Default: 1.

Example:
1
per_page
integer

Items per page (max 100). Default: 100.

Example:
10
is_edited
boolean

Filter by edited status. If true, returns only edited categories. If false, returns only unedited categories. If omitted, returns all categories.

Example:
true
last_update_time_from
string

Filter categories updated after this datetime. Format: Y-m-d H:i:s (e.g., 2024-01-01 14:30:00).

Example:
2024-01-01 14:30:00
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v1/categories/list?page=1&per_page=10&is_edited=1&last_update_time_from=2024-01-01+14%3A30%3A00" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "categories": [
        {
            "id": "A01.01.07",
            "name": "Sample Category",
            "url": "https://example.com/category/123",
            "content": {
                "html": {
                    "default": "<h1>Sample Category Description</h1><p>This category is used for demonstration purposes.</p>",
                    "cs": "<h1>Popis vzorové kategorie</h1><p>Tato kategorie slouží pro demonstrační účely.</p>",
                    "en": "<h1>Sample Category Description</h1><p>This category is used for demonstration purposes.</p>",
                    "de": "<h1>Beispiel Kategoriebeschreibung</h1><p>Diese Kategorie wird zu Demonstrationszwecken verwendet.</p>",
                    "sk": "<h1>Popis vzorovej kategórie</h1><p>Táto kategória slúži na demonštračné účely.</p>"
                },
                "marketplace": {
                    "default": "<h1>Sample Category Description</h1><p>This category is used for demonstration purposes.</p>",
                    "cs": "<h1>Popis vzorové kategorie</h1><p>Tato kategorie slouží pro demonstrační účely.</p>",
                    "en": "<h1>Sample Category Description</h1><p>This category is used for demonstration purposes.</p>",
                    "de": "<h1>Beispiel Kategoriebeschreibung</h1><p>Diese Kategorie wird zu Demonstrationszwecken verwendet.</p>",
                    "sk": "<h1>Popis vzorovej kategórie</h1><p>Táto kategória slúži na demonštračné účely.</p>"
                }
            }
        }
    ],
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
{
    "error": "Authorization token required"
}

Parameters


Bulk import parameters

POST
https://api.pobo.space
/api/v1/parameters/bulk-import
requires authentication

Import or update multiple parameters with their values at once. Maximum 100 parameters per request. Invalid parameters will be skipped and reported in the errors array.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v1/parameters/bulk-import" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
Example response:
{
    "success": true,
    "imported": 2,
    "updated": 0,
    "skipped": 1,
    "values_imported": 4,
    "values_updated": 0,
    "errors": [
        {
            "index": 0,
            "id": 1,
            "errors": [
                "The name field is required."
            ]
        }
    ]
}
{
    "error": "Authorization token required"
}
{
    "success": false,
    "errors": {
        "bulk": [
            "Maximum 100 items allowed for bulk import"
        ]
    }
}

White Label — Getting started

Verify that the white-label licence of the eshop is valid before you call anything else.

Check the licence of the eshop behind the token.

POST
https://api.pobo.space
/api/v3/white-label/check-license

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/check-license" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "eshop_id": 4242,
        "has_valid_license": true
    }
}
{
    "message": "Invalid white label token"
}

White Label — Entity

An entity is one product, category, blog post or page of the host, registered in Pobo so it can carry content.

Register a new entity or return existing one.

POST
https://api.pobo.space
/api/v3/white-label/register-entity

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/register-entity" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"entity_id\": \"gikbgiem\",
    \"type\": \"page\",
    \"old_description\": [
        \"odio\"
    ],
    \"title\": [
        \"nemo\"
    ]
}"
Example response:
{
    "data": {
        "id": 991,
        "entity_id": "4242",
        "type": "product",
        "design_id": 377,
        "old_description": "<p>Původní popis z e-shopu</p>",
        "title": "DJI Mavic 4 Pro",
        "created_at": "2026-08-31T09:12:44+02:00",
        "updated_at": "2026-08-31T09:12:44+02:00"
    },
    "message": "Entity registered successfully"
}

Get all entities for the eshop.

GET
https://api.pobo.space
/api/v3/white-label/entity

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/entity" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": 991,
            "entity_id": "4242",
            "type": "product",
            "design_id": 377,
            "old_description": "<p>Původní popis z e-shopu</p>",
            "title": "DJI Mavic 4 Pro",
            "created_at": "2026-08-31T09:12:44+02:00",
            "updated_at": "2026-08-31T09:12:44+02:00"
        }
    ],
    "meta": {
        "total": 1
    }
}

Get pure HTML for all languages.

GET
https://api.pobo.space
/api/v3/white-label/entity/{entityId}/type/{entityType}/html

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
in
entityType
string
required
Example:
mollitia
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/entity/in/type/mollitia/html" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "html": {
        "default": "<div class=\"pb-section\">…</div>",
        "cs": "<div class=\"pb-section\">…</div>"
    }
}
{
    "error": "No widgets found for this entity"
}

White Label — Design templates

Templates the eshop can use, what each of them can be filled with, and the endpoint that fills one with your own content.

List design templates the white-label eshop can generate from.

GET
https://api.pobo.space
/api/v3/white-label/design

Accessible = visible public templates + custom templates bound to the eshop via the eshop_design pivot (same rule as the main-app template picker). Optional type query param (product/page/blog/category) narrows the list to templates matching the edited entity type.

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/design" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": 377,
            "name": "DJI Mavic 4 Pro",
            "name_translation": {
                "cs": "DJI Mavic 4 Pro"
            },
            "info": null,
            "image_preview": "https://pobo-cdn.b-cdn.net/templates-preview/mavic.png",
            "category": "product",
            "type": "public",
            "position": 3,
            "hash": "6f1c0e0f2a",
            "widgets_count": 11,
            "preview_url": null
        }
    ]
}

Server-rendered HTML preview of a design template (default language).

GET
https://api.pobo.space
/api/v3/white-label/design/{id}/preview

Used by the editor's template picker for custom templates without an image_preview — the editor wraps the HTML in #pobo-widget-preview and scales it down to a thumbnail.

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
string
required

The ID of the design.

Example:
7
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/design/7/preview" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": 377,
        "html": "<div class=\"pb-section\">…</div>"
    }
}
{
    "message": "Design template not found"
}

What a design template can be filled with.

GET
https://api.pobo.space
/api/v3/white-label/design/{id}/structure

Lists every widget of the template in display order: which roles it takes, how long each text may be, how many items a repeatable widget holds and how many images and icons it carries. Widgets that cannot be filled stay in the list with a reason, so the caller sees the whole template and does not recount positions.

The counterpart of POST /white-label/entity/{entityId}/type/{entityType}/design — without this call the caller has no way to know what to send.

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
string
required

The ID of the design.

Example:
2
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/design/2/structure" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "design_id": 377,
    "design_name": "DJI Mavic 4 Pro",
    "category": "product",
    "widget": [
        {
            "design_widget_id": 71,
            "position": 0,
            "type": "section",
            "widget_name": "Text vpravo a větší obrázek vlevo",
            "widget_description": "Obrázek s textem",
            "fillable": true,
            "item_count": 1,
            "field": [
                {
                    "role": "paragraph",
                    "format": "html",
                    "max_length": 300,
                    "hint": "Odstavec popisující výhody produktu."
                }
            ],
            "item_field": [],
            "image_slot": 1,
            "icon_slot": 0
        },
        {
            "design_widget_id": 80,
            "position": 6,
            "type": "benefit",
            "widget_name": "Tři obrázky vedle sebe s textem uvnitř",
            "widget_description": "Benefity produktu",
            "fillable": true,
            "item_count": 3,
            "field": [],
            "item_field": [
                {
                    "role": "benefit_title",
                    "format": "text",
                    "max_length": 40,
                    "hint": "Krátký nadpis benefitu."
                },
                {
                    "role": "benefit_text",
                    "format": "text",
                    "max_length": 150,
                    "hint": "Věta k benefitu."
                }
            ],
            "image_slot": 3,
            "icon_slot": 0
        },
        {
            "design_widget_id": 110,
            "position": 3,
            "widget_name": "Velký obrázek vpravo a dva malé vlevo",
            "fillable": false,
            "reason": "no_content_field"
        }
    ]
}
{
    "message": "Design template not found"
}

Fill a design template with your own content and get the HTML back.

POST
https://api.pobo.space
/api/v3/white-label/entity/{entityId}/type/{entityType}/design

The content is written by the caller, not by AI: texts keyed by role, image and icon URLs of the host. The widgets are stored on the entity, so the merchant can open them in the editor afterwards — and the rendered HTML comes back in the same response, for every language of the eshop.

A widget that is not sent is not rendered at all, and a second call replaces the whole content of the entity. Costs no credits, nothing is generated.

Ask GET /white-label/design/{id}/structure first — which roles a widget takes, how long the texts may be and how many images it holds is a property of the template, not a convention.

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
omnis
entityType
string
required
Example:
fuga

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/entity/omnis/type/fuga/design" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"design_id\": 377,
    \"widget\": [
        {
            \"design_widget_id\": 71,
            \"image\": [
                \"aj\"
            ],
            \"icon\": [
                \"bfxpvd\"
            ]
        }
    ]
}"
Example response:
{
    "html": {
        "default": "<div class=\"pb-section\">…</div>",
        "cs": "<div class=\"pb-section\">…</div>"
    },
    "widget_created": 3
}
{
    "message": "Entity not found"
}
{
    "message": "This widget holds exactly 3 items, 2 given.",
    "errors": {
        "widget.1.content.item": [
            "This widget holds exactly 3 items, 2 given."
        ]
    }
}

White Label — Content

Widgets of an entity — read them, add them, reorder them, delete them.

Store a new widget for whitelabel.

POST
https://api.pobo.space
/api/v3/white-label/content/{entityId}/type/{entityType}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
quidem
entityType
string
required
Example:
nulla

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/content/quidem/type/nulla" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"widget_id\": 15,
    \"position\": 57,
    \"json\": [
        {
            \"id\": 19,
            \"parent_id\": 3,
            \"child_id\": 10,
            \"class\": \"et\",
            \"is_editable\": false,
            \"tag\": \"et\",
            \"value\": [],
            \"extension\": []
        }
    ],
    \"added\": true,
    \"ord\": [
        {
            \"id\": 6,
            \"position\": 3
        }
    ]
}"
Example response:
[
    {
        "id": 512,
        "key": 4821,
        "widget_id": 8,
        "children": [],
        "html": "<div class=\"pb-section\">…</div>",
        "is_original": false
    }
]
{
    "error": "White label not found"
}

Get list of widgets for the white label content.

GET
https://api.pobo.space
/api/v3/white-label/content/{entityId}/type/{entityType}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
et
entityType
string
required
Example:
laborum
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/content/et/type/laborum" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[
    {
        "id": 512,
        "key": 4821,
        "widget_id": 8,
        "children": [],
        "html": "<div class=\"pb-section\">…</div>",
        "is_original": false
    }
]
{
    "error": "White label not found"
}

Update widget positions and content.

PUT
https://api.pobo.space
/api/v3/white-label/content/{entityId}/type/{entityType}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
aspernatur
entityType
string
required
Example:
ex

Body Parameters

Example request:
curl --request PUT \
    "https://api.pobo.space/api/v3/white-label/content/aspernatur/type/ex" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"*\": {
        \"children\": [
            {
                \"id\": 5,
                \"parent_id\": 4,
                \"child_id\": 7,
                \"class\": \"id\",
                \"is_editable\": true,
                \"tag\": \"quasi\",
                \"value\": {
                    \"default\": \"repudiandae\",
                    \"cs\": \"delectus\",
                    \"sk\": \"doloribus\",
                    \"en\": \"nesciunt\",
                    \"de\": \"ut\",
                    \"pl\": \"quasi\",
                    \"hu\": \"nihil\",
                    \"uk\": \"perferendis\"
                },
                \"extension\": []
            }
        ]
    }
}"
Example response:
[
    {
        "id": 512,
        "key": 4821,
        "widget_id": 8,
        "children": [],
        "html": "<div class=\"pb-section\">…</div>",
        "is_original": false
    }
]
{
    "error": "White label not found"
}

Delete one widget of an entity.

DELETE
https://api.pobo.space
/api/v3/white-label/content/{entityId}/type/{entityType}/widget/{widgetId}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
aut
entityType
string
required
Example:
veniam
widgetId
string
required
Example:
ut
Example request:
curl --request DELETE \
    "https://api.pobo.space/api/v3/white-label/content/aut/type/veniam/widget/ut" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[
    {
        "id": 512,
        "key": 4821,
        "widget_id": 8,
        "children": [],
        "html": "<div class=\"pb-section\">…</div>",
        "is_original": false
    }
]
{
    "error": "White label not found"
}

Copy one element into the entity content.

POST
https://api.pobo.space
/api/v3/white-label/content/element-copy/{entityId}/type/{entityType}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
nobis
entityType
string
required
Example:
est

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/content/element-copy/nobis/type/est" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"action\": \"remove\",
    \"index\": 7,
    \"contentId\": 13,
    \"parent\": \"cumque\"
}"
Example response:
[
    {
        "id": 512,
        "key": 4821,
        "widget_id": 8,
        "children": [],
        "html": "<div class=\"pb-section\">…</div>",
        "is_original": false
    }
]
{
    "error": "White label not found"
}

Get list of widgets for the white label content.

POST
https://api.pobo.space
/api/v3/white-label/content/dom/{entityId}/type/{entityType}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
qui
entityType
string
required
Example:
non
Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/content/dom/qui/type/non" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "entity_id": "4242",
        "entity_type": "product",
        "html": "<div class=\"pb-section\">…</div>"
    }
}
{
    "error": "White label not found"
}

Copy widgets from source entity to target entity.

POST
https://api.pobo.space
/api/v3/white-label/content/copy-widget

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/content/copy-widget" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"source_entity_id\": \"clhewopjn\",
    \"target_entity_id\": \"raangrae\",
    \"type\": \"blog\"
}"
Example response:
{
    "message": "Widgets copied successfully",
    "copied_count": 4
}
{
    "error": "White label not found"
}

White Label — AI generation

Let Pobo write the content: post the product data, poll the job, read the result. Costs credits.

Remaining credit balance of the white-label eshop.

GET
https://api.pobo.space
/api/v3/white-label/credit

Consumed by the editor's AI generator modal to show the balance and disable the confirm action when the estimated run cost exceeds it (the generate endpoint enforces the same limit server-side with 422). Prices themselves come from the public /public/credit price list.

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/credit" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "remaining": 1240
    }
}

List custom text prompts of the white-label eshop for the generate modal.

GET
https://api.pobo.space
/api/v3/white-label/prompt

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/prompt" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": 12,
            "name": "Drony — technický tón",
            "prompt": "Piš věcně, bez superlativů…",
            "remove_exist_widget": true,
            "use_serp_context": false,
            "use_web_research": true,
            "search_web": [
                "https://www.dji.com"
            ],
            "search_model": [
                "openai"
            ]
        }
    ]
}

Start AI content generation for a white-label entity from a design template.

POST
https://api.pobo.space
/api/v3/white-label/content/{entityId}/type/{entityType}/generate

Creates a JobGeneratorWhitelabel row (snapshot of the entity context sent by the embedding host page) and dispatches the async generation job. The editor then polls {@see show()} until the job is done and re-fetches the content.

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
eius
entityType
string
required
Example:
id

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/content/eius/type/id/generate" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"design_id\": 1,
    \"prompt_id\": 4,
    \"remove_exist_widget\": false,
    \"lang\": \"cs\",
    \"name\": \"wlukyqwckhayusyskjjwyh\",
    \"short_description\": \"otoyzc\",
    \"old_description\": \"tozgwjmr\",
    \"parameter\": \"yl\",
    \"ean\": \"pk\",
    \"use_serp_context\": true,
    \"use_web_research\": true,
    \"search_web\": [
        \"jctyhgtdqifxpexidjiaimdh\"
    ],
    \"search_model\": [
        \"gemini\"
    ],
    \"paragraph_length\": 21,
    \"use_ai_profile\": true
}"
Example response:
{
    "data": {
        "id": 77,
        "status": "pending",
        "design_id": 377,
        "lang": "cs",
        "widgets_created": 0,
        "error_message": null,
        "created_at": "2026-08-31T10:00:00+02:00",
        "updated_at": "2026-08-31T10:00:00+02:00"
    }
}
{
    "message": "Generation is already running for this entity"
}
{
    "message": "Not enough credits"
}

The generation job currently in flight for an entity, if any.

GET
https://api.pobo.space
/api/v3/white-label/content/{entityId}/type/{entityType}/generate

Called on editor init so a page refresh can resume the progress overlay and polling — the job id otherwise lives only in the editor's memory. 404 = nothing running (completed/failed jobs are not returned).

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

entityId
string
required
Example:
ratione
entityType
string
required
Example:
quo
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/content/ratione/type/quo/generate" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": 77,
        "status": "done",
        "design_id": 377,
        "lang": "cs",
        "widgets_created": 5,
        "error_message": null,
        "created_at": "2026-08-31T10:00:00+02:00",
        "updated_at": "2026-08-31T10:01:12+02:00"
    }
}
{
    "message": "No running generation"
}

Poll the status of a white-label generation job.

GET
https://api.pobo.space
/api/v3/white-label/generate/{id}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
string
required

The ID of the generate.

Example:
21886341
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/generate/21886341" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": 77,
        "status": "done",
        "design_id": 377,
        "lang": "cs",
        "widgets_created": 5,
        "error_message": null,
        "created_at": "2026-08-31T10:00:00+02:00",
        "updated_at": "2026-08-31T10:01:12+02:00"
    }
}
{
    "message": "Job not found"
}

White Label — Widgets

The catalogue of widgets the editor offers, and the favourites of the eshop.

Get a list of visible widgets with their categories.

GET
https://api.pobo.space
/api/v3/white-label/widget

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/widget" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"category_id\": 6
}"
Example response:
{
    "data": [
        {
            "id": 3,
            "name": "Text a obrázek",
            "public": true,
            "ico": "image",
            "widget": [
                {
                    "id": 8,
                    "name": "Text vpravo a větší obrázek vlevo",
                    "zoom": 50,
                    "category": 3
                }
            ]
        }
    ]
}

Get list of widget favourites for the eshop.

GET
https://api.pobo.space
/api/v3/white-label/widget-favourite

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/widget-favourite" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": 8,
            "widget_id": 341,
            "name": "Můj benefitový blok",
            "children": [],
            "created_at": "2026-08-31T09:00:00+02:00",
            "updated_at": "2026-08-31T09:00:00+02:00"
        }
    ]
}

Store a new widget favourite.

POST
https://api.pobo.space
/api/v3/white-label/widget-favourite

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.pobo.space/api/v3/white-label/widget-favourite" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"cwlklfozyhfhyi\",
    \"widget_id\": 10,
    \"children\": [
        {
            \"id\": 11,
            \"parent_id\": 10,
            \"child_id\": 2,
            \"class\": \"hssp\",
            \"is_editable\": 1,
            \"tag\": \"qxfqxoxoqkfcw\",
            \"value\": {
                \"default\": \"corrupti\",
                \"cs\": \"quidem\",
                \"sk\": \"quaerat\",
                \"en\": \"doloremque\",
                \"de\": \"dignissimos\",
                \"pl\": \"illo\",
                \"hu\": \"laboriosam\",
                \"uk\": \"qui\"
            },
            \"extension\": {
                \"default\": \"est\",
                \"cs\": \"libero\",
                \"sk\": \"error\",
                \"en\": \"aut\",
                \"de\": \"eaque\",
                \"pl\": \"sit\",
                \"hu\": \"sit\",
                \"uk\": \"velit\"
            }
        }
    ]
}"
Example response:
{
    "data": {
        "id": 8,
        "widget_id": 341,
        "name": "Můj benefitový blok",
        "children": [],
        "created_at": "2026-08-31T09:00:00+02:00",
        "updated_at": "2026-08-31T09:00:00+02:00"
    }
}

Get a specific widget favourite.

GET
https://api.pobo.space
/api/v3/white-label/widget-favourite/{id}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
string
required

The ID of the widget favourite.

Example:
8
Example request:
curl --request GET \
    --get "https://api.pobo.space/api/v3/white-label/widget-favourite/8" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": 8,
        "widget_id": 341,
        "name": "Můj benefitový blok",
        "children": [],
        "created_at": "2026-08-31T09:00:00+02:00",
        "updated_at": "2026-08-31T09:00:00+02:00"
    }
}
{
    "error": "Widget favourite not found"
}

Delete a widget favourite.

DELETE
https://api.pobo.space
/api/v3/white-label/widget-favourite/{id}

Headers

pobo-white-label-token
Example:
your-white-label-token-here
Origin
Example:
https://your-allowed-domain.example
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
string
required

The ID of the widget favourite.

Example:
02847
Example request:
curl --request DELETE \
    "https://api.pobo.space/api/v3/white-label/widget-favourite/02847" \
    --header "pobo-white-label-token: your-white-label-token-here" \
    --header "Origin: https://your-allowed-domain.example" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "message": "Widget favourite successfully deleted"
}
{
    "error": "Widget favourite not found"
}