{"openapi":"3.1.0","info":{"title":"int8labs API","description":"API pública da int8labs: transcrição (`int8.asr-1`), voz (`int8.tts-1`) e avatar (`int8.avatar-1`). Autentique com `Authorization: Bearer int8_live_…`. Os WebSockets (`/v1/tts/stream`, `/v1/stt/stream` e `/v1/avatar/stream`) estão descritos na documentação: https://int8labs.com/docs. No `/v1/avatar/stream`, o parâmetro `avatar` da URL escolhe quem fala: `gustavo` (o padrão) ou `helena`.","version":"1.0.0"},"servers":[{"url":"https://api.int8labs.com","description":"Produção"},{"url":"http://localhost:8788","description":"Local"}],"paths":{"/v1/health":{"get":{"tags":["Geral"],"summary":"Situação dos modelos","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}}}}}},"/v1/models":{"get":{"tags":["Geral"],"summary":"Modelos, preços e unidades","operationId":"models_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelsOut"}}}}}}},"/v1/voices":{"get":{"tags":["Geral"],"summary":"As 5 vozes","operationId":"voices_v1_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoicesOut"}}}}}}},"/v1/balance":{"get":{"tags":["Geral"],"summary":"Saldo da organização","operationId":"balance_v1_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceOut"}}}},"401":{"description":"Chave ou token inválido, vencido ou revogado (`invalid_api_key`, `api_key_expired`, `api_key_revoked`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"403":{"description":"IP fora da whitelist ou escopo negado (`ip_not_allowed`, `scope_denied`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"429":{"description":"Limite de pedidos por minuto ou de simultaneidade (`rate_limited`, `concurrency_limited`); veja `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/tokens":{"post":{"tags":["Geral"],"summary":"Token temporário para o navegador e o SDK do avatar","operationId":"create_token_v1_tokens_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TokenIn"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOut"}}}},"400":{"description":"Pedido inválido (`invalid_request`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"401":{"description":"Chave ou token inválido, vencido ou revogado (`invalid_api_key`, `api_key_expired`, `api_key_revoked`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"403":{"description":"IP fora da whitelist ou escopo negado (`ip_not_allowed`, `scope_denied`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"413":{"description":"Passa do tamanho máximo da rota (`payload_too_large`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"429":{"description":"Limite de pedidos por minuto ou de simultaneidade (`rate_limited`, `concurrency_limited`); veja `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/tts":{"post":{"tags":["Voz"],"summary":"Texto para áudio","operationId":"tts_v1_tts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TtsIn"}}},"required":true},"responses":{"200":{"description":"Os bytes do áudio no formato pedido.","headers":{"X-Int8-Characters":{"description":"Caracteres cobrados (os do `text`).","schema":{"type":"integer"}},"X-Int8-Audio-Ms":{"description":"Duração do áudio, em milissegundos.","schema":{"type":"integer"}},"X-Int8-Cost-Brl":{"description":"Custo do pedido em reais, com 8 casas.","schema":{"type":"string"}},"X-Int8-Sample-Rate":{"description":"Taxa de amostragem do áudio.","schema":{"type":"integer"}}},"content":{"audio/wav":{"schema":{"type":"string","format":"binary"}},"audio/mpeg":{"schema":{"type":"string","format":"binary"}},"audio/ogg":{"schema":{"type":"string","format":"binary"}},"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Pedido inválido (`invalid_request`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"401":{"description":"Chave ou token inválido, vencido ou revogado (`invalid_api_key`, `api_key_expired`, `api_key_revoked`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"402":{"description":"Saldo insuficiente (`insufficient_balance`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"403":{"description":"IP fora da whitelist ou escopo negado (`ip_not_allowed`, `scope_denied`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"413":{"description":"Passa do tamanho máximo da rota (`payload_too_large`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"429":{"description":"Limite de pedidos por minuto ou de simultaneidade (`rate_limited`, `concurrency_limited`); veja `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"500":{"description":"Erro no servidor (`internal_error`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"503":{"description":"Servidores cheios (`server_busy`, com `Retry-After`) ou modelo indisponível (`model_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/stt/transcriptions":{"post":{"tags":["Transcrição em lote"],"summary":"Cria uma transcrição em lote (arquivo ou URL)","operationId":"create_transcription_v1_stt_transcriptions_post","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Com `wait=true` e áudio de até 10 minutos: o job já terminado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobOut"}}}},"202":{"description":"O job entrou na fila.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobOut"}}}},"400":{"description":"Pedido inválido (`invalid_request`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"401":{"description":"Chave ou token inválido, vencido ou revogado (`invalid_api_key`, `api_key_expired`, `api_key_revoked`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"402":{"description":"Saldo insuficiente (`insufficient_balance`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"403":{"description":"IP fora da whitelist ou escopo negado (`ip_not_allowed`, `scope_denied`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"413":{"description":"Passa do tamanho máximo da rota (`payload_too_large`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"415":{"description":"Formato ilegível ou não aceito (`unsupported_media`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"429":{"description":"Limite de pedidos por minuto ou de simultaneidade (`rate_limited`, `concurrency_limited`); veja `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"O áudio: até 500 MB e 4 horas."},"keyterms":{"type":"array","items":{"type":"string","maxLength":50},"maxItems":100,"description":"Até 100 termos (nomes próprios, produtos, jargão) que o decodificador prefere."},"webhook_url":{"type":"string","format":"uri","description":"Recebe `transcription.completed` ou `transcription.failed`."},"wait":{"type":"boolean","default":false,"description":"Com áudio de até 10 minutos, espera o fim e responde 200."}}}},"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"http(s) público; até 500 MB, baixado em até 60 s."},"keyterms":{"type":"array","items":{"type":"string","maxLength":50},"maxItems":100,"description":"Até 100 termos (nomes próprios, produtos, jargão) que o decodificador prefere."},"webhook_url":{"type":"string","format":"uri","description":"Recebe `transcription.completed` ou `transcription.failed`."},"wait":{"type":"boolean","default":false,"description":"Com áudio de até 10 minutos, espera o fim e responde 200."}}}}}}},"get":{"tags":["Transcrição em lote"],"summary":"Lista as transcrições, das mais novas para as mais velhas","operationId":"list_transcriptions_v1_stt_transcriptions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"O `next_cursor` da página anterior.","title":"Cursor"},"description":"O `next_cursor` da página anterior."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobListOut"}}}},"400":{"description":"Pedido inválido (`invalid_request`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"401":{"description":"Chave ou token inválido, vencido ou revogado (`invalid_api_key`, `api_key_expired`, `api_key_revoked`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"403":{"description":"IP fora da whitelist ou escopo negado (`ip_not_allowed`, `scope_denied`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"429":{"description":"Limite de pedidos por minuto ou de simultaneidade (`rate_limited`, `concurrency_limited`); veja `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}}}}},"/v1/stt/transcriptions/{job_id}":{"get":{"tags":["Transcrição em lote"],"summary":"Situação e resultado de uma transcrição","operationId":"get_transcription_v1_stt_transcriptions__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobOut"}}}},"400":{"description":"Pedido inválido (`invalid_request`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"401":{"description":"Chave ou token inválido, vencido ou revogado (`invalid_api_key`, `api_key_expired`, `api_key_revoked`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"403":{"description":"IP fora da whitelist ou escopo negado (`ip_not_allowed`, `scope_denied`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"404":{"description":"Não encontrado (`not_found`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"429":{"description":"Limite de pedidos por minuto ou de simultaneidade (`rate_limited`, `concurrency_limited`); veja `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}}}},"delete":{"tags":["Transcrição em lote"],"summary":"Cancela (na fila ou processando) ou apaga o resultado","operationId":"delete_transcription_v1_stt_transcriptions__job_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"O job foi cancelado; nada é cobrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobOut"}}}},"204":{"description":"O resultado foi apagado."},"400":{"description":"Pedido inválido (`invalid_request`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"401":{"description":"Chave ou token inválido, vencido ou revogado (`invalid_api_key`, `api_key_expired`, `api_key_revoked`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"403":{"description":"IP fora da whitelist ou escopo negado (`ip_not_allowed`, `scope_denied`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"404":{"description":"Não encontrado (`not_found`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"429":{"description":"Limite de pedidos por minuto ou de simultaneidade (`rate_limited`, `concurrency_limited`); veja `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}}}}},"/v1/stt/transcriptions/{job_id}/export":{"get":{"tags":["Transcrição em lote"],"summary":"Texto ou legenda (txt, srt ou vtt) de uma transcrição concluída","operationId":"export_transcription_v1_stt_transcriptions__job_id__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"format","in":"query","required":false,"schema":{"enum":["txt","srt","vtt"],"type":"string","default":"txt","title":"Format"}}],"responses":{"200":{"description":"O arquivo, com `Content-Disposition: attachment`.","content":{"text/plain":{},"application/x-subrip":{},"text/vtt":{}}},"400":{"description":"Pedido inválido (`invalid_request`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"401":{"description":"Chave ou token inválido, vencido ou revogado (`invalid_api_key`, `api_key_expired`, `api_key_revoked`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"403":{"description":"IP fora da whitelist ou escopo negado (`ip_not_allowed`, `scope_denied`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"404":{"description":"Não encontrado (`not_found`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"409":{"description":"A transcrição ainda não terminou (`conflict`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}},"429":{"description":"Limite de pedidos por minuto ou de simultaneidade (`rate_limited`, `concurrency_limited`); veja `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorOut"}}}}}}}},"components":{"schemas":{"BalanceOut":{"properties":{"balance_brl":{"type":"number","title":"Balance Brl"},"currency":{"type":"string","const":"BRL","title":"Currency","default":"BRL"}},"type":"object","required":["balance_brl"],"title":"BalanceOut"},"ErrorDetail":{"properties":{"code":{"type":"string","title":"Code","description":"Código em inglês, `snake_case` (por exemplo `insufficient_balance`)."},"message":{"type":"string","title":"Message","description":"O que aconteceu e o que fazer, em português."},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id","description":"O mesmo valor do cabeçalho `X-Request-Id`."}},"type":"object","required":["code","message","request_id"],"title":"ErrorDetail"},"ErrorOut":{"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"type":"object","required":["error"],"title":"ErrorOut"},"HealthOut":{"properties":{"ok":{"type":"boolean","title":"Ok"},"models":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Models","description":"Se cada modelo está carregado (`int8.asr-1`, `int8.tts-1`, `int8.avatar-1`)."}},"type":"object","required":["ok","models"],"title":"HealthOut"},"JobErrorOut":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","message"],"title":"JobErrorOut"},"JobListOut":{"properties":{"data":{"items":{"$ref":"#/components/schemas/JobOut"},"type":"array","title":"Data"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["data","next_cursor"],"title":"JobListOut"},"JobOut":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","enum":["queued","processing","completed","failed","canceled"],"title":"Status"},"source":{"type":"string","enum":["api","playground"],"title":"Source"},"input":{"type":"string","enum":["upload","url"],"title":"Input"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"keyterms":{"items":{"type":"string"},"type":"array","title":"Keyterms"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"cost_brl":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Brl","description":"Custo cobrado quando o job concluiu; job que falha não cobra."},"error":{"anyOf":[{"$ref":"#/components/schemas/JobErrorOut"},{"type":"null"}]},"result":{"anyOf":[{"$ref":"#/components/schemas/ResultOut"},{"type":"null"}],"description":"Só no job concluído; a lista não traz este campo."},"created_at":{"type":"string","title":"Created At"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","description":"O resultado vale 30 dias depois de terminar."}},"type":"object","required":["id","status","source","input","file_name","size_bytes","duration_ms","keyterms","webhook_url","cost_brl","error","created_at","started_at","completed_at","expires_at"],"title":"JobOut"},"ModelOut":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","enum":["stt","tts","avatar"],"title":"Kind"},"description":{"type":"string","title":"Description"},"available":{"type":"boolean","title":"Available"},"pricing":{"items":{"$ref":"#/components/schemas/PriceOut"},"type":"array","title":"Pricing"}},"type":"object","required":["id","kind","description","available","pricing"],"title":"ModelOut"},"ModelsOut":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ModelOut"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ModelsOut"},"PriceOut":{"properties":{"product":{"type":"string","enum":["stt_batch","stt_realtime","tts","avatar"],"title":"Product"},"unit":{"type":"string","enum":["second","character"],"title":"Unit"},"unit_price_brl":{"type":"number","title":"Unit Price Brl","description":"Preço de uma unidade, em reais."}},"type":"object","required":["product","unit","unit_price_brl"],"title":"PriceOut"},"ResultOut":{"properties":{"text":{"type":"string","title":"Text","description":"Em minúsculas, sem pontuação e com os números por extenso."},"segments":{"items":{"$ref":"#/components/schemas/SegmentOut"},"type":"array","title":"Segments","description":"Cortes em pontos de silêncio, de até 30 s."},"duration_ms":{"type":"integer","title":"Duration Ms"}},"type":"object","required":["text","segments","duration_ms"],"title":"ResultOut"},"SegmentOut":{"properties":{"start_ms":{"type":"integer","title":"Start Ms"},"end_ms":{"type":"integer","title":"End Ms"},"text":{"type":"string","title":"Text"}},"type":"object","required":["start_ms","end_ms","text"],"title":"SegmentOut"},"TokenIn":{"properties":{"ttl_seconds":{"type":"integer","maximum":3600,"minimum":60,"title":"Ttl Seconds","description":"Validade do token em segundos, de 60 a 3600.","default":600},"scopes":{"anyOf":[{"items":{"type":"string","enum":["stt","tts","avatar"]},"type":"array","minItems":1},{"type":"null"}],"title":"Scopes","description":"Escopos do token, iguais ou menores que os da chave. Padrão: os da chave."}},"type":"object","title":"TokenIn"},"TokenOut":{"properties":{"token":{"type":"string","title":"Token","description":"`int8_tmp_…`, para mandar no navegador (`?token=` no WebSocket)."},"expires_at":{"type":"string","title":"Expires At"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"}},"type":"object","required":["token","expires_at","scopes"],"title":"TokenOut"},"TtsIn":{"properties":{"text":{"type":"string","maxLength":5000,"minLength":1,"title":"Text","description":"De 1 a 5000 caracteres. A cobrança é por caractere deste texto."},"voice":{"type":"string","enum":["helena","luana","regina","eduardo","gustavo"],"title":"Voice","description":"Uma das 5 vozes de `GET /v1/voices`."},"speed":{"type":"number","maximum":1.3,"minimum":0.8,"title":"Speed","description":"Velocidade da fala, de 0,8 a 1,3.","default":1},"format":{"type":"string","enum":["wav","mp3","opus","pcm"],"title":"Format","description":"`pcm` é PCM16 LE mono cru.","default":"wav"},"sample_rate":{"type":"integer","enum":[8000,16000,22050,24000,44100],"title":"Sample Rate","description":"Taxa de amostragem do áudio.","default":44100}},"type":"object","required":["text","voice"],"title":"TtsIn"},"VoiceOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"gender":{"type":"string","enum":["female","male"],"title":"Gender"},"description":{"type":"string","title":"Description"},"preview_url":{"type":"string","title":"Preview Url","description":"Prévia grátis da voz (arquivo estático do site)."}},"type":"object","required":["id","name","gender","description","preview_url"],"title":"VoiceOut"},"VoicesOut":{"properties":{"data":{"items":{"$ref":"#/components/schemas/VoiceOut"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"VoicesOut"}},"securitySchemes":{"HTTPBearer":{"type":"http","description":"Chave de API (`int8_live_…`) ou token temporário (`int8_tmp_…`).","scheme":"bearer","bearerFormat":"int8_live_… ou int8_tmp_…"}}}}