API & IntegrationsGrowth plan feature

API Endpoints

Complete reference for all Screenzzie REST API endpoints

REST API Access

Integrate with the Screenzzie API to automate your digital signage. Available on the Growth plan.

API Endpoints Reference

Complete documentation for all available REST API endpoints.

Organization & Introspection

Get information about your current API context and organization.

Get Current Context

GET /api/v1/me

Returns information about your API key, organization, rate limits, and available features. This endpoint does not count against your rate limit.

Example Request:

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

Example Response:

{
  "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
    }
  }
}

List Organizations

GET /api/v1/organizations

Returns the organizations accessible with your API key. Currently, each API key belongs to exactly one organization.

Query Parameters:

ParameterTypeDescription
pagenumberPage number (default: 1)
limitnumberItems per page (default: 20, max: 100)

Example Request:

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

Example Response:

{
  "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
    }
  }
}

Screens

Manage your digital signage screens.

List Screens

GET /api/v1/screens

Query Parameters:

ParameterTypeDescription
pagenumberPage number (default: 1)
limitnumberItems per page (default: 20, max: 100)
isActivebooleanFilter by active status
isOnlinebooleanFilter by online status
screenGroupIduuidFilter by screen group
workspaceIduuidFilter by workspace

Example Request:

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

Example Response:

{
  "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 Screen

GET /api/v1/screens/:screenId

Path Parameters:

ParameterTypeDescription
screenIduuidThe screen ID

Example Response:

Returns a single screen object with the same structure as the list response.

Create Screen

POST /api/v1/screens

Request Body:

FieldTypeRequiredDescription
namestringYesScreen name (max 100 chars)
descriptionstringNoScreen description (max 500 chars)
orientationstringNolandscape or portrait (default: landscape)
rotationstringNo0, 90, 180, or 270 (default: 0)
timezonestringNoIANA timezone (e.g., Europe/Madrid)
locationstringNoPhysical location description (max 200 chars)
screenGroupIduuidNoScreen group membership
workspaceIduuidNoWorkspace assignment

Playlist and sequence assignments cannot be set during creation. Use the Update Screen endpoint to assign content after creation.

Example Request:

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"
  }'

Example Response:

{
  "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"
  }
}

Update Screen

PATCH /api/v1/screens/:screenId

All fields are optional. Only include fields you want to update.

Request Body:

FieldTypeDescription
namestringNew screen name (max 100 chars)
descriptionstringNew description (null to clear)
orientationstringlandscape or portrait
rotationstring0, 90, 180, or 270
timezonestringIANA timezone
locationstringPhysical location (null to clear)
workspaceIduuidWorkspace ID (null to remove)
screenGroupIduuidScreen group ID (null to remove)
currentPlaylistIduuidCurrent playlist (null to remove)
currentSequenceIduuidCurrent sequence (null to remove)
defaultPlaylistIduuidDefault playlist (null to remove)
defaultSequenceIduuidDefault sequence (null to remove)

Example Request:

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"
  }'

Playlists

Manage content playlists for your screens.

List Playlists

GET /api/v1/playlists

Query Parameters:

ParameterTypeDescription
pagenumberPage number (default: 1)
limitnumberItems per page (default: 20, max: 100)
workspaceIduuidFilter by workspace

Example Response:

{
  "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 Playlist

GET /api/v1/playlists/:playlistId

Returns the playlist with its items. Items are always included in the response.

Path Parameters:

ParameterTypeDescription
playlistIduuidThe playlist ID

Example Response:

{
  "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"
      }
    ]
  }
}

Create Playlist

POST /api/v1/playlists

Request Body:

FieldTypeRequiredDescription
namestringYesPlaylist name (max 100 chars)
descriptionstringNoPlaylist description (max 500 chars)
workspaceIduuidNoWorkspace assignment

Example Request:

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"
  }'

Update Playlist

PATCH /api/v1/playlists/:playlistId

Request Body:

FieldTypeDescription
namestringNew playlist name
descriptionstringNew description (null to clear)
workspaceIduuidWorkspace ID (null to remove)

Delete Playlist

DELETE /api/v1/playlists/:playlistId

Returns 204 No Content on success.


Media

Access and register media files in your library.

List Media

GET /api/v1/media

Query Parameters:

ParameterTypeDescription
pagenumberPage number (default: 1)
limitnumberItems per page (default: 20, max: 100)
typestringFilter by type: image or video
folderIduuidFilter by folder
workspaceIduuidFilter by workspace

Example Response:

{
  "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 Media

GET /api/v1/media/:mediaId

Returns a single media object with the same structure as the list response.

Register Media

POST /api/v1/media

Registers a media file that has already been uploaded to storage. This endpoint does not handle file uploads directly - use the web dashboard for file uploads.

Request Body:

FieldTypeRequiredDescription
namestringYesMedia name (max 200 chars)
typestringYesimage or video
fileUrlstringYesURL of the uploaded file
thumbnailUrlstringNoURL of the thumbnail
fileSizenumberNoFile size in bytes
durationnumberNoDuration in seconds (for videos)
folderIduuidNoFolder assignment
workspaceIduuidNoWorkspace assignment

Example Request:

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
  }'

Direct file upload is not available via the REST API. Upload files through the web dashboard, or upload to your own storage and register the URL using this endpoint.

Delete Media

DELETE /api/v1/media/:mediaId

Returns 204 No Content on success.


Schedules

Schedules are only available on the Growth plan and above.

Schedule content to play at specific times.

List Schedules

GET /api/v1/schedules

Query Parameters:

ParameterTypeDescription
pagenumberPage number (default: 1)
limitnumberItems per page (default: 20, max: 100)
workspaceIduuidFilter by workspace
screenIduuidFilter by screen
isActivebooleanFilter by active status

Example Response:

{
  "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 Schedule

GET /api/v1/schedules/:scheduleId

Returns a single schedule object with the same structure as the list response.

Create Schedule

POST /api/v1/schedules

Request Body:

FieldTypeRequiredDescription
namestringNoSchedule name (max 100 chars)
playlistIduuidNo*Playlist to schedule
sequenceIduuidNo*Sequence to schedule
targetTypestringYesscreen, screen_group, all_screens, or multiple_screens
screenIduuidConditionalRequired if targetType is screen
screenGroupIduuidConditionalRequired if targetType is screen_group
dayOfWeeknumber[]NoDays of week (0=Sun, 6=Sat)
startTimestringNoStart time in HH:MM format
endTimestringNoEnd time in HH:MM format
startDatestringNoStart date in ISO format
endDatestringNoEnd date in ISO format
prioritynumberNoPriority 0-100 (default: 0)
isActivebooleanNoWhether active (default: true)
colorstringNoDisplay color (e.g., #3B82F6)
workspaceIduuidNoWorkspace assignment

*Either playlistId or sequenceId should be provided to schedule content.

Target Type Conditional Requirements:

targetTypeRequired Fields
screenscreenId
screen_groupscreenGroupId
all_screensNone
multiple_screensNone (use separate endpoint to add screens)

Example Request:

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"
  }'

Update Schedule

PATCH /api/v1/schedules/:scheduleId

All fields are optional. Uses the same field definitions as Create Schedule.

Delete Schedule

DELETE /api/v1/schedules/:scheduleId

Returns 204 No Content on success.


HTTP Status Codes

CodeDescription
200Success
201Created
204No Content (successful deletion)
400Bad Request (validation error)
401Unauthorized (invalid API key)
403Forbidden (insufficient permissions or plan)
404Not Found
429Too Many Requests (rate limited)
500Internal Server Error