API-Referenz-Navigation
Content
AdminContent groups 10 operations on the admin tier.
Admin tier. Requires an RBAC-gated vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.
/api/{version}/admin/content/pages
One cursored page of content pages, published or not, in the request's active language. Follow the Link: rel="next" header for the next page; a page_info that was not issued for this exact query string is rejected with 422.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
| limit optional | integer (int32) |
Antworten
- 200PageListResponseOK
- 422ApiErrorResponseUnprocessable Content
curl -X GET \
'https://<your-shop-domain>/api/2026-04-01/admin/content/pages' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>'{
"pages": [
{
"id": "00000000-0000-0000-0000-000000000000",
"handle": "string",
"title": "string",
"body_html": "string",
"published": true,
"template": "string",
"type": "string",
"show_in_header": true,
"show_in_footer": true,
"sort_order": 1,
"meta_description": "string",
"meta_keywords": "string",
"menu_title": "string",
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
]
}/api/{version}/admin/content/pages
Creates a page in the active language and returns it as stored. A missing body and a rejected field both surface as 422.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Request-Body
application/json, text/json, application/*+json · optional
CreatePageRequestBody for POST content/pages. handle is required; type defaults to common.
handlestringnullabletitlestringnullablebody_htmlstringnullablepublishedbooleantemplatestringnullabletypestringnullableshow_in_headerbooleanshow_in_footerbooleansort_orderinteger (int32)meta_descriptionstringnullablemeta_keywordsstringnullablemenu_titlestringnullable
Antworten
- 201PageResponseCreated
- 422ApiErrorResponseUnprocessable Content
curl -X POST \
'https://<your-shop-domain>/api/2026-04-01/admin/content/pages' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>' \
-H 'Content-Type: application/json' \
-d '{
"handle": "string",
"title": "string",
"body_html": "string",
"published": true,
"template": "string",
"type": "string",
"show_in_header": true,
"show_in_footer": true,
"sort_order": 1,
"meta_description": "string",
"meta_keywords": "string",
"menu_title": "string"
}'{
"page": {
"id": "00000000-0000-0000-0000-000000000000",
"handle": "string",
"title": "string",
"body_html": "string",
"published": true,
"template": "string",
"type": "string",
"show_in_header": true,
"show_in_footer": true,
"sort_order": 1,
"meta_description": "string",
"meta_keywords": "string",
"menu_title": "string",
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
}/api/{version}/admin/content/pages/{id}
One content page in the active language.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Pfad-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
| id erforderlich | string (uuid) |
Antworten
- 200PageResponseOK
- 404ApiErrorResponseNot Found
curl -X GET \
'https://<your-shop-domain>/api/2026-04-01/admin/content/pages/<id>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>'{
"page": {
"id": "00000000-0000-0000-0000-000000000000",
"handle": "string",
"title": "string",
"body_html": "string",
"published": true,
"template": "string",
"type": "string",
"show_in_header": true,
"show_in_footer": true,
"sort_order": 1,
"meta_description": "string",
"meta_keywords": "string",
"menu_title": "string",
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
}/api/{version}/admin/content/pages/{id}
Applies the supplied fields to the page in the active language and returns it as stored.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Pfad-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
| id erforderlich | string (uuid) |
Request-Body
application/json, text/json, application/*+json · optional
UpdatePageRequestBody for PUT content/pages/{id}. Every field is optional; only the supplied ones are applied.
handlestringnullabletitlestringnullablebody_htmlstringnullablepublishedbooleannullabletemplatestringnullabletypestringnullableshow_in_headerbooleannullableshow_in_footerbooleannullablesort_orderinteger (int32)nullablemeta_descriptionstringnullablemeta_keywordsstringnullablemenu_titlestringnullable
Antworten
- 200PageResponseOK
- 404ApiErrorResponseNot Found
- 422ApiErrorResponseUnprocessable Content
curl -X PUT \
'https://<your-shop-domain>/api/2026-04-01/admin/content/pages/<id>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>' \
-H 'Content-Type: application/json' \
-d '{
"handle": "string",
"title": "string",
"body_html": "string",
"published": true,
"template": "string",
"type": "string",
"show_in_header": true,
"show_in_footer": true,
"sort_order": 1,
"meta_description": "string",
"meta_keywords": "string",
"menu_title": "string"
}'{
"page": {
"id": "00000000-0000-0000-0000-000000000000",
"handle": "string",
"title": "string",
"body_html": "string",
"published": true,
"template": "string",
"type": "string",
"show_in_header": true,
"show_in_footer": true,
"sort_order": 1,
"meta_description": "string",
"meta_keywords": "string",
"menu_title": "string",
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
}/api/{version}/admin/content/pages/{id}
Deletes the page in every language. Returns 204 with no body; deleting an already-deleted page is a 404, not a no-op success.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Pfad-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
| id erforderlich | string (uuid) |
Antworten
- 204No Content
- 404ApiErrorResponseNot Found
curl -X DELETE \
'https://<your-shop-domain>/api/2026-04-01/admin/content/pages/<id>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>'/api/{version}/admin/content/articles
One cursored page of blog articles, published or not, in the request's active language. Follow the Link: rel="next" header for the next page; a page_info that was not issued for this exact query string is rejected with 422.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
| limit optional | integer (int32) |
Antworten
- 200ArticleListResponseOK
- 422ApiErrorResponseUnprocessable Content
curl -X GET \
'https://<your-shop-domain>/api/2026-04-01/admin/content/articles' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>'{
"articles": [
{
"id": "00000000-0000-0000-0000-000000000000",
"title": "string",
"summary_html": "string",
"body_html": "string",
"published": true,
"image": {
"id": "00000000-0000-0000-0000-000000000000",
"src": "string",
"preview_src": "string",
"alt": "string",
"position": 1,
"width": 1,
"height": 1
},
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
]
}/api/{version}/admin/content/articles
Creates a blog article in the active language and returns it as stored. A missing body and a rejected field both surface as 422.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Request-Body
application/json, text/json, application/*+json · optional
CreateArticleRequestBody for POST content/articles. title is required.
titlestringnullablesummary_htmlstringnullablebody_htmlstringnullablepublishedboolean
Antworten
- 201ArticleResponseCreated
- 422ApiErrorResponseUnprocessable Content
curl -X POST \
'https://<your-shop-domain>/api/2026-04-01/admin/content/articles' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>' \
-H 'Content-Type: application/json' \
-d '{
"title": "string",
"summary_html": "string",
"body_html": "string",
"published": true
}'{
"article": {
"id": "00000000-0000-0000-0000-000000000000",
"title": "string",
"summary_html": "string",
"body_html": "string",
"published": true,
"image": {
"id": "00000000-0000-0000-0000-000000000000",
"src": "string",
"preview_src": "string",
"alt": "string",
"position": 1,
"width": 1,
"height": 1
},
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
}/api/{version}/admin/content/articles/{id}
One blog article in the active language.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Pfad-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
| id erforderlich | string (uuid) |
Antworten
- 200ArticleResponseOK
- 404ApiErrorResponseNot Found
curl -X GET \
'https://<your-shop-domain>/api/2026-04-01/admin/content/articles/<id>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>'{
"article": {
"id": "00000000-0000-0000-0000-000000000000",
"title": "string",
"summary_html": "string",
"body_html": "string",
"published": true,
"image": {
"id": "00000000-0000-0000-0000-000000000000",
"src": "string",
"preview_src": "string",
"alt": "string",
"position": 1,
"width": 1,
"height": 1
},
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
}/api/{version}/admin/content/articles/{id}
Applies the supplied fields to the article in the active language and returns it as stored.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Pfad-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
| id erforderlich | string (uuid) |
Request-Body
application/json, text/json, application/*+json · optional
UpdateArticleRequestBody for PUT content/articles/{id}. Every field is optional; only the supplied ones are applied.
titlestringnullablesummary_htmlstringnullablebody_htmlstringnullablepublishedbooleannullable
Antworten
- 200ArticleResponseOK
- 404ApiErrorResponseNot Found
- 422ApiErrorResponseUnprocessable Content
curl -X PUT \
'https://<your-shop-domain>/api/2026-04-01/admin/content/articles/<id>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>' \
-H 'Content-Type: application/json' \
-d '{
"title": "string",
"summary_html": "string",
"body_html": "string",
"published": true
}'{
"article": {
"id": "00000000-0000-0000-0000-000000000000",
"title": "string",
"summary_html": "string",
"body_html": "string",
"published": true,
"image": {
"id": "00000000-0000-0000-0000-000000000000",
"src": "string",
"preview_src": "string",
"alt": "string",
"position": 1,
"width": 1,
"height": 1
},
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
}/api/{version}/admin/content/articles/{id}
Deletes the article in every language. Returns 204 with no body; deleting an already-deleted article is a 404.
vnstat_ access token, sent as Authorization: Bearer … or X-Vinosoft-Access-Token.Pfad-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
| id erforderlich | string (uuid) |
Antworten
- 204No Content
- 404ApiErrorResponseNot Found
curl -X DELETE \
'https://<your-shop-domain>/api/2026-04-01/admin/content/articles/<id>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer vnstat_<token>'Schemas
ApiErrorResponse
The error envelope every non-2xx response from this API uses. Documentation shape: actions build it as an anonymous object, so this type exists to give the OpenAPI document a schema to point at.
errorsstringnullableHuman-readable description of what went wrong, e.g.
Not Found,Invalid page_info.codestringnullableMachine-readable error code. Only a few endpoints (checkout) emit one; omitted everywhere else.
ArticleDto
Admin representation of a blog article (the content/articles resource, backed by the existing
News domain). Serialized snake_case. Single-active-language design: title/summary_html/
body_html are flat values for the request's active language. News has no handle, so none is
exposed.
idstring (uuid)titlestringnullablesummary_htmlstringnullablebody_htmlstringnullablepublishedbooleanimageStorefrontImageDtocreated_atstring (date-time)updated_atstring (date-time)nullable
ArticleListResponse
Envelope returned by GET /admin/content/articles. Cursored exactly like
Cloudwawi.Shop.Api.V2026_04_01.PageListResponse; the two cursors are not interchangeable.
The page of blog articles, published or not, each in the request's active language. Always present; an empty array when the tenant has none.
ArticleResponse
Envelope returned by GET /admin/content/articles/{id}, POST /admin/content/articles (201)
and PUT /admin/content/articles/{id}.
articleArticleDto
CreateArticleRequest
Body for POST content/articles. title is required.
titlestringnullablesummary_htmlstringnullablebody_htmlstringnullablepublishedboolean
CreatePageRequest
Body for POST content/pages. handle is required; type defaults to common.
handlestringnullabletitlestringnullablebody_htmlstringnullablepublishedbooleantemplatestringnullabletypestringnullableshow_in_headerbooleanshow_in_footerbooleansort_orderinteger (int32)meta_descriptionstringnullablemeta_keywordsstringnullablemenu_titlestringnullable
PageDto
Admin representation of a content page (the content/pages resource, backed by the existing
StaticPage domain). Serialized snake_case via explicit [JsonPropertyName] attributes, because
the host's global JSON policy is camelCase. Single-active-language design: title/body_html/meta
are flat values for the request's active language, not a translations map.
idstring (uuid)handlestringnullableURL slug (the domain
Url); unique within the tenant.titlestringnullablebody_htmlstringnullablepublishedbooleanWhether the page is visible on the storefront.
templatestringnullableStorefront template override;
nullfor the default.typestringnullablePage kind:
common(HTML) orliquid(rendered template).show_in_headerbooleanshow_in_footerbooleansort_orderinteger (int32)meta_descriptionstringnullablemeta_keywordsstringnullablemenu_titlestringnullablecreated_atstring (date-time)updated_atstring (date-time)nullable
PageListResponse
Envelope returned by GET /admin/content/pages.
One page of content pages. Paging is cursored: when more exist, the response carries a Link header
of the form <https://…?limit=50&page_info=…>; rel="next". Follow that URL verbatim — the
cursor embeds a fingerprint of the query that produced the page, and a request whose query string no
longer matches is rejected with 422. There is no total count and no last page link.
The page of content pages, published or not, each in the request's active language. Always present; an empty array when the tenant has none.
PageResponse
Envelope returned by GET /admin/content/pages/{id}, POST /admin/content/pages (201) and
PUT /admin/content/pages/{id}.
pagePageDto
StorefrontImageDto
Storefront representation of a product image. An image is an object (id, src, alt,
position, width, height) rather than a bare URL, so clients get the gallery order,
accessibility text, and intrinsic dimensions.
idstring (uuid)srcstringnullablepreview_srcstringnullablealtstringnullablepositioninteger (int32)widthinteger (int32)heightinteger (int32)
UpdateArticleRequest
Body for PUT content/articles/{id}. Every field is optional; only the supplied ones are applied.
titlestringnullablesummary_htmlstringnullablebody_htmlstringnullablepublishedbooleannullable
UpdatePageRequest
Body for PUT content/pages/{id}. Every field is optional; only the supplied ones are applied.
handlestringnullabletitlestringnullablebody_htmlstringnullablepublishedbooleannullabletemplatestringnullabletypestringnullableshow_in_headerbooleannullableshow_in_footerbooleannullablesort_orderinteger (int32)nullablemeta_descriptionstringnullablemeta_keywordsstringnullablemenu_titlestringnullable
