Documentação do app desktop Placa Virtual

GET /radio-store/virtual-sound-card/get-radios Buscar rádios disponíveis para o usuário autenticado

Retorna a lista de rádios (branches) disponíveis para o usuário autenticado, com nome fantasia e imagem de capa de cada uma.

Headers

AuthorizationobrigatórioToken do usuário autenticado (Bearer JWT).

Exemplo

axios
    .get('/radio-store/virtual-sound-card/get-radios', {
        headers: {
            Authorization: 'Bearer ' + token,
        }
    });

200Sucesso

{
    "radios": [
        {
            "id": 211,
            "name_fantasy": "Rádio Exemplo",
            "cover": {
                "uri": "https://cdn.superaudio.com.br/branchs/211/cover.jpg"
            }
        }
    ]
}

403Forbidden

Header Authorization ausente ou token inválido/expirado (usuário não autenticado).

{
    "message": "Você não está logado"
}

500Internal Server Error

Erro inesperado ao processar a requisição.

{
    "message": "Erro inesperado. Tente novamente mais tarde."
}
POST /radio-store/manager-clients/client-informations Atualizar usuário online / Atualizar o que o cliente ouviu ou está ouvindo

Parâmetros POST (JSON body)

client[id]ID do usuário logado
audio[branch][id]ID da rádio
audio[client_radio][id]ID da rádio de cliente que se cadastrou
audio[radio_play][id]ID da rádio cadastrada em Administrador/Radios Online
audio[music][id]ID da música de uma coleção sendo ouvida (deve ser passado o id da coleção no parâmetro abaixo)
audio[collection][id]ID da coleção sendo ouvida (deve ser passado o id da música no parâmetro acima)
audio[music_store][id]ID da música sendo ouvida na plataforma /play
audio[version][id]ID da mídia (versão) do conteúdo sendo escutado
audio[event]obrigatórioTipo de evento (started, listening e finish). started = usuário começou a escutar; listening = usuário está escutando; finish = usuário parou de escutar.
audio[listen]obrigatórioTempo total que o usuário está escutando desde o primeiro play com o evento started (em segundos)
modelnão utilizado Parâmetro obsoleto/informativo: o back-end NÃO lê este campo. O "model" do conteúdo escutado é inferido automaticamente a partir de qual id de audio[...] foi enviado (branch, client_radio, radio_play, music+collection, music_store ou version). Pode ser omitido com segurança.

Branchs = derivado de audio[branch][id] (rádio de companhia)
Musics = derivado de audio[music][id] + audio[collection][id] (música de uma coleção)
MusicStore = derivado de audio[music_store][id] (música da plataforma /play)
RadiosPlay = derivado de audio[radio_play][id] (rádio cadastrada em Administrador/Radios Online)
Clients = derivado de audio[client_radio][id] (rádio de cliente que se cadastrou)
audio[percentage] (type: int)Porcentagem que o usuário já ouviu de um conteúdo. (exceto rádios)
heardLogConfirmationobrigatório Parâmetro que confirma que o usuário escutou o áudio atual.

- Primeira chamada enviar como false.
- Se o valor for enviado como 'false' e a porcentagem for maior que 10%, o sistema verificará se o cliente já escutou o áudio há 10 minutos atrás. Caso não tenha ouvido, será criado um novo registro e a resposta será 'true'.
- Próximas requisições reenviar o valor retornado na anterior.

Pelo que entendi até o momento, um novo log só deve ser salvo se tiverem passado mais de 10 minutos desde que o usuário ouviu o áudio atual e se o usuário tiver escutado mais de 10% do conteúdo.

OBS: Se for um model de rádios (Branchs, Clients ou RadiosPlay) não é necessário passar porcentagem, pois será forçado 10%.
request_from (options: Web, App, VirtualAudioCard)Origem da requisição
company_idnão utilizado Parâmetro obsoleto/informativo: o back-end NÃO lê este campo. A companhia é identificada automaticamente a partir da rádio/coleção/versão sendo escutada (audio[branch], audio[collection] ou audio[version]). Pode ser omitido com segurança.

Exemplo simples apenas com parâmetros obrigatórios

axios
    .post('/radio-store/manager-clients/client-informations', {
        audio: {
            branch: {
                id: 211
            },
            event: 'started',
            listen: 0
        },
        client: {
            id: 1
        },
        heardLogConfirmation: false
    });

200Sucesso

{
    "status": "success",
    "client": {
        "id": 1,
        "validate_access": "2026-07-28T12:34:56+00:00"
    },
    "listener": {
        "id": 55,
        "client_id": 1,
        "branch_id": 211,
        "time_played": 0,
        "started": "2026-07-28T12:30:00+00:00",
        "finish": null,
        "request_from": "VirtualAudioCard"
    },
    "heardLogConfirmation": true
}

400Bad Request

Parâmetro "client" não enviado, ou "client[id]" não corresponde a um cliente existente.

{
    "status": "error",
    "message": "Client nao informado."
}
{
    "status": "error",
    "message": "Cliente informado nao encontrado."
}

500Internal Server Error

Erro inesperado ao processar a requisição.

{
    "status": "error",
    "message": "Erro inesperado. Tente novamente mais tarde."
}