apiФункція плану Growth

API ендпоінти

Повний довідник усіх REST API ендпоінтів Screenzzie

docs.apiCtaBanner.title

docs.apiCtaBanner.description

Довідник API ендпоінтів

Повна документація всіх доступних REST API ендпоінтів.

Організація та інтроспекція

Отримайте інформацію про Ваш поточний API контекст та організацію.

Отримати поточний контекст

GET /api/v1/me

Повертає інформацію про Ваш API ключ, організацію, ліміти запитів та доступні функції. Цей ендпоінт не враховується в ліміті запитів.

Приклад запиту:

curl -X GET "https://www.screenzzie.com/api/v1/me" \
  -H "Authorization: Bearer sk_live_xxx"

Приклад відповіді:

{
  "success": true,
  "data": {
    "apiKey": {
      "id": "uuid",
      "name": "My API Key",
      "keyPrefix": "sk_live_abc123",
      "scopes": ["screens:read", "screens:write", "playlists:read"],
      "expiresAt": null,
      "lastUsedAt": "2024-01-15T10:30:00Z"
    },
    "organization": {
      "id": "uuid",
      "name": "My Company",
      "planId": "growth",
      "subscriptionStatus": "active",
      "trialEndsAt": null,
      "maxScreensAllowed": 50,
      "activeScreensCount": 12
    },
    "rateLimits": {
      "limit": 100000,
      "used": 45,
      "remaining": 99955,
      "resetAtMs": 1704153600000
    },
    "features": {
      "sequences": true,
      "schedules": true,
      "api": true
    }
  }
}

Список організацій

GET /api/v1/organizations

Повертає організації, доступні з Вашим API ключем. Наразі кожен API ключ належить рівно одній організації.

Параметри запиту:

ПараметрТипОпис
pagenumberНомер сторінки (за замовчуванням: 1)
limitnumberЕлементів на сторінку (за замовчуванням: 20, макс: 100)

Приклад запиту:

curl -X GET "https://www.screenzzie.com/api/v1/organizations" \
  -H "Authorization: Bearer sk_live_xxx"

Приклад відповіді:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "My Company",
        "planId": "growth",
        "subscriptionStatus": "active",
        "maxScreensAllowed": 50,
        "activeScreensCount": 12,
        "createdAt": "2024-01-01T00:00:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 1,
      "totalPages": 1,
      "hasMore": false
    }
  }
}

Екрани

Керуйте екранами цифрових вивісок.

Список екранів

GET /api/v1/screens

Параметри запиту:

ПараметрТипОпис
pagenumberНомер сторінки (за замовчуванням: 1)
limitnumberЕлементів на сторінку (за замовчуванням: 20, макс: 100)
isActivebooleanФільтр за активним статусом
isOnlinebooleanФільтр за онлайн статусом
screenGroupIduuidФільтр за групою екранів
workspaceIduuidФільтр за робочим простором

Приклад запиту:

curl -X GET "https://www.screenzzie.com/api/v1/screens?isOnline=true&limit=10" \
  -H "Authorization: Bearer sk_live_xxx"

Приклад відповіді:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "Lobby Display",
        "description": "Main entrance screen",
        "isActive": true,
        "isOnline": true,
        "lastSeenAt": "2024-01-01T12:00:00Z",
        "orientation": "landscape",
        "rotation": "0",
        "timezone": "Europe/Madrid",
        "location": "Building A, Floor 1",
        "cityName": "Madrid",
        "latitude": 40.4168,
        "longitude": -3.7038,
        "workspaceId": "uuid",
        "screenGroupId": null,
        "currentPlaylistId": "uuid",
        "currentSequenceId": null,
        "defaultPlaylistId": "uuid",
        "defaultSequenceId": null,
        "createdAt": "2024-01-01T00:00:00Z",
        "updatedAt": "2024-01-01T12:00:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 10,
      "total": 25,
      "totalPages": 3,
      "hasMore": true
    }
  }
}

Отримати екран

GET /api/v1/screens/:screenId

Параметри шляху:

ПараметрТипОпис
screenIduuidID екрана

Приклад відповіді:

Повертає один об'єкт екрана з тією ж структурою, що й у відповіді списку.

Створити екран

POST /api/v1/screens

Тіло запиту:

ПолеТипОбов'язковеОпис
namestringТакНазва екрана (макс 100 символів)
descriptionstringНіОпис екрана (макс 500 символів)
orientationstringНіlandscape або portrait (за замовчуванням: landscape)
rotationstringНі0, 90, 180 або 270 (за замовчуванням: 0)
timezonestringНіЧасовий пояс IANA (напр., Europe/Madrid)
locationstringНіОпис фізичного розташування (макс 200 символів)
screenGroupIduuidНіЧленство в групі екранів
workspaceIduuidНіПризначення робочого простору

Призначення плейлистів та послідовностей не можна встановити під час створення. Використовуйте ендпоінт Оновити екран для призначення контенту після створення.

Приклад запиту:

curl -X POST "https://www.screenzzie.com/api/v1/screens" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Conference Room A",
    "orientation": "landscape",
    "rotation": "0",
    "timezone": "Europe/Madrid",
    "location": "Building B, Room 101"
  }'

Приклад відповіді:

{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "Conference Room A",
    "description": null,
    "isActive": true,
    "isOnline": false,
    "lastSeenAt": null,
    "orientation": "landscape",
    "rotation": "0",
    "timezone": "Europe/Madrid",
    "location": "Building B, Room 101",
    "cityName": null,
    "latitude": null,
    "longitude": null,
    "workspaceId": null,
    "screenGroupId": null,
    "currentPlaylistId": null,
    "currentSequenceId": null,
    "defaultPlaylistId": null,
    "defaultSequenceId": null,
    "createdAt": "2024-01-01T00:00:00Z",
    "updatedAt": "2024-01-01T00:00:00Z"
  }
}

Оновити екран

PATCH /api/v1/screens/:screenId

Усі поля опціональні. Включайте тільки поля, які хочете оновити.

Тіло запиту:

ПолеТипОпис
namestringНова назва екрана (макс 100 символів)
descriptionstringНовий опис (null для очищення)
orientationstringlandscape або portrait
rotationstring0, 90, 180 або 270
timezonestringЧасовий пояс IANA
locationstringФізичне розташування (null для очищення)
workspaceIduuidID робочого простору (null для видалення)
screenGroupIduuidID групи екранів (null для видалення)
currentPlaylistIduuidПоточний плейлист (null для видалення)
currentSequenceIduuidПоточна послідовність (null для видалення)
defaultPlaylistIduuidПлейлист за замовчуванням (null для видалення)
defaultSequenceIduuidПослідовність за замовчуванням (null для видалення)

Приклад запиту:

curl -X PATCH "https://www.screenzzie.com/api/v1/screens/abc123" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Display Name",
    "currentPlaylistId": "playlist-uuid"
  }'

Плейлисти

Керуйте контент-плейлистами для Ваших екранів.

Список плейлистів

GET /api/v1/playlists

Параметри запиту:

ПараметрТипОпис
pagenumberНомер сторінки (за замовчуванням: 1)
limitnumberЕлементів на сторінку (за замовчуванням: 20, макс: 100)
workspaceIduuidФільтр за робочим простором

Приклад відповіді:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "Main Content",
        "description": "Primary playlist for lobby screens",
        "itemCount": 5,
        "totalDuration": 120,
        "workspaceId": null,
        "createdBy": "user-uuid",
        "createdAt": "2024-01-01T00:00:00Z",
        "updatedAt": "2024-01-01T12:00:00Z"
      }
    ],
    "pagination": { ... }
  }
}

Отримати плейлист

GET /api/v1/playlists/:playlistId

Повертає плейлист з його елементами. Елементи завжди включені у відповідь.

Параметри шляху:

ПараметрТипОпис
playlistIduuidID плейлиста

Приклад відповіді:

{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "Main Content",
    "description": "Primary playlist for lobby screens",
    "itemCount": 2,
    "totalDuration": 45,
    "workspaceId": null,
    "createdBy": "user-uuid",
    "createdAt": "2024-01-01T00:00:00Z",
    "updatedAt": "2024-01-01T12:00:00Z",
    "items": [
      {
        "id": "item-uuid-1",
        "position": 0,
        "duration": 15,
        "itemType": "media",
        "mediaId": "media-uuid",
        "config": null,
        "createdAt": "2024-01-01T00:00:00Z"
      },
      {
        "id": "item-uuid-2",
        "position": 1,
        "duration": 30,
        "itemType": "website",
        "mediaId": null,
        "config": { "url": "https://example.com" },
        "createdAt": "2024-01-01T00:00:00Z"
      }
    ]
  }
}

Створити плейлист

POST /api/v1/playlists

Тіло запиту:

ПолеТипОбов'язковеОпис
namestringТакНазва плейлиста (макс 100 символів)
descriptionstringНіОпис плейлиста (макс 500 символів)
workspaceIduuidНіПризначення робочого простору

Приклад запиту:

curl -X POST "https://www.screenzzie.com/api/v1/playlists" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Holiday Promotions",
    "description": "Seasonal content for December"
  }'

Оновити плейлист

PATCH /api/v1/playlists/:playlistId

Тіло запиту:

ПолеТипОпис
namestringНова назва плейлиста
descriptionstringНовий опис (null для очищення)
workspaceIduuidID робочого простору (null для видалення)

Видалити плейлист

DELETE /api/v1/playlists/:playlistId

Повертає 204 No Content при успіху.


Медіа

Доступ та реєстрація медіафайлів у Вашій бібліотеці.

Список медіа

GET /api/v1/media

Параметри запиту:

ПараметрТипОпис
pagenumberНомер сторінки (за замовчуванням: 1)
limitnumberЕлементів на сторінку (за замовчуванням: 20, макс: 100)
typestringФільтр за типом: image або video
folderIduuidФільтр за папкою
workspaceIduuidФільтр за робочим простором

Приклад відповіді:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "promo-video.mp4",
        "type": "video",
        "fileUrl": "https://...",
        "thumbnailUrl": "https://...",
        "fileSize": 15728640,
        "duration": 30,
        "folderId": null,
        "workspaceId": null,
        "uploadedBy": "user-uuid",
        "createdAt": "2024-01-01T00:00:00Z",
        "updatedAt": "2024-01-01T00:00:00Z"
      }
    ],
    "pagination": { ... }
  }
}

Отримати медіа

GET /api/v1/media/:mediaId

Повертає один об'єкт медіа з тією ж структурою, що й у відповіді списку.

Зареєструвати медіа

POST /api/v1/media

Реєструє медіафайл, який вже завантажено до сховища. Цей ендпоінт не обробляє завантаження файлів безпосередньо — використовуйте веб-панель для завантаження файлів.

Тіло запиту:

ПолеТипОбов'язковеОпис
namestringТакНазва медіа (макс 200 символів)
typestringТакimage або video
fileUrlstringТакURL завантаженого файлу
thumbnailUrlstringНіURL мініатюри
fileSizenumberНіРозмір файлу в байтах
durationnumberНіТривалість у секундах (для відео)
folderIduuidНіПризначення папки
workspaceIduuidНіПризначення робочого простору

Приклад запиту:

curl -X POST "https://www.screenzzie.com/api/v1/media" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Company Logo",
    "type": "image",
    "fileUrl": "https://your-storage.com/logo.png",
    "thumbnailUrl": "https://your-storage.com/logo-thumb.png",
    "fileSize": 102400
  }'

Пряме завантаження файлів недоступне через REST API. Завантажуйте файли через веб-панель або завантажуйте до власного сховища та реєструйте URL за допомогою цього ендпоінта.

Видалити медіа

DELETE /api/v1/media/:mediaId

Повертає 204 No Content при успіху.


Розклади

Розклади доступні тільки на плані Growth та вище.

Плануйте контент для відтворення у конкретний час.

Список розкладів

GET /api/v1/schedules

Параметри запиту:

ПараметрТипОпис
pagenumberНомер сторінки (за замовчуванням: 1)
limitnumberЕлементів на сторінку (за замовчуванням: 20, макс: 100)
workspaceIduuidФільтр за робочим простором
screenIduuidФільтр за екраном
isActivebooleanФільтр за статусом активності

Приклад відповіді:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "Weekend Promotions",
        "playlistId": "playlist-uuid",
        "sequenceId": null,
        "screenId": null,
        "screenGroupId": null,
        "targetType": "all_screens",
        "dayOfWeek": [0, 6],
        "startTime": "09:00",
        "endTime": "21:00",
        "startDate": null,
        "endDate": null,
        "priority": 10,
        "isActive": true,
        "color": "#3B82F6",
        "workspaceId": null,
        "createdAt": "2024-01-01T00:00:00Z",
        "updatedAt": "2024-01-01T00:00:00Z"
      }
    ],
    "pagination": { ... }
  }
}

Отримати розклад

GET /api/v1/schedules/:scheduleId

Повертає один об'єкт розкладу з тією ж структурою, що й у відповіді списку.

Створити розклад

POST /api/v1/schedules

Тіло запиту:

ПолеТипОбов'язковеОпис
namestringНіНазва розкладу (макс 100 символів)
playlistIduuidНі*Плейлист для планування
sequenceIduuidНі*Послідовність для планування
targetTypestringТакscreen, screen_group, all_screens або multiple_screens
screenIduuidУмовноОбов'язкове, якщо targetType = screen
screenGroupIduuidУмовноОбов'язкове, якщо targetType = screen_group
dayOfWeeknumber[]НіДні тижня (0=Нд, 6=Сб)
startTimestringНіЧас початку у форматі HH:MM
endTimestringНіЧас завершення у форматі HH:MM
startDatestringНіДата початку у форматі ISO
endDatestringНіДата завершення у форматі ISO
prioritynumberНіПріоритет 0-100 (за замовчуванням: 0)
isActivebooleanНіЧи активний (за замовчуванням: true)
colorstringНіКолір відображення (напр., #3B82F6)
workspaceIduuidНіПризначення робочого простору

*Для планування контенту слід надати playlistId або sequenceId.

Умовні вимоги типу цілі:

targetTypeОбов'язкові поля
screenscreenId
screen_groupscreenGroupId
all_screensНемає
multiple_screensНемає (використовуйте окремий ендпоінт для додавання екранів)

Приклад запиту:

curl -X POST "https://www.screenzzie.com/api/v1/schedules" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekend Promotions",
    "playlistId": "abc123",
    "targetType": "all_screens",
    "dayOfWeek": [0, 6],
    "startTime": "09:00",
    "endTime": "21:00",
    "priority": 10,
    "color": "#3B82F6"
  }'

Оновити розклад

PATCH /api/v1/schedules/:scheduleId

Усі поля опціональні. Використовує ті ж визначення полів, що й Створити розклад.

Видалити розклад

DELETE /api/v1/schedules/:scheduleId

Повертає 204 No Content при успіху.


HTTP статус коди

КодОпис
200Успіх
201Створено
204Немає контенту (успішне видалення)
400Поганий запит (помилка валідації)
401Неавторизовано (недійсний API ключ)
403Заборонено (недостатньо дозволів або плану)
404Не знайдено
429Забагато запитів (ліміт перевищено)
500Внутрішня серверна помилка