Introdução à API
A API REST pública do Digital Signage RDS permite-te integrar terceiros com a tua conta, automatizar tarefas ou construir o teu próprio painel.
- Base URL:
https://rds.digitalsignagerds.com/api/v1 - Versão:
v1(estável) - Formato: JSON sobre HTTPS
1. Começa em 3 passos
- Entra no teu Perfil e abre o separador API.
- Cria uma nova chave dando-lhe um nome (p. ex.
Zapier), escolhendo a validade e as permissões (apenas leitura ou leitura + escrita). - Copia o token (
rds_live_…). Não voltará a ser mostrado. Se o perderes, terás de criar outro.
2. Autenticação
Passa o token no cabeçalho Authorization como Bearer token:
curl -H "Authorization: Bearer rds_live_xxxxx" \
https://rds.digitalsignagerds.com/api/v1/me
Um bom primeiro teste é GET /me: devolve a chave e a empresa
associada.
Permissões (scopes)
Cada chave tem um conjunto de permissões:
| Permissão | O que permite |
|---|---|
read |
Listar e ler recursos (GET) |
write |
Carregar conteúdo e modificar recursos (POST) |
As chaves apenas de leitura não podem carregar imagens/vídeos nem
modificar nada. Devolverão 403 insufficient_scope.
Validade e revogação
As chaves podem expirar automaticamente (30 dias, 90 dias, 1 ano ou
"Sem validade"). Também as podes revogar manualmente a partir do
teu perfil. Uma chave expirada ou revogada devolve 401 Token has expired ou 401 Token has been revoked.
3. Limite de taxa
60 pedidos por minuto por token. Quando ultrapassares, recebes um
429 Too Many Requests com um cabeçalho Retry-After: <segundos> que
indica quanto tempo esperar.
4. Respostas
Recurso único
{
"object": "device",
"id": 1138,
"code": "RDSDF25",
"...": "..."
}
Listas (paginação por cursor)
{
"object": "list",
"url": "/api/v1/devices",
"data": [ { ... }, { ... } ],
"has_more": true,
"next_cursor": "1142"
}
Para obter a próxima página, passa o next_cursor como
starting_after:
GET /api/v1/devices?starting_after=1142&limit=20
Parâmetros aceites nas listas:
| Parâmetro | Valor | Por defeito |
|---|---|---|
limit |
1–100 | 20 |
starting_after |
id inteiro | 0 (primeiro resultado) |
Erros
{
"error": {
"type": "unauthorized",
"message": "Invalid token"
}
}
Tipos de erro frequentes:
| Código | Type | Quando |
|---|---|---|
| 401 | unauthorized |
Token ausente, mal formado, desconhecido, revogado ou expirado |
| 403 | insufficient_scope |
A chave não tem a permissão necessária |
| 403 | quota_exceeded |
Atingiste a quota da empresa (devices, images, videos) |
| 404 | not_found |
O recurso não existe ou não é visível para a tua conta |
| 405 | method_not_allowed |
Método HTTP não permitido nessa rota |
| 413 | file_too_large |
Ficheiro carregado excede o limite |
| 415 | unsupported_media_type |
Extensão ou conteúdo não suportado |
| 429 | rate_limited |
Mais de 60 pedidos por minuto |
| 500 | server_error |
Erro inesperado do servidor |
5. Endpoints disponíveis
Conta
| Método | Rota | Descrição |
|---|---|---|
| GET | /me |
Dados da chave (teste rápido de auth) |
| GET | /account |
Empresa: morada, contacto, limites, uso e subscrição |
| GET | /subscription |
Subscrição: ciclo atual, contadores e próximo pagamento |
| GET | /invoices |
Faturas (Stripe), mais recentes primeiro |
Dispositivos
| Método | Rota | Descrição |
|---|---|---|
| GET | /devices |
Lista de dispositivos (exclui os retirados) |
| GET | /devices/{id_ou_codigo} |
Um dispositivo (aceita id inteiro ou código RDSxxx) |
| GET | /devices?code=RDSF8B8 |
Filtrar lista por código exato |
Cada dispositivo expõe is_online, last_seen_at, playlist_id +
playlist_name, workspace_id + workspace_name (+ pai se for
sub-sede), kiosk_mode, kiosk_whitelist, branch_*, datas de
contrato e mais.
Sedes (workspaces)
| Método | Rota | Descrição |
|---|---|---|
| GET | /workspaces |
Lista (sedes e sub-sedes) |
| GET | /workspaces/{id} |
Uma sede com etiquetas, conteúdo padrão e mapa |
Playlists
| Método | Rota | Descrição |
|---|---|---|
| GET | /playlists |
Lista de playlists |
| GET | /playlists/{id} |
Playlist com contagens de dispositivos / imagens / vídeos |
Imagens
| Método | Rota | Descrição |
|---|---|---|
| GET | /images |
Lista |
| GET | /images/{id} |
Uma imagem (inclui url para descarregar o binário) |
| POST | /images |
Carregar (requer scope write) |
Vídeos
| Método | Rota | Descrição |
|---|---|---|
| GET | /videos |
Lista |
| GET | /videos/{id} |
Um vídeo (inclui url para descarregar o binário) |
| POST | /videos |
Carregar (requer scope write) |
6. Carregar conteúdo
Os endpoints POST /images e POST /videos aceitam
multipart/form-data com duas partes: file (binário, obrigatório) e
name (texto opcional com o título visível para o cliente).
curl -X POST https://rds.digitalsignagerds.com/api/v1/images \
-H "Authorization: Bearer rds_live_xxxxx" \
-F "name=Cartaz Natal" \
-F "file=@/caminho/para/cartaz.png"
Restrições de imagens:
- Extensões permitidas:
jpg,jpeg,png,gif,webp,avif,bmp - Tamanho máximo: 256 MB
- Validação por conteúdo (magic bytes), não pelo cabeçalho MIME do cliente
- Quota por empresa: ver
account.limits.max_images
Restrições de vídeos:
- Extensões permitidas:
mp4,mkv,webm,mov,avi - Tamanho máximo:
account.limits.max_video_size_mb(por defeito 200 MB) - Quota por empresa: ver
account.limits.max_videos
A resposta de um POST com sucesso é 201 Created com o recurso recém-
criado (inclui id, filename, url e crc).
7. Referência interativa
Para testar cada endpoint ao vivo, ver os esquemas exatos de resposta e descarregar o OpenAPI YAML, vai à página Referência (Swagger).