Endpoints da API
Referência completa para todos os endpoints da API REST do Screenzzie
docs.apiCtaBanner.title
docs.apiCtaBanner.description
Referência de Endpoints da API
Documentação completa para todos os endpoints da API REST disponíveis.
Organização e Introspecção
Obtenha informações sobre seu contexto atual de API e organização.
Obter Contexto Atual
GET /api/v1/me
Retorna informações sobre sua API key, organização, limites de taxa e recursos disponíveis. Este endpoint não conta contra seu limite de taxa.
Exemplo de Requisição:
curl -X GET "https://www.screenzzie.com/api/v1/me" \
-H "Authorization: Bearer sk_live_xxx"
Exemplo de Resposta:
{
"success": true,
"data": {
"apiKey": {
"id": "uuid",
"name": "Minha 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": "Minha Empresa",
"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
}
}
}
Listar Organizações
GET /api/v1/organizations
Retorna as organizações acessíveis com sua API key. Atualmente, cada API key pertence a exatamente uma organização.
Parâmetros de Query:
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | number | Número da página (padrão: 1) |
limit | number | Itens por página (padrão: 20, max: 100) |
Exemplo de Requisição:
curl -X GET "https://www.screenzzie.com/api/v1/organizations" \
-H "Authorization: Bearer sk_live_xxx"
Exemplo de Resposta:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Minha Empresa",
"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
}
}
}
Telas
Gerencie suas telas de sinalização digital.
Listar Telas
GET /api/v1/screens
Parâmetros de Query:
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | number | Número da página (padrão: 1) |
limit | number | Itens por página (padrão: 20, max: 100) |
isActive | boolean | Filtrar por status ativo |
isOnline | boolean | Filtrar por status online |
screenGroupId | uuid | Filtrar por grupo de telas |
workspaceId | uuid | Filtrar por workspace |
Exemplo de Requisição:
curl -X GET "https://www.screenzzie.com/api/v1/screens?isOnline=true&limit=10" \
-H "Authorization: Bearer sk_live_xxx"
Exemplo de Resposta:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Display do Lobby",
"description": "Tela da entrada principal",
"isActive": true,
"isOnline": true,
"lastSeenAt": "2024-01-01T12:00:00Z",
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Madrid",
"location": "Prédio A, Andar 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
}
}
}
Obter Tela
GET /api/v1/screens/:screenId
Parâmetros de Path:
| Parâmetro | Tipo | Descrição |
|---|---|---|
screenId | uuid | O ID da tela |
Exemplo de Resposta:
Retorna um único objeto de tela com a mesma estrutura da resposta de lista.
Criar Tela
POST /api/v1/screens
Corpo da Requisição:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome da tela (max 100 chars) |
description | string | Não | Descrição da tela (max 500 chars) |
orientation | string | Não | landscape ou portrait (padrão: landscape) |
rotation | string | Não | 0, 90, 180, ou 270 (padrão: 0) |
timezone | string | Não | Fuso horário IANA (ex: Europe/Madrid) |
location | string | Não | Descrição da localização física (max 200 chars) |
screenGroupId | uuid | Não | Membresia em grupo de telas |
workspaceId | uuid | Não | Atribuição de workspace |
Atribuições de playlist e sequência não podem ser definidas durante a criação. Use o endpoint Atualizar Tela para atribuir conteúdo após a criação.
Exemplo de Requisição:
curl -X POST "https://www.screenzzie.com/api/v1/screens" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Sala de Conferência A",
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Madrid",
"location": "Prédio B, Sala 101"
}'
Exemplo de Resposta:
{
"success": true,
"data": {
"id": "uuid",
"name": "Sala de Conferência A",
"description": null,
"isActive": true,
"isOnline": false,
"lastSeenAt": null,
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Madrid",
"location": "Prédio B, Sala 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"
}
}
Atualizar Tela
PATCH /api/v1/screens/:screenId
Todos os campos são opcionais. Inclua apenas campos que deseja atualizar.
Corpo da Requisição:
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Novo nome da tela (max 100 chars) |
description | string | Nova descrição (null para limpar) |
orientation | string | landscape ou portrait |
rotation | string | 0, 90, 180, ou 270 |
timezone | string | Fuso horário IANA |
location | string | Localização física (null para limpar) |
workspaceId | uuid | ID do workspace (null para remover) |
screenGroupId | uuid | ID do grupo de telas (null para remover) |
currentPlaylistId | uuid | Playlist atual (null para remover) |
currentSequenceId | uuid | Sequência atual (null para remover) |
defaultPlaylistId | uuid | Playlist padrão (null para remover) |
defaultSequenceId | uuid | Sequência padrão (null para remover) |
Exemplo de Requisição:
curl -X PATCH "https://www.screenzzie.com/api/v1/screens/abc123" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Nome do Display Atualizado",
"currentPlaylistId": "playlist-uuid"
}'
Playlists
Gerencie playlists de conteúdo para suas telas.
Listar Playlists
GET /api/v1/playlists
Parâmetros de Query:
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | number | Número da página (padrão: 1) |
limit | number | Itens por página (padrão: 20, max: 100) |
workspaceId | uuid | Filtrar por workspace |
Exemplo de Resposta:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Conteúdo Principal",
"description": "Playlist principal para telas do lobby",
"itemCount": 5,
"totalDuration": 120,
"workspaceId": null,
"createdBy": "user-uuid",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T12:00:00Z"
}
],
"pagination": { ... }
}
}
Obter Playlist
GET /api/v1/playlists/:playlistId
Retorna a playlist com seus itens. Itens são sempre incluídos na resposta.
Parâmetros de Path:
| Parâmetro | Tipo | Descrição |
|---|---|---|
playlistId | uuid | O ID da playlist |
Exemplo de Resposta:
{
"success": true,
"data": {
"id": "uuid",
"name": "Conteúdo Principal",
"description": "Playlist principal para telas do lobby",
"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"
}
]
}
}
Criar Playlist
POST /api/v1/playlists
Corpo da Requisição:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome da playlist (max 100 chars) |
description | string | Não | Descrição da playlist (max 500 chars) |
workspaceId | uuid | Não | Atribuição de workspace |
Exemplo de Requisição:
curl -X POST "https://www.screenzzie.com/api/v1/playlists" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Promoções de Feriado",
"description": "Conteúdo sazonal para dezembro"
}'
Atualizar Playlist
PATCH /api/v1/playlists/:playlistId
Corpo da Requisição:
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Novo nome da playlist |
description | string | Nova descrição (null para limpar) |
workspaceId | uuid | ID do workspace (null para remover) |
Excluir Playlist
DELETE /api/v1/playlists/:playlistId
Retorna 204 No Content em caso de sucesso.
Mídia
Acesse e registre arquivos de mídia na sua biblioteca.
Listar Mídia
GET /api/v1/media
Parâmetros de Query:
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | number | Número da página (padrão: 1) |
limit | number | Itens por página (padrão: 20, max: 100) |
type | string | Filtrar por tipo: image ou video |
folderId | uuid | Filtrar por pasta |
workspaceId | uuid | Filtrar por workspace |
Exemplo de Resposta:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "video-promo.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": { ... }
}
}
Obter Mídia
GET /api/v1/media/:mediaId
Retorna um único objeto de mídia com a mesma estrutura da resposta de lista.
Registrar Mídia
POST /api/v1/media
Registra um arquivo de mídia que já foi enviado para o storage. Este endpoint não lida com uploads de arquivo diretamente - use o painel web para uploads de arquivo.
Corpo da Requisição:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome da mídia (max 200 chars) |
type | string | Sim | image ou video |
fileUrl | string | Sim | URL do arquivo enviado |
thumbnailUrl | string | Não | URL da miniatura |
fileSize | number | Não | Tamanho do arquivo em bytes |
duration | number | Não | Duração em segundos (para vídeos) |
folderId | uuid | Não | Atribuição de pasta |
workspaceId | uuid | Não | Atribuição de workspace |
Exemplo de Requisição:
curl -X POST "https://www.screenzzie.com/api/v1/media" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Logo da Empresa",
"type": "image",
"fileUrl": "https://seu-storage.com/logo.png",
"thumbnailUrl": "https://seu-storage.com/logo-thumb.png",
"fileSize": 102400
}'
Upload direto de arquivo não está disponível via API REST. Faça upload de arquivos pelo painel web, ou envie para seu próprio storage e registre a URL usando este endpoint.
Excluir Mídia
DELETE /api/v1/media/:mediaId
Retorna 204 No Content em caso de sucesso.
Agendamentos
Agendamentos estão disponíveis apenas no plano Growth e superiores.
Agende conteúdo para reproduzir em horários específicos.
Listar Agendamentos
GET /api/v1/schedules
Parâmetros de Query:
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | number | Número da página (padrão: 1) |
limit | number | Itens por página (padrão: 20, max: 100) |
workspaceId | uuid | Filtrar por workspace |
screenId | uuid | Filtrar por tela |
isActive | boolean | Filtrar por status ativo |
Exemplo de Resposta:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Promoções de Fim de Semana",
"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": { ... }
}
}
Obter Agendamento
GET /api/v1/schedules/:scheduleId
Retorna um único objeto de agendamento com a mesma estrutura da resposta de lista.
Criar Agendamento
POST /api/v1/schedules
Corpo da Requisição:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Não | Nome do agendamento (max 100 chars) |
playlistId | uuid | Não* | Playlist a agendar |
sequenceId | uuid | Não* | Sequência a agendar |
targetType | string | Sim | screen, screen_group, all_screens, ou multiple_screens |
screenId | uuid | Condicional | Obrigatório se targetType for screen |
screenGroupId | uuid | Condicional | Obrigatório se targetType for screen_group |
dayOfWeek | number[] | Não | Dias da semana (0=Dom, 6=Sáb) |
startTime | string | Não | Hora de início no formato HH:MM |
endTime | string | Não | Hora de fim no formato HH:MM |
startDate | string | Não | Data de início no formato ISO |
endDate | string | Não | Data de fim no formato ISO |
priority | number | Não | Prioridade 0-100 (padrão: 0) |
isActive | boolean | Não | Se está ativo (padrão: true) |
color | string | Não | Cor de exibição (ex: #3B82F6) |
workspaceId | uuid | Não | Atribuição de workspace |
*Ou playlistId ou sequenceId deve ser fornecido para agendar conteúdo.
Requisitos Condicionais por Tipo de Alvo:
| targetType | Campos Obrigatórios |
|---|---|
screen | screenId |
screen_group | screenGroupId |
all_screens | Nenhum |
multiple_screens | Nenhum (use endpoint separado para adicionar telas) |
Exemplo de Requisição:
curl -X POST "https://www.screenzzie.com/api/v1/schedules" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Promoções de Fim de Semana",
"playlistId": "abc123",
"targetType": "all_screens",
"dayOfWeek": [0, 6],
"startTime": "09:00",
"endTime": "21:00",
"priority": 10,
"color": "#3B82F6"
}'
Atualizar Agendamento
PATCH /api/v1/schedules/:scheduleId
Todos os campos são opcionais. Usa as mesmas definições de campo de Criar Agendamento.
Excluir Agendamento
DELETE /api/v1/schedules/:scheduleId
Retorna 204 No Content em caso de sucesso.
Códigos de Status HTTP
| Código | Descrição |
|---|---|
200 | Sucesso |
201 | Criado |
204 | Sem Conteúdo (exclusão bem-sucedida) |
400 | Requisição Inválida (erro de validação) |
401 | Não Autorizado (API key inválida) |
403 | Proibido (permissões insuficientes ou plano) |
404 | Não Encontrado |
429 | Muitas Requisições (limite de taxa) |
500 | Erro Interno do Servidor |