Przejdź do głównej zawartości

Endpointy API

Mediaverse v2 wystawia niewielką liczbę adminowych endpointów HTTP, używanych głównie przez UI admina do zapobiegania przypadkowemu usunięciu mediów, które są w użyciu.

Wszystkie endpointy wymagają prawidłowej sesji admina (cookie albo tokenu Authorization: Bearer … z /api/oauth/token).

MetodaŚcieżkaCel
GET/api/p2lab-product-video/get-media-in-products-usage/{mediaId}Zwraca listę produktów, które używają danego medium jako wideo.
GET/api/p2lab-product-video/get-media-in-cms-usage/{mediaId}Zwraca listę stron CMS / bloków, które używają danego medium.

Oba zwracają 200 OK z body JSON wymieniającym konsumentów albo pustą tablicę, jeśli medium nie jest używane.

v2 nie rejestruje XML dla niestandardowych pól — ustawienia per wpis medium są przechowywane jako JSON w istniejącej kolumnie product_media.custom_fields. Kształt jest mniej więcej taki:

{
"p2labProductVideo": {
"url": "https://...",
"source": "youtube | vimeo | facebook | dailymotion | tiktok",
"mediaId": "uuid",
"videoSources": ["uuid-360p", "uuid-720p", "uuid-1080p"],
"translation": {
"de-DE": "uuid-of-german-media"
},
"translationSources": {
"de-DE": ["uuid-360p", "uuid-720p"]
}
}
}

Przechowywane pole to source (rozpoznany dostawca). type (embed vs media) jest wyliczany w runtime na podstawie obecności url (embed) lub mediaId (media) — nie jest persystowany w JSON.

Automatycznie wykrywane źródła są ograniczone do YouTube, Vimeo, Facebook, Dailymotion i TikTok. Gcore jest do wyboru w konfiguracji systemowej, ale nie jest auto-rozpoznawane z wklejonego URL — trzeba je wybrać jawnie.

Ten JSON jest źródłem prawdy dla zachowania per wideo. Ustawienia z system-config definiują tylko wartości domyślne.

Dla bloku CMS Mediaverse (p2lab-cms-video) konfiguracja jest przechowywana w cms_slot.config (JSON) z podobnym kształtem. Każdy slot CMS ma własny config — nie współdzielą stanu między stronami.

Wszystkie odpowiedzi błędów stosują standardowy format admin Shopware:

{
"errors": [
{
"code": "...",
"detail": "Human-readable error",
"status": "400"
}
]
}