Documentação Api Sincronizador
Synchronizer
Endpoints legados usados pelo software SyncDataMusic para sincronizar mídias, playlists, comerciais e comandos entre a plataforma e as estações. Autenticação via ACCESS_TOKEN/AUTH_CODE embutido na própria URL (não usa header Authorization).
GET /api/scheduled-tasks/{AUTH_CODE}/ Verifica agendamento de tarefas
Verifica agendamento de tarefas.
Parâmetros de URL
| AUTH_CODEobrigatório | Código de autorização de uma máquina da empresa. Composto de 10 dígitos alfanuméricos. Ex: 1912B5DD69. |
Parâmetros GET (querystring)
| type | Opcional. Enviar syncplay para retornar apenas as tarefas do player Syncplay (reload_next_position, reload_now, update_software_syncplay). Quando omitido, retorna as tarefas padrão de sincronização. |
200Sucesso (padrão, tarefas de sincronização)
{
"code": 200,
"tasks": {
"force_sync_parcial": {
"active": true,
"scheduled": "08\/11\/2018 00:15:00"
},
"force_sync_complete": {
"active": false,
"scheduled": false
},
"set_directories": {
"active": false,
"scheduled": false
},
"get_configs": {
"active": false,
"scheduled": false
},
"set_configs": {
"active": false,
"scheduled": false
},
"check_version_software": {
"active": false,
"scheduled": false
},
"update_updater_software": {
"active": false,
"scheduled": false
}
}
}
200Sucesso (com ?type=syncplay, tarefas do player Syncplay)
{
"code": 200,
"tasks": {
"reload_next_position": {
"active": false,
"scheduled": false
},
"reload_now": {
"active": false,
"scheduled": false
},
"update_software_syncplay": {
"active": false,
"scheduled": false
}
}
}
500Código não encontrado
{
"message": "Código não encontrado.",
"code": 500
}
POST PUT /api/confirm-scheduled-task/ Confirma a execução de uma tarefa agendada
Confirma a execução de uma tarefa agendada.
Parâmetros POST
| auth_codeobrigatório | Código da estação. |
| taskobrigatório | Nome da tarefa executada (case-insensitive, será convertido para minúsculas). |
200Sucesso
{
"code": 200
}
404Parâmetro não encontrado
{
"message": "Parâmetro não encontrados",
"code": 404
}
404Código não encontrado
{
"message": "Código não encontrado.",
"code": 404
}
500Task não informada
{
"message": "Task não informada.",
"code": 500
}
400Falha ao atualizar conexão
{
"message": "Não foi possível atualizar a última conexão.",
"code": 400
}
GET /api/sync-structure/{ACCESS_TOKEN}/{SCOPE}/ Estrutura de pastas
Estrutura de pastas.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Código de autorização do cliente. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar somente um escopo, ex: MEDIAS_DOWNLOAD. |
200Sucesso
{
"MEDIAS_DOWNLOAD": {
"alias": "Mídias",
"tree": [
"Medias\/5-Vem\/",
"Medias\/9-Promos e Cabs\/"
]
}
}
130Forbidden (token inválido)
{
"status": "forbidden",
"message": "SyncAuth Error: access denied, invalid token",
"code": 130
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
GET /api/sync-files/{ACCESS_TOKEN}/{SCOPE}/{PAGE}/{TYPE_SYNC}/{TIMESTAMP} Sincronizar arquivos
Sincronizar arquivos.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Código de autorização do cliente. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar somente um escopo, ex: PLAYLIST_DOWNLOAD. |
| PAGEobrigatório | Página requisitada. Número inteiro. |
| TYPE_SYNCobrigatório | Tipo de sincronização: complete (sincronização completa), parcial (retorna apenas mídias atualizadas desde a última sincronização) ou timestamp (retorna apenas mídias atualizadas desde uma determinada data). |
| TIMESTAMP | Timestamp para busca de informações. Opcional. |
Campos da resposta de sucesso: query.next (boolean, indica se existe uma próxima
página), query.page (inteiro, página atual), query.date (datetime,
data do último arquivo atualizado).
200Sucesso
{
"PLAYLIST_DOWNLOAD": {
"files": [
{
"path": "Playlist\/1\/",
"path_download": "1\/2018\/05\/",
"file": "Mus20180514.txt",
"hash": "db65184cc490551a9be0b67acfe59b62"
}
],
"query": {
"next": false,
"page": "1",
"date": "2018-05-24T11:43:18-03:00"
},
"no_media": [
{
"id": 1,
"dir": "\/midias\/proofs\/playlist\/1\/1\/2018\/04\/Mus20180430.txt",
"hash": "18d536ff867c91a3a5d610e065c58e23"
},
{
"id": 2,
"dir": "\/proofs\/playlist\/1\/1\/2018\/05\/Mus20180503.txt",
"hash": "b2ba85e69b07d9c98461371e5af6ee6a"
}
]
}
}
132Forbidden (escopo sem permissão)
{
"status": "forbidden",
"message": "SyncScope Error: permission denied to access the target scope",
"code": 132
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
GET /api/sync-deletes/{ACCESS_TOKEN}/{SCOPE} Lista de arquivos deletados
Lista de arquivos deletados.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Código de autorização do cliente. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar somente um escopo, ex: MUSICS_DELETE. |
200Sucesso
{
"MUSICS_DELETE": {
"files": [
{
"path": "Musics\/",
"file": "Bob Dylan = Lay Lady Lay.mp3",
"hash": "689b0cc5831d38397ba3e336dbf3eba7"
},
{
"path": "Musics\/",
"file": "Bryan Adams = Heaven.mp3",
"hash": "9a4073a66b43d9f06a6b7840d682bfd7"
}
]
}
}
131Ação inválida
{
"status": "error",
"message": "SyncScope Error: invalid action",
"code": 131
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
GET /api/download-file/{ACCESS_TOKEN}/{SCOPE}/ Download de arquivo
Download de arquivo. Ex: GET /api/download-file/{ACCESS_TOKEN}/{SCOPE}/?path=71c78e9b9741b6f93ca7efb8cb8a763e_606a0fef09184e9633780fb283845444.mp3
Parâmetros de URL
| ACCESS_TOKENobrigatório | Código de autorização do cliente. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar somente um escopo, ex: MUSICS_DOWNLOAD. |
Parâmetros GET (querystring)
| pathobrigatório | Chave (key) do objeto no storage a ser baixado, retornada nos campos path/path_download de /api/sync-files. Não é um caminho de sistema de arquivos, é a chave do objeto salva no storage. |
OBS: em caso de sucesso, o endpoint responde com um redirect (302) direto para a URL assinada do arquivo no storage; não há corpo JSON na resposta de sucesso.
302Sucesso (redirect)
Redireciona diretamente para a URL assinada do arquivo no storage. Sem corpo de resposta.
404Upload não encontrado
{
"status": "error",
"message": "SyncScope Error: Upload not found",
"code": 404
}
500Falha ao baixar
{
"status": "error",
"message": "SyncDownload Error: could not download the target file",
"code": 500
}
GET /api/request-existing-files/{ACCESS_TOKEN}/{SCOPE}/{MEDIA_TYPE_ID} Lista de arquivos que já existem na plataforma
Lista de arquivos que já existem na plataforma.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Código de autorização do cliente. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar somente um escopo, ex: MUSICS_REPOSITORIES_UPLOAD. |
| MEDIA_TYPE_IDobrigatório | Id da pasta. |
OBS: o campo files retorna um mapa de nome do arquivo =>
hash md5 dos arquivos já existentes na plataforma para o escopo/pasta informados.
200Sucesso
{
"status": "success",
"code": 200,
"files": {
"Acústicos & Valvulados = O Dia D é Hoje.mp3": "bedfce4369aa61db16f76e962a2475c1",
"Snow Patrol = Open Your Eyes.mp3": "1e24d8b92b7b90183e78a21a9fd5ee19"
}
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
500Mais de um escopo enviado
{
"status": "error",
"message": "SyncScope Error: only one scope per request is allowed",
"code": 500
}
GET /api/request-permission-upload/{ACCESS_TOKEN}/{SCOPE} Requisição de código de autorização para upload
Requisição de código de autorização para upload. Ex:
/api/request-permission-upload/{ACCESS_TOKEN}/{SCOPE}?hash=291b4b33217a592fb248154f931ca0f3&media_type=1
Parâmetros de URL
| ACCESS_TOKENobrigatório | Código de autorização do cliente. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar somente um escopo, ex: MUSICS_REPOSITORIES_UPLOAD. |
Parâmetros GET (querystring)
| hashobrigatório | MD5 gerado do binário do arquivo a ser enviado. |
| media_typeobrigatório | Indica o tipo da mídia ou pasta que será enviada. |
OBS: os campos extensions e mime_type retornam uma string
contendo um JSON serializado (json_encode aplicado duas vezes), não um array/objeto direto.
200Sucesso
{
"status": "success",
"message": "upload authorization successfully granted",
"unique_code": "9F4945B8724D6CEC313D447EAA8A5AA8",
"code": 200,
"extensions": "{\"0\": \"wave\", \"1\": \"wav\", \"2\": \"mp3\", \"3\": \"ogg\"}",
"mime_type": "{\"0\": \"audio\\\/vnd.wav\", \"1\": \"audio\\\/vnd.wave\", \"2\": \"audio\\\/wave\", \"3\": \"audio\\\/wav\", \"4\": \"audio\\\/x-wav\", \"5\": \"audio\\\/x-pn-wav\", \"6\": \"audio\\\/mpeg\", \"7\": \"audio\\\/mp3\", \"8\": \"audio\\\/ogg\"}"
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
409Arquivo já existe
{
"status": "error",
"message": "SyncUpload Error: file exist",
"code": 409
}
500Falha ao gerar código único
{
"status": "error",
"message": "SyncAuth Error: unique upload code could not be generated",
"code": 500
}
500Mais de um escopo enviado
{
"status": "error",
"message": "SyncScope Error: only one scope per request is allowed",
"code": 500
}
POST /api/create-file/{ACCESS_TOKEN}/{UNIQUE_CODE}/{SCOPE} Fazer upload de um arquivo
Fazer upload de um arquivo.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Token de acesso. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| UNIQUE_CODEobrigatório | Código de autorização para upload, obtido em /api/request-permission-upload. Composto de 32 dígitos alfanuméricos. Ex: 9F4945B8724D6CEC313D447EAA8A5AA8. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar somente um escopo, ex: MUSICS_REPOSITORIES_UPLOAD. |
Parâmetros (multipart/form-data)
| fileobrigatório | Arquivo enviado. |
| hashobrigatório | MD5 gerado do binário do arquivo enviado. |
| media_type | Obrigatório para os escopos MEDIAS_REPOSITORIES_UPLOAD/MUSICS_REPOSITORIES_UPLOAD/PRODUCTS_SUPPORTS_UPLOAD; indica o id da pasta/tipo de mídia que será enviada. |
OBS: os escopos MUSICS_REPOSITORIES_UPLOAD e DRIVE_REPOSITORIES_UPLOAD não tentam localizar um registro existente para atualizar (modo fallback: "musics/drives are always stored in fallback mode"); o resultado é sempre a criação de um novo objeto (resposta 201, "new object synced successfully").
200Sucesso (atualiza arquivo já existente)
{
"status": "success",
"code": 200,
"message": "object synced to existing entry successfully",
"data": {
"id": 4821,
"size": 5432110,
"mime": "audio\/mpeg",
"key": "8af4ab22b873b05638cb864257884a1b_4b1e3a622a1e4b07d22875bcaa39f8ff.mp3",
"uri": "{URL assinada do arquivo no storage}"
}
}
201Sucesso (novo objeto sincronizado)
{
"status": "success",
"code": 201,
"message": "new object synced successfully",
"data": {
"id": 4822,
"size": 5432110,
"mime": "audio\/mpeg",
"key": "9be5ab22b873b05638cb864257884a1c_5c2e3a622a1e4b07d22875bcaa39f900.mp3",
"uri": "{URL assinada do arquivo no storage}"
}
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
403Código de autorização não confere com o token
{
"status": "forbidden",
"message": "SyncAuth Error: authorization code does nos match the given access token",
"code": 403
}
500Hash não confere
{
"status": "error",
"message": "SyncUploader Error: the given hash does not match the calculated file hash",
"code": 500
}
500Mais de um escopo enviado
{
"status": "error",
"message": "SyncScope Error: only one scope per request is allowed",
"code": 500
}
GET /api/notifications/{ACCESS_TOKEN}/{SCOPE} Busca notificações do sistema
Busca notificações do sistema.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Token de acesso. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar somente um escopo, ex: SYSTEM_NOTIFICATION. |
200Sucesso
{
"status": "success",
"code": 200,
"data": [
{
"id": 1,
"subject": "Nova versão do Syn Music",
"message": "Olá, a nova versão do software SyncDataMusic já está disponível para Download"
}
]
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
404Notificações não encontradas
{
"status": "error",
"message": "SyncScope Error: notifications not found.",
"code": 404
}
500Mais de um escopo enviado
{
"status": "error",
"message": "SyncScope Error: only one scope per request will be accepted.",
"code": 500
}
GET /api/media-list/{ACCESS_TOKEN}/{SCOPE} Requisição media list
Requisição media list.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Token de acesso. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Único escopo suportado: MUSICS_READ. |
Campos da resposta de sucesso: unique_code (código de autorização para upload,
usado no POST deste mesmo endpoint), search (extensões e mime types aceitos para
buscar arquivos já existentes), send (extensões e mime types aceitos no upload
via POST). Os campos extensions e mime_type de search/
send retornam uma string contendo um JSON serializado.
200Sucesso
{
"status": "success",
"message": "upload authorization successfully granted",
"unique_code": "657A620BE74D728E1B404B0E0C10CA14",
"code": 200,
"search": {
"extensions": "{\"0\": \"wave\", \"1\": \"wav\", \"2\": \"mp3\", \"3\": \"ogg\"}",
"mime_type": "{\"0\": \"audio\\\/vnd.wav\", \"1\": \"audio\\\/wave\", \"2\": \"audio\\\/wav\", \"3\": \"audio\\\/x-wav\", \"4\": \"audio\\\/x-pn-wav\", \"5\": \"audio\\\/mpeg\", \"6\": \"audio\\\/mp3\", \"7\": \"audio\\\/ogg\"}"
},
"send": {
"extensions": "{\"0\": \"json\"}",
"mime_type": "{\"0\": \"application\\\/json\"}"
}
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
500Falha ao gerar código único
{
"status": "error",
"message": "SyncAuth Error: unique upload code could not be generated",
"code": 500
}
POST /api/media-list/{ACCESS_TOKEN}/{SCOPE} Upload media list
Upload media list.
SyncUploaderService::upload() ("SyncUpload Error: MUSICS_READ"). Ou seja, este
endpoint atualmente sempre retorna erro para qualquer envio, mesmo com dados válidos.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Token de acesso. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Único escopo suportado: MUSICS_READ. |
Parâmetros POST
| fileobrigatório | Arquivo enviado. |
| uniq_idobrigatório | Código de autorização para upload (unique_code retornado pelo GET deste endpoint). |
| hashobrigatório | MD5 gerado do binário do arquivo enviado. |
200Sucesso
Não aplicável — ver nota acima; toda requisição atualmente resulta em erro.
0Erro (comportamento atual, ocorre em toda requisição)
{
"status": "error",
"message": "SyncUpload Error: MUSICS_READ",
"code": 0
}
401Token expirado (validação prévia)
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
500Mais de um escopo enviado (validação prévia)
{
"status": "error",
"message": "SyncScope Error: only one scope per request is allowed",
"code": 500
}
POST /api/set-directories/{ACCESS_TOKEN}/{SCOPE} Setagem de configuração de diretórios completos
Setagem de configuração de diretórios completos.
Parâmetros de URL
| ACCESS_TOKENobrigatório | Token de acesso. Composto de 32 dígitos alfanuméricos. Ex: 4FFE2F70B6B915FD1C97B45EE9321377. |
| SCOPEobrigatório | Escopo de permissão da requisição. Sempre em caixa alta. Enviar escopo: DIRECTORIES. |
Parâmetros POST
| directoriesobrigatório | Array com os dados dos caminhos completos. |
| type | String 'download' ou 'upload'. Quando omitido, assume 'download'. |
Exemplo de directories
[
'Musics' => ['C:/Programs Files/Musicas'],
'Medias' => [
'22' => 'C:/Programs Files/Medias/CHAMADAS',
'38' => 'C:/Programs Files/Medias/VINHETAS',
'41' => 'C:/Programs Files/Medias/PROGRAMETES',
],
];
200Sucesso
{
"message": null,
"code": 200
}
401Token expirado
{
"status": "error",
"message": "ApiAccessToken Error: token has expired",
"code": 401
}
404Parâmetros não encontrados
{
"status": "error",
"message": "SyncScope Error: parameters not found.",
"code": 404
}
500Mais de um escopo enviado
{
"status": "error",
"message": "SyncScope Error: only one scope per request will be accepted.",
"code": 500
}
Radio Play Sync
Endpoints usados pelo player Syncplay para obter configurações, playlists e comandos, baixar arquivos, registrar reprodução e enviar logs de execução.
GET /api/radio-play/sync/configs/{AUTH_CODE}/ Obtém configurações do SyncPlay
Obtém configurações do SyncPlay.
Parâmetros de URL
| AUTH_CODEobrigatório | Código de autorização do sync (auth_code). |
OBS: rota implementada por SynchronizerController::getSyncplayConfigs
(via SynchronizerService). A classe RadioPlaySyncController também define um método
getConfigs() com apidoc semelhante, porém nenhuma rota aponta para ele atualmente — está sem
uso.
200Sucesso (cliente é uma rádio)
{
"isSyncRadio": true,
"mix": {
"mix_media": 300,
"mix_commercial": 300,
"mix_music": 3000,
"mix_others": 300,
"mix_vem": 300,
"mix_bumper": 300,
"mix_right_time": 300,
"mix_prefix_and_right_time": 300,
"mix_prefix_and_temperatures": 300,
"music_fade_out_time": 300,
"media_fade_out_time": 300
},
"SyncplayCommands": {
"Hora Certa": {
"path_right_time": "C:\/Programs Files\/comandos\/hora certa",
"path_right_time_prefix": "C:\/Programs Files\/comandos\/prefixo hora certa",
"use_prefix": true,
"type_right_time": 1
},
"Temperatura": {
"path_temperature": null,
"path_temperature_prefix": null,
"use_prefix": false
}
},
"listStreamingIn": []
}
200Sucesso (cliente não é uma rádio)
{
"isSyncRadio": false
}
404Estação não encontrada
{
"status": "error",
"message": "Estação não encontrada",
"code": 404
}
404Cliente não encontrado
{
"status": "error",
"message": "Cliente não encontrado",
"code": 404
}
404Rádio não encontrada
{
"status": "error",
"message": "Rádio não encontrada",
"code": 404
}
GET /api/radio-play/sync/playlists/{AUTH_CODE}/ Sincroniza playlists disponíveis para o sync
Sincroniza playlists disponíveis para o sync.
Parâmetros de URL
| AUTH_CODEobrigatório | Código de autorização do sync (auth_code). |
OBS: rota implementada por SynchronizerController::getPlaylists. A classe
RadioPlaySyncController também define um método getPlaylists() idêntico, porém nenhuma rota
aponta para ele — está sem uso.
200Sucesso
{
"data": [
{
"id": 100,
"date": "2020-03-23",
"hash": "a214214dfdsg3432423fdgsd234"
}
]
}
404Código de autorização não encontrado
{
"status": "error",
"message": "Record not found in table \"api_authorization_codes\"",
"code": 404
}
GET /api/radio-play/sync/download/{AUTH_CODE}/{TYPE}/{ID} Download de arquivos do SyncPlay (playlist/comercial/comando)
Download de arquivos do SyncPlay (playlist/comercial/comando).
Parâmetros de URL
| AUTH_CODEobrigatório | Código de autorização do sync (auth_code). |
| TYPEobrigatório | Tipo do arquivo a ser baixado. Único tipo implementado atualmente: playlist. 'command' e 'commercial' estão mapeados mas ainda não implementados (retornam erro 400). |
| IDobrigatório | Id do registro (ex: id da playlist) que será baixado. |
OBS: em caso de sucesso, o endpoint responde com um redirect (302) direto para a URL assinada do arquivo no storage; não há corpo JSON na resposta de sucesso.
302Sucesso (redirect)
Redireciona diretamente para a URL assinada do arquivo no storage. Sem corpo de resposta.
400Tipo command não implementado
{
"status": "error",
"message": "Tipo command não implementado.",
"code": 400
}
400Tipo commercial não implementado
{
"status": "error",
"message": "Tipo commercial não implementado.",
"code": 400
}
400Tipo não reconhecido
{
"status": "error",
"message": "Tipo foo não reconhecido.",
"code": 400
}
404Falha ao baixar
{
"status": "error",
"message": "Não foi possivel fazer o download.",
"code": 404
}
GET /api/radio-play/sync/commercials/{AUTH_CODE}/ Sincroniza comerciais disponíveis para o sync
data (ver comentário "TODO" em RadioPlaySyncController::getCommercials).
Parâmetros de URL
| AUTH_CODEobrigatório | Código de autorização do sync. |
200Sucesso (comportamento atual)
{
"data": []
}
405Verbo HTTP diferente de GET
{
"status": "error",
"message": "Method Not Allowed",
"code": 405
}
GET /api/radio-play/sync/commands/{AUTH_CODE}/ Sincroniza comandos disponíveis para o sync
data (ver comentário "TODO" em RadioPlaySyncController::getCommands).
Parâmetros de URL
| AUTH_CODEobrigatório | Código de autorização do sync. |
200Sucesso (comportamento atual)
{
"data": []
}
405Verbo HTTP diferente de GET
{
"status": "error",
"message": "Method Not Allowed",
"code": 405
}
POST /api/radio-play/player/set-played Registra item reproduzido pelo SyncPlay
Registra item reproduzido pelo SyncPlay.
Headers
| authcodeobrigatório | Código de autorização do sync (diferente dos demais endpoints, que usam o auth_code na URL). |
Parâmetros POST
| typeobrigatório | Tipo do item reproduzido: music, media, command, text, ai-prompt, manual, bumper, vem (bumper/vem viram "tag"). |
| foreign_key | Id do item reproduzido. Obrigatório, exceto para type manual/text. |
| audio | Nome do áudio. Obrigatório quando type for manual ou text. |
| played_dateobrigatório | Data/hora da reprodução. |
| model | Obrigatório quando type=command (ex: StreamingIn). |
| block_date, file_path, file_time, file_execution_time, nro_int, program_id, ignore_redis | Opcionais. |
OBS: diferente da maioria dos endpoints desta página, este endpoint define o status HTTP real da resposta (400 Bad Request nos erros de validação abaixo) em vez de sempre responder 200 com um campo "code" interno.
200Sucesso
{
"code": 200,
"message": "Arquivo salvo com sucesso",
"status": "success"
}
400authcode ausente
{
"message": "Informe o \"authcode\" no header."
}
400foreign_key/audio ausentes
{
"message": "Informe o parâmetro \"foreign_key\" ou \"audio\", não pode ser os dois vazios."
}
400type ausente
{
"message": "O parâmetro \"type\" não pode ser vazio."
}
400played_date ausente
{
"message": "O parâmetro \"played_date\" não pode ser vazio."
}
GET /api/radio-play/player/get-played Consulta últimos itens reproduzidos pelo SyncPlay
Consulta últimos itens reproduzidos pelo SyncPlay. Sem parâmetros.
OBS: endpoint não possui tratamento de erros; falhas inesperadas resultam na página de erro padrão do CakePHP.
200Sucesso (últimos 100 registros, ordenados por id decrescente)
{
"response": [
{
"id": 981,
"type": "music",
"audio": "Bob Dylan = Lay Lady Lay.mp3",
"authcode": "1912B5DD69",
"played_date": "2021-05-24 11:43:18",
"branch_id": 12,
"foreign_key": 4821,
"model": "Musics"
}
]
}
Sem respostas de erro documentadas.
POST /api/radio-play/sync/save-syncplay-informations Salva informações de versão do player Syncplay
Salva informações de versão do player Syncplay.
Parâmetros POST
| auth_codeobrigatório | Código de autorização do sync. |
| version_playerobrigatório | Versão do player Syncplay. |
OBS: assim como o endpoint de set-played, este endpoint define o status HTTP real da resposta (400 Bad Request nos erros de validação abaixo) em vez de sempre responder 200.
200Sucesso
{
"code": 200,
"message": "Informações do player salvas com sucesso."
}
400auth_code ausente
{
"message": "Informe o \"auth_code\"."
}
400version_player ausente
{
"message": "Informe a versão do player."
}
500Falha ao salvar
{
"message": "Não foi possível salvar as informações do player."
}
POST /api/syncplay/upload-logs Upload de logs do Syncplay
Upload de logs do Syncplay.
Headers
| X-SyncPlay-SNobrigatório | Serial Number do player Syncplay. |
Parâmetros (multipart/form-data)
| fileobrigatório | Arquivo de log em JSON. |
OBS: este endpoint também define o status HTTP real da resposta (400 Bad Request nos erros abaixo) em vez de sempre responder 200.
200Sucesso (novo arquivo, processamento em background)
{
"status": "success",
"message": "Arquivo de log enviado e processamento iniciado.",
"processed": false
}
200Sucesso (hash já processado anteriormente)
{
"status": "success",
"message": "Arquivo de log já processado (hash duplicado).",
"processed": true
}
400Header X-SyncPlay-SN ausente
{
"status": "error",
"message": "O header X-SyncPlay-SN é obrigatório.",
"processed": false
}
400Serial Number inválido
{
"status": "error",
"message": "Serial Number inválido.",
"processed": false
}
400Nenhum arquivo enviado
{
"status": "error",
"message": "Nenhum arquivo de log foi enviado.",
"processed": false
}