> ## Documentation Index
> Fetch the complete documentation index at: https://developers.googa.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# NovelAudio — visão geral

> Catálogo em áudio, streaming de capítulo e posição de reprodução — e por que isto vive no domínio do NovelAI.

<Info>
  Hoje o único cliente do NovelAudio é o próprio app oficial, falando diretamente com o Supabase
  do projeto "Novel". Esta página descreve o contrato para uma API de parceiro de áudio.
</Info>

## Não existe `api.novelaudio.com.br`

Este é o ponto que mais gera confusão em quem lê a proposta técnica, então vale ser redundante:
**NovelAI e NovelAudio são atendidos pelo mesmo domínio, `api.novelai.com.br`, porque compartilham
o mesmo projeto Supabase** ("Novel") e o mesmo backend físico — Postgres, Auth, Edge Functions e
Storage, tudo numa instância só. Não existe um segundo projeto, um segundo domínio ou uma segunda
infraestrutura para o NovelAudio.

A aba "NovelAudio" nesta documentação existe porque os **recursos** são diferentes — catálogo de
áudio, streaming de capítulo, posição de reprodução — não porque o domínio é diferente. A rota é
que decide se a chamada é sobre texto ou sobre áudio, não o host. Ver [Modelo de autenticação
sobre Supabase](/architecture/supabase-auth-model) (seção "Custom Domains")
para o desenho completo de domínio/projeto, e a tabela de domínios em
[/index](/index#os-três-produtos-uma-superfície-de-api).

<CardGroup cols={2}>
  <Card title="Mesmo catálogo do NovelAI" icon="book-open">
    NovelAudio espelha o grafo de narrativa do NovelAI: a mesma obra, o mesmo motor de fascículos
    (1 capítulo/dia, VIP com 24h de antecedência) e os mesmos finais — só a camada de áudio é
    exclusiva deste produto.
  </Card>

  <Card title="Mesmo token da Platform API" icon="key" href="/platform/reference/oauth2/troca-client-credentials-por-um-token-de-acesso-de-parceiro">
    Não existe um `POST /oauth2/token` próprio do NovelAudio (nem do NovelAI) — o token é emitido
    uma única vez pela Platform API, com escopos `novelaudio:*` adicionais na mesma troca.
  </Card>
</CardGroup>

## O que a API de parceiro expõe

<CardGroup cols={2}>
  <Card title="Metadados de áudio" icon="waveform" href="/novelaudio/reference/audio-metadata/metadados-de-áudio-de-uma-novela-por-capítulo">
    `GET /novels/{id}/audio` — por capítulo: título, duração, voz usada (quando já renderizado) e
    status de renderização.
  </Card>

  <Card title="Streaming de capítulo" icon="play" href="/novelaudio/reference/streaming/emite-uma-url-de-reprodução-assinada-para-um-capítulo-liberado">
    `GET /novels/{id}/chapters/{chapterNumber}/stream` — URL assinada de curta duração para um
    capítulo liberado, nunca o áudio bruto na resposta.
  </Card>

  <Card title="Posição de reprodução" icon="rotate" href="/novelaudio/reference/playback/consulta-a-posição-de-reprodução-do-assinante-em-uma-novela">
    `GET`/`PUT /subscribers/{id}/playback-position` — retomar exatamente de onde parou, entre
    dispositivos.
  </Card>

  <Card title="Vozes de narração (roadmap)" icon="mic" href="/novelaudio/reference/voices/lista-vozes-de-narração-disponíveis">
    `GET /voices` — catálogo de vozes de narração para escolha do leitor. **Roadmap de ponta a
    ponta: não existe catálogo de vozes hoje** — ver a descrição do endpoint.
  </Card>
</CardGroup>

## Como o áudio é produzido hoje

Três caminhos coexistem no código, e só um deles é o que o ouvinte do NovelAudio de fato usa:

1. **O que o app NovelAudio realmente toca: áudio pré-gravado.** A narração de cada capítulo é um
   arquivo gravado uma vez e guardado no bucket **privado** `chapter-audio` do projeto "Novel";
   o player pede uma URL assinada de curta duração à Edge Function `audio-url`, que valida o
   entitlement (plano com áudio + capítulo liberado pelo drip) antes de assinar. Hoje **15
   novelas** têm narração real completa — a flag `novels.has_real_audio` controla quais aparecem
   no catálogo do app. É um arquivo único de bitrate fixo, não streaming adaptativo por segmentos.
2. **A Edge Function de TTS server-side é do NovelAI, não do NovelAudio.** O projeto "Novel" tem
   uma função `tts` (voz padrão única, quota por plano) — ela é consumida pelo leitor do app
   NovelAI para narrar texto sob demanda, não pelo player do NovelAudio.
3. **A narração via Web Speech API do navegador é código morto.** O hook existe no repositório do
   NovelAudio como resquício de um stand-in antigo, mas nenhuma tela o usa — a reprodução real é
   o caminho 1.

A posição de reprodução entre dispositivos já é real dentro do app oficial: o Supabase sincroniza
capítulo atual e posição em segundos por assinante, entre qualquer dispositivo logado. A API de
parceiro (`/subscribers/{id}/playback-position`) expõe exatamente esse dado já existente.

## Autenticação

Mesmo modelo OAuth2 client credentials usado pela [Platform API](/platform/overview) e descrito em
detalhe em [Modelo de autenticação sobre Supabase](/architecture/supabase-auth-model) — não repetido
aqui. O token é emitido **uma única vez**, de forma centralizada, em
`POST https://api.googa.com.br/v1/oauth2/token` (ver [Platform —
OAuth2](/platform/reference/oauth2/troca-client-credentials-por-um-token-de-acesso-de-parceiro)) — nunca em `api.novelai.com.br`, que só valida o
token recebido via a chave pública do projeto Platform. Um parceiro que integra catálogo de texto
e áudio pede os escopos `novelai:*` **e** `novelaudio:*` na mesma troca de credencial, e usa o
mesmo token resultante nas chamadas a `api.novelai.com.br` — uma única credencial, uma única
troca, independente de quantos domínios de produto o parceiro vai chamar.
