Stream Tools Docs API v1

Player

Rotacionando a chave do player via API

Gere uma credencial temporária e uma URL HLS pronta para uso em um conteúdo, playlist ou canal.

Uso exclusivo no servidor

A API key da conta nunca deve ser incluída em JavaScript do navegador, aplicativos distribuídos ou URLs públicas.

Endpoint

POST https://api.stream.goinnovation.ai/v1/player/credentials

Autentique a solicitação com a API key disponível em Ajustes > Credenciais.

Authorization
Authorization: Bearer $STREAM_TOOLS_API_KEY
Content-Type: application/json

Parâmetros

Campo Tipo Obrigatório Descrição
resourceType string Sim content, playlist ou channel.
resourceID UUID Sim ID do recurso pertencente à mesma conta da API key.
expiresInSeconds integer Não De 300 a 604800 segundos. O padrão é 3600.

Exemplo com cURL

Shell
curl --request POST \
  --url https://api.stream.goinnovation.ai/v1/player/credentials \
  --header "Authorization: Bearer $STREAM_TOOLS_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "resourceType": "channel",
    "resourceID": "11111111-2222-4333-8444-555555555555",
    "expiresInSeconds": 3600
  }'

Exemplo em Node.js

JavaScript no servidor
const response = await fetch(
  'https://api.stream.goinnovation.ai/v1/player/credentials',
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.STREAM_TOOLS_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      resourceType: 'channel',
      resourceID: '11111111-2222-4333-8444-555555555555',
      expiresInSeconds: 3600,
    }),
  },
)

if (!response.ok) {
  throw new Error(`Falha ao gerar credencial: ${response.status}`)
}

const { data } = await response.json()

Resposta

200 OK
{
  "ok": true,
  "data": {
    "resourceType": "channel",
    "resourceID": "11111111-2222-4333-8444-555555555555",
    "playerKey": "eyJhbGciOi...exemplo",
    "playbackURL": "https://stream.goinnovation.ai/hls/channels/11111111-2222-4333-8444-555555555555/master.m3u8?token=eyJhbGciOi...exemplo",
    "issuedAt": "2026-07-27T18:00:00.000Z",
    "expiresAt": "2026-07-27T19:00:00.000Z",
    "renewAfter": "2026-07-27T18:48:00.000Z"
  }
}

Renovação sem interrupção

  1. Guarde a API key somente no backend da sua aplicação.
  2. Solicite uma credencial antes de iniciar o player.
  3. Agende a próxima solicitação para o instante indicado em renewAfter.
  4. Atualize a URL HLS do player antes de expiresAt.

Para uma rotina a cada 24 horas, use uma validade maior que o intervalo, como 172800 segundos, para preservar uma margem segura caso uma renovação atrase. A validade máxima é de sete dias.

Rotação de segurança

A rotação da chave do player feita em Ajustes > Credenciais faz com que novas solicitações com credenciais temporárias anteriores sejam recusadas. Conexões já abertas podem concluir os pequenos grants de mídia emitidos antes da rotação. Gere uma nova credencial por esta rota.

A rotação da chave do player não altera a sua API key. A API key possui uma operação separada de rotação e revogação.

Erros

Status Código Quando ocorre
400 INVALID_RESOURCE_TYPE O tipo do recurso não é suportado.
400 INVALID_EXPIRATION A validade está fora do intervalo permitido.
401 API_KEY_INVALID A API key não existe, foi rotacionada ou revogada.
403 PERMISSION_REQUIRED O perfil não possui acesso a credenciais.
404 RESOURCE_NOT_FOUND O recurso não existe, não está pronto ou pertence a outra conta.
429 RATE_LIMITED O limite temporário de solicitações foi atingido.