{"openapi":"3.1.1","info":{"title":"Live Copiloto API","version":"1.0.0","description":"API de consulta e controle das suas lives. Bearer obrigatório. Limite de 120 requisições por minuto por chave e por processo. Sem autenticação por cookie."},"servers":[{"url":"/api/v1"}],"security":[{"BearerAuth":[]}],"tags":[{"name":"TikTok LIVE"},{"name":"Conta"},{"name":"Conexões"},{"name":"Sessões"},{"name":"Atividade"}],"paths":{"/connections/{id}/chat-session":{"get":{"operationId":"chatSession","tags":["TikTok LIVE"],"summary":"Consultar sessão do TikTok","description":"Consulte se há uma sessão salva e abra loginUrl no painel para entrar no TikTok. sessionStored não garante que a sessão ainda esteja válida. A conta conectada publica; o @ da conexão identifica a LIVE de destino. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ChatSession"}},"required":["data"],"additionalProperties":false},"example":{"data":{"connectionId":1,"sessionStored":true,"simulate":false,"loginUrl":"/app/conexoes/1/conta"}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Envio ou navegador indisponível.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"disconnectChatSession","tags":["TikTok LIVE"],"summary":"Desconectar conta do TikTok","description":"Remove cookies e armazenamento de login e cancela tentativas em andamento. Uma mensagem já submetida pode ter sido entregue; confira seu resultado no histórico. Permissão: leitura e escrita.","x-permission":"write","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"204":{"description":"Operação concluída, sem corpo."},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Envio ou navegador indisponível.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connections/{id}/messages":{"get":{"operationId":"chatMessages","tags":["TikTok LIVE"],"summary":"Listar envios ao TikTok","description":"Retorna os últimos 50 envios desta conexão, do mais recente para o mais antigo, sem paginação. Inclui mensagens do painel e da API. sent exige confirmação com identificador; unknown exige conferência no TikTok, sem reenvio automático. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ChatMessage"}}},"required":["data"],"additionalProperties":false},"example":{"data":[{"id":"ef58daea-3c88-4dd7-a9cd-f8c1e168a923","connectionId":1,"text":"Obrigado pela presença!","status":"sent","remoteMessageId":"9876543210123456789","errorCode":null,"createdAt":"2026-10-09T18:00:00.000Z","updatedAt":"2026-10-09T18:00:05.000Z"}]}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Envio ou navegador indisponível.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"sendChatMessage","tags":["TikTok LIVE"],"summary":"Enviar mensagem ao TikTok","description":"Envio experimental pela interface web. Conecte a conta no painel e desative a demonstração. Até 150 caracteres e uma tentativa a cada 10 segundos por usuário; uma em andamento por usuário e duas no servidor. Aguarda até 60 segundos. HTTP 201 registra a tentativa, inclusive failed/unknown: leia data.status. Repetição retorna 200 ou 202 se ainda em andamento. Nunca crie outra chave para repetir um resultado unknown sem conferir o chat. Permissão: leitura e escrita.","x-permission":"write","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Identificação única por conexão, de 1 a 128 caracteres (letras, números, ponto, hífen, sublinhado ou dois-pontos). Repita a mesma chave e texto após falha de rede.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9_.:-]+$"}}],"responses":{"200":{"description":"Resultado de uma tentativa com a mesma chave.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ChatMessage"},"replayed":{"type":"boolean"}},"required":["data","replayed"],"additionalProperties":false},"example":{"data":{"id":"ef58daea-3c88-4dd7-a9cd-f8c1e168a923","connectionId":1,"text":"Obrigado pela presença!","status":"sent","remoteMessageId":"9876543210123456789","errorCode":null,"createdAt":"2026-10-09T18:00:00.000Z","updatedAt":"2026-10-09T18:00:05.000Z"},"replayed":false}}}},"201":{"description":"Tentativa registrada. Confira data.status para saber o resultado do envio.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ChatMessage"},"replayed":{"type":"boolean"}},"required":["data","replayed"],"additionalProperties":false},"example":{"data":{"id":"ef58daea-3c88-4dd7-a9cd-f8c1e168a923","connectionId":1,"text":"Obrigado pela presença!","status":"sent","remoteMessageId":"9876543210123456789","errorCode":null,"createdAt":"2026-10-09T18:00:00.000Z","updatedAt":"2026-10-09T18:00:05.000Z"},"replayed":false}}}},"202":{"description":"Tentativa ainda em andamento.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ChatMessage"},"replayed":{"type":"boolean"}},"required":["data","replayed"],"additionalProperties":false},"example":{"data":{"id":"ef58daea-3c88-4dd7-a9cd-f8c1e168a923","connectionId":1,"text":"Obrigado pela presença!","status":"sent","remoteMessageId":"9876543210123456789","errorCode":null,"createdAt":"2026-10-09T18:00:00.000Z","updatedAt":"2026-10-09T18:00:05.000Z"},"replayed":false}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Envio ou navegador indisponível.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":150,"description":"Uma linha, sem caracteres de controle; espaços nas pontas são removidos."}}},"example":{"text":"Obrigado pela presença!"}}}}}},"/connections/{id}/messages/{messageId}":{"get":{"operationId":"chatMessage","tags":["TikTok LIVE"],"summary":"Consultar um envio","description":"Consulta uma tentativa pelo UUID. Os estados são sending (em andamento), sent (confirmado), failed (não enviado ou recusado) e unknown (resultado incerto). Um resultado incerto nunca é repetido automaticamente. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}},{"name":"messageId","in":"path","required":true,"description":"UUID retornado ao criar a tentativa.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ChatMessage"}},"required":["data"],"additionalProperties":false},"example":{"data":{"id":"ef58daea-3c88-4dd7-a9cd-f8c1e168a923","connectionId":1,"text":"Obrigado pela presença!","status":"sent","remoteMessageId":"9876543210123456789","errorCode":null,"createdAt":"2026-10-09T18:00:00.000Z","updatedAt":"2026-10-09T18:00:05.000Z"}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Envio ou navegador indisponível.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me":{"get":{"operationId":"account","tags":["Conta"],"summary":"Consultar sua conta","description":"Identifica a conta associada à chave. Não retorna permissões administrativas nem dados de autenticação. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Account"}},"required":["data"],"additionalProperties":false},"example":{"data":{"id":1,"name":"João Criador","email":"joao@example.com"}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connections":{"get":{"operationId":"connections","tags":["Conexões"],"summary":"Listar conexões","description":"Lista as conexões da sua conta em ordem crescente de ID. Credenciais das plataformas e links privados de overlay não são retornados. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"limit","in":"query","description":"Quantidade por página (1–100).","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"afterId","in":"query","description":"Retorna IDs maiores que este valor, em ordem crescente.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Connection"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false},"example":{"data":[{"id":1,"platform":"tiktok","provider":"ttl-live","uniqueId":"seu.canal","label":"Live principal","aiMode":"copiloto","simulate":false,"createdAt":"2026-10-09T18:00:00.000Z","updatedAt":"2026-10-09T18:00:00.000Z"}],"pagination":{"limit":50,"hasMore":false,"nextAfterId":null}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connections/{id}":{"get":{"operationId":"connection","tags":["Conexões"],"summary":"Consultar uma conexão","description":"Retorna a plataforma, o canal e o modo do copiloto. Crie e configure conexões pelo painel antes de usar a API. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Connection"}},"required":["data"],"additionalProperties":false},"example":{"data":{"id":1,"platform":"tiktok","provider":"ttl-live","uniqueId":"seu.canal","label":"Live principal","aiMode":"copiloto","simulate":false,"createdAt":"2026-10-09T18:00:00.000Z","updatedAt":"2026-10-09T18:00:00.000Z"}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connections/{id}/status":{"get":{"operationId":"status","tags":["Conexões"],"summary":"Consultar o estado da escuta","description":"Retorna o estado atual da escuta, espectadores e ID da sessão em andamento. Use liveSessionId para consultar eventos e respostas. Detalhes de falhas ficam no painel. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Status"}},"required":["data"],"additionalProperties":false},"example":{"data":{"state":"ao_vivo","since":"2026-10-09T18:00:00.000Z","viewers":1240,"liveSessionId":42}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connections/{id}/start":{"post":{"operationId":"start","tags":["Conexões"],"summary":"Iniciar a escuta","description":"Inicia a leitura da live com as configurações salvas, incluindo o modo demonstração. Não inicia a transmissão na rede social. A IA pode consumir créditos do provedor quando ativada. Uma falha de conexão retorna 409; confira o painel antes de tentar novamente. Permissão: leitura e escrita.","x-permission":"write","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Status"}},"required":["data"],"additionalProperties":false},"example":{"data":{"state":"ao_vivo","since":"2026-10-09T18:00:00.000Z","viewers":1240,"liveSessionId":42}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false},"example":{}}}}}},"/connections/{id}/stop":{"post":{"operationId":"stop","tags":["Conexões"],"summary":"Parar a escuta","description":"Encerra a escuta e a sessão local, preservando seu histórico. A transmissão na plataforma continua. Permissão: leitura e escrita.","x-permission":"write","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Status"}},"required":["data"],"additionalProperties":false},"example":{"data":{"state":"parado","since":"2026-10-09T19:00:00.000Z","viewers":0,"liveSessionId":null}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false},"example":{}}}}}},"/connections/{id}/sessions":{"get":{"operationId":"sessions","tags":["Sessões"],"summary":"Listar sessões de uma conexão","description":"Percorre o histórico de sessões em ordem crescente de ID, com métricas acumuladas de cada live. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","description":"Quantidade por página (1–100).","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"afterId","in":"query","description":"Retorna IDs maiores que este valor, em ordem crescente.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Session"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false},"example":{"data":[{"id":42,"connectionId":1,"source":"tiktok","startedAt":"2026-10-09T18:00:00.000Z","endedAt":null,"endReason":null,"peakViewers":1240,"totalComments":356,"totalGifts":12,"totalDiamonds":50,"totalLikes":860,"totalMembers":28,"totalFollows":15,"totalShares":9,"totalReplies":24}],"pagination":{"limit":50,"hasMore":false,"nextAfterId":null}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/sessions/{id}":{"get":{"operationId":"session","tags":["Sessões"],"summary":"Consultar sessão e métricas","description":"Retorna início, encerramento e totais da sessão. endedAt igual a null indica uma sessão aberta. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Session"}},"required":["data"],"additionalProperties":false},"example":{"data":{"id":42,"connectionId":1,"source":"tiktok","startedAt":"2026-10-09T18:00:00.000Z","endedAt":null,"endReason":null,"peakViewers":1240,"totalComments":356,"totalGifts":12,"totalDiamonds":50,"totalLikes":860,"totalMembers":28,"totalFollows":15,"totalShares":9,"totalReplies":24}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/sessions/{id}/events":{"get":{"operationId":"events","tags":["Atividade"],"summary":"Ler eventos do chat","description":"Retorna eventos normalizados em ordem crescente de ID. Para acompanhar novos eventos, consulte a cada 5 segundos e use o último ID recebido como afterId. Os tipos dependem da plataforma. Payloads brutos e credenciais são omitidos. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","description":"Quantidade por página (1–100).","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"afterId","in":"query","description":"Retorna IDs maiores que este valor, em ordem crescente.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false},"example":{"data":[{"id":120,"liveSessionId":42,"type":"comment","text":"Onde está o link?","amount":null,"diamonds":null,"occurredAt":"2026-10-09T18:01:00.000Z","user":{"uniqueId":"carla","nickname":"Carla"}}],"pagination":{"limit":50,"hasMore":false,"nextAfterId":null}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/sessions/{id}/replies":{"get":{"operationId":"replies","tags":["Atividade"],"summary":"Listar respostas do copiloto","description":"Lista sugestões, respostas publicadas e descartadas. O cursor descobre novas respostas; releia a página correspondente para atualizar o status de respostas anteriores. Permissão: leitura ou leitura e escrita.","x-permission":"read","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","description":"Quantidade por página (1–100).","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"afterId","in":"query","description":"Retorna IDs maiores que este valor, em ordem crescente.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Reply"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false},"example":{"data":[{"id":28,"liveSessionId":42,"eventId":120,"kind":"resposta","targetUniqueId":"carla","text":"O link está fixado na live, Carla!","status":"sugerida","createdAt":"2026-10-09T18:01:00.000Z","publishedAt":null}],"pagination":{"limit":50,"hasMore":false,"nextAfterId":null}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/replies/{id}/publish":{"post":{"operationId":"publish","tags":["Atividade"],"summary":"Publicar resposta no overlay","description":"Publica uma sugestão no overlay da live. Não envia ao chat da rede social. Exige sessão aberta, resposta sugerida e tipo diferente de aviso. Repetir a ação retorna 409 sem republicar. Permissão: leitura e escrita.","x-permission":"write","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Reply"}},"required":["data"],"additionalProperties":false},"example":{"data":{"id":28,"liveSessionId":42,"eventId":120,"kind":"resposta","targetUniqueId":"carla","text":"O link está fixado na live, Carla!","status":"publicada","createdAt":"2026-10-09T18:01:00.000Z","publishedAt":"2026-10-09T18:02:00.000Z"}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false},"example":{}}}}}},"/replies/{id}/discard":{"post":{"operationId":"discard","tags":["Atividade"],"summary":"Descartar uma sugestão","description":"Descarta uma resposta ainda sugerida, inclusive avisos e sugestões de sessões encerradas. Respostas publicadas ou já descartadas retornam 409. Permissão: leitura e escrita.","x-permission":"write","parameters":[{"name":"id","in":"path","required":true,"description":"ID do recurso indicado na URL, pertencente à sua conta.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operação concluída.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Reply"}},"required":["data"],"additionalProperties":false},"example":{"data":{"id":28,"liveSessionId":42,"eventId":120,"kind":"resposta","targetUniqueId":"carla","text":"O link está fixado na live, Carla!","status":"descartada","createdAt":"2026-10-09T18:01:00.000Z","publishedAt":null}}}}},"400":{"description":"JSON ou URL inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, expirada, revogada ou conta desativada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Esta operação exige permissão de escrita.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Recurso inexistente ou de outra conta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Estado atual não permite a ação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo acima de 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parâmetro inválido ou corpo não vazio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de requisições atingido. Aguarde Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Segundos até a próxima tentativa.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"Falha interna.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false},"example":{}}}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Chave criada em /app/developers. Use somente em seu servidor."}},"schemas":{"ChatMessage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"connectionId":{"type":"integer"},"text":{"type":"string"},"status":{"enum":["sending","sent","failed","unknown"]},"remoteMessageId":{"type":["string","null"]},"errorCode":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","connectionId","text","status","remoteMessageId","errorCode","createdAt","updatedAt"],"additionalProperties":false},"ChatSession":{"type":"object","properties":{"connectionId":{"type":"integer"},"sessionStored":{"type":"boolean"},"simulate":{"type":"boolean"},"loginUrl":{"type":"string"}},"required":["connectionId","sessionStored","simulate","loginUrl"],"additionalProperties":false},"Account":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"name":{"type":"string"},"email":{"type":"string","format":"email"}},"required":["id","name","email"],"additionalProperties":false},"Connection":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"platform":{"type":"string"},"provider":{"type":"string"},"uniqueId":{"type":"string"},"label":{"type":["string","null"]},"aiMode":{"enum":["desligado","copiloto","overlay"]},"simulate":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","platform","provider","uniqueId","label","aiMode","simulate","createdAt","updatedAt"],"additionalProperties":false},"Status":{"type":"object","properties":{"state":{"type":"string"},"since":{"type":["string","null"],"format":"date-time"},"viewers":{"type":"integer","minimum":0},"liveSessionId":{"type":["integer","null"],"minimum":1}},"required":["state","since","viewers","liveSessionId"],"additionalProperties":false},"Session":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"connectionId":{"type":"integer","minimum":1},"source":{"type":"string"},"startedAt":{"type":"string","format":"date-time"},"endedAt":{"type":["string","null"],"format":"date-time"},"endReason":{"type":["string","null"]},"peakViewers":{"type":"integer","minimum":0},"totalComments":{"type":"integer","minimum":0},"totalGifts":{"type":"integer","minimum":0},"totalDiamonds":{"type":"integer","minimum":0},"totalLikes":{"type":"integer","minimum":0},"totalMembers":{"type":"integer","minimum":0},"totalFollows":{"type":"integer","minimum":0},"totalShares":{"type":"integer","minimum":0},"totalReplies":{"type":"integer","minimum":0}},"required":["id","connectionId","source","startedAt","endedAt","endReason","peakViewers","totalComments","totalGifts","totalDiamonds","totalLikes","totalMembers","totalFollows","totalShares","totalReplies"],"additionalProperties":false},"Event":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"liveSessionId":{"type":"integer","minimum":1},"type":{"type":"string"},"text":{"type":["string","null"]},"amount":{"type":["number","null"]},"diamonds":{"type":["number","null"]},"occurredAt":{"type":"string","format":"date-time"},"user":{"anyOf":[{"type":"object","properties":{"uniqueId":{"type":["string","null"]},"nickname":{"type":["string","null"]}},"required":["uniqueId","nickname"],"additionalProperties":false},{"type":"null"}]}},"required":["id","liveSessionId","type","text","amount","diamonds","occurredAt","user"],"additionalProperties":false},"Reply":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"liveSessionId":{"type":"integer","minimum":1},"eventId":{"type":["integer","null"],"minimum":1},"kind":{"type":"string"},"targetUniqueId":{"type":["string","null"]},"text":{"type":"string"},"status":{"enum":["sugerida","publicada","descartada"]},"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","liveSessionId","eventId","kind","targetUniqueId","text","status","createdAt","publishedAt"],"additionalProperties":false},"Pagination":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"hasMore":{"type":"boolean"},"nextAfterId":{"type":["integer","null"],"minimum":1}},"required":["limit","hasMore","nextAfterId"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}},"required":["code","message","requestId"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}