apiRecurso do Growth plan

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âmetroTipoDescrição
pagenumberNúmero da página (padrão: 1)
limitnumberItens 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âmetroTipoDescrição
pagenumberNúmero da página (padrão: 1)
limitnumberItens por página (padrão: 20, max: 100)
isActivebooleanFiltrar por status ativo
isOnlinebooleanFiltrar por status online
screenGroupIduuidFiltrar por grupo de telas
workspaceIduuidFiltrar 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âmetroTipoDescrição
screenIduuidO 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:

CampoTipoObrigatórioDescrição
namestringSimNome da tela (max 100 chars)
descriptionstringNãoDescrição da tela (max 500 chars)
orientationstringNãolandscape ou portrait (padrão: landscape)
rotationstringNão0, 90, 180, ou 270 (padrão: 0)
timezonestringNãoFuso horário IANA (ex: Europe/Madrid)
locationstringNãoDescrição da localização física (max 200 chars)
screenGroupIduuidNãoMembresia em grupo de telas
workspaceIduuidNãoAtribuiçã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:

CampoTipoDescrição
namestringNovo nome da tela (max 100 chars)
descriptionstringNova descrição (null para limpar)
orientationstringlandscape ou portrait
rotationstring0, 90, 180, ou 270
timezonestringFuso horário IANA
locationstringLocalização física (null para limpar)
workspaceIduuidID do workspace (null para remover)
screenGroupIduuidID do grupo de telas (null para remover)
currentPlaylistIduuidPlaylist atual (null para remover)
currentSequenceIduuidSequência atual (null para remover)
defaultPlaylistIduuidPlaylist padrão (null para remover)
defaultSequenceIduuidSequê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âmetroTipoDescrição
pagenumberNúmero da página (padrão: 1)
limitnumberItens por página (padrão: 20, max: 100)
workspaceIduuidFiltrar 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âmetroTipoDescrição
playlistIduuidO 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:

CampoTipoObrigatórioDescrição
namestringSimNome da playlist (max 100 chars)
descriptionstringNãoDescrição da playlist (max 500 chars)
workspaceIduuidNãoAtribuiçã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:

CampoTipoDescrição
namestringNovo nome da playlist
descriptionstringNova descrição (null para limpar)
workspaceIduuidID 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âmetroTipoDescrição
pagenumberNúmero da página (padrão: 1)
limitnumberItens por página (padrão: 20, max: 100)
typestringFiltrar por tipo: image ou video
folderIduuidFiltrar por pasta
workspaceIduuidFiltrar 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:

CampoTipoObrigatórioDescrição
namestringSimNome da mídia (max 200 chars)
typestringSimimage ou video
fileUrlstringSimURL do arquivo enviado
thumbnailUrlstringNãoURL da miniatura
fileSizenumberNãoTamanho do arquivo em bytes
durationnumberNãoDuração em segundos (para vídeos)
folderIduuidNãoAtribuição de pasta
workspaceIduuidNãoAtribuiçã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âmetroTipoDescrição
pagenumberNúmero da página (padrão: 1)
limitnumberItens por página (padrão: 20, max: 100)
workspaceIduuidFiltrar por workspace
screenIduuidFiltrar por tela
isActivebooleanFiltrar 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:

CampoTipoObrigatórioDescrição
namestringNãoNome do agendamento (max 100 chars)
playlistIduuidNão*Playlist a agendar
sequenceIduuidNão*Sequência a agendar
targetTypestringSimscreen, screen_group, all_screens, ou multiple_screens
screenIduuidCondicionalObrigatório se targetType for screen
screenGroupIduuidCondicionalObrigatório se targetType for screen_group
dayOfWeeknumber[]NãoDias da semana (0=Dom, 6=Sáb)
startTimestringNãoHora de início no formato HH:MM
endTimestringNãoHora de fim no formato HH:MM
startDatestringNãoData de início no formato ISO
endDatestringNãoData de fim no formato ISO
prioritynumberNãoPrioridade 0-100 (padrão: 0)
isActivebooleanNãoSe está ativo (padrão: true)
colorstringNãoCor de exibição (ex: #3B82F6)
workspaceIduuidNãoAtribuição de workspace

*Ou playlistId ou sequenceId deve ser fornecido para agendar conteúdo.

Requisitos Condicionais por Tipo de Alvo:

targetTypeCampos Obrigatórios
screenscreenId
screen_groupscreenGroupId
all_screensNenhum
multiple_screensNenhum (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ódigoDescrição
200Sucesso
201Criado
204Sem Conteúdo (exclusão bem-sucedida)
400Requisição Inválida (erro de validação)
401Não Autorizado (API key inválida)
403Proibido (permissões insuficientes ou plano)
404Não Encontrado
429Muitas Requisições (limite de taxa)
500Erro Interno do Servidor