{"openapi":"3.0.3","info":{"title":"API de dados da Sendyx","version":"1.0.0","description":"Dados do catálogo de produtos do TikTok Shop, cobrados por crédito. 0.1 crédito(s) por requisição. Limites: 60 requisições por minuto e 10000 por dia, por chave."},"servers":[{"url":"https://developers.sendyx.com"}],"security":[{"bearerAuth":[]}],"paths":{"/v1/products":{"get":{"operationId":"listProducts","tags":["Produtos"],"x-notes":["O tamanho da página é fixo em 10. Enviar pageSize com outro valor devolve 400.","A página vai de 1 a 50. Para ir além, refine por filtro e ordenação.","Parâmetro desconhecido devolve 400. Itens fora da lista permitida em flags, states e sortBy também.","meta.dataUpTo é o dia mais recente dos dados. A fonte tem um dia de atraso.","commission é uma fração (0.15 é 15%). minPrice e maxPrice, em centavos, só saem quando o detalhe do produto já foi coletado.","Uma requisição com erro de validação não consome crédito."],"summary":"Lista produtos do catálogo","description":"Lista os produtos do catálogo com os filtros e as ordenações do Radar: categoria, faixa de faturamento, preço, comissão, sinais e momento do produto.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"description":"Mercado. Padrão BR.","schema":{"type":"string","enum":["BR"]}},{"name":"search","in":"query","required":false,"description":"Trecho do nome do produto (até 100 caracteres).","schema":{"type":"string","maxLength":100}},{"name":"categoryL1Id","in":"query","required":false,"description":"Id da categoria de nível 1.","schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"name":"categoryL2Id","in":"query","required":false,"description":"Id da categoria de nível 2.","schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"name":"categoryL3Id","in":"query","required":false,"description":"Id da categoria de nível 3.","schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"name":"categoryL1Ids","in":"query","required":false,"description":"Até 5 ids de nível 1 separados por vírgula (OU entre eles).","schema":{"type":"string"}},{"name":"categoryL2Ids","in":"query","required":false,"description":"Até 5 ids de nível 2 separados por vírgula.","schema":{"type":"string"}},{"name":"categoryL3Ids","in":"query","required":false,"description":"Até 5 ids de nível 3 separados por vírgula.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"Ordenação decrescente. Padrão revenue.","schema":{"type":"string","enum":["revenue","sales","revenue30d","sales30d","acceleration","revenuePerCreator","commission"]},"example":"sales"},{"name":"flags","in":"query","required":false,"description":"Sinais, separados por vírgula (todos precisam valer).","schema":{"type":"string","example":"video,selling"},"example":"selling"},{"name":"states","in":"query","required":false,"description":"Momento do produto, separado por vírgula (OU entre eles): exploding, accelerating, stable, cooling, idle.","schema":{"type":"string","example":"exploding,accelerating"}},{"name":"window","in":"query","required":false,"description":"Janela das métricas de revenue e sales, em dias. Padrão 7.","schema":{"type":"integer","enum":[1,7,30]}},{"name":"minGmv","in":"query","required":false,"description":"Faturamento mínimo em 30 dias, na moeda do mercado (inteiro).","schema":{"type":"integer","minimum":0}},{"name":"maxGmv","in":"query","required":false,"description":"Faturamento máximo em 30 dias, na moeda do mercado (inteiro).","schema":{"type":"integer","minimum":0}},{"name":"minCommission","in":"query","required":false,"description":"Comissão mínima em percentual (20 = 20%).","schema":{"type":"number","minimum":1,"maximum":100},"example":20},{"name":"launchedWithinDays","in":"query","required":false,"description":"Só produtos lançados nos últimos N dias.","schema":{"type":"integer","enum":[1,7,30,90]}},{"name":"page","in":"query","required":false,"description":"Página, de 1 a 50.","schema":{"type":"integer","minimum":1,"maximum":50},"example":1},{"name":"pageSize","in":"query","required":false,"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.","schema":{"type":"integer","enum":[10]}}],"responses":{"200":{"description":"Página de produtos.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductPage"},"example":{"data":[{"id":"1731916815699052495","name":"Produto de exemplo A","coverUrl":"https://exemplo.invalid/capas/1731916815699052495.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052495","categoryL1":{"id":"600001","name":"Beleza"},"categoryL2":{"id":"600002","name":"Skincare"},"categoryL3":{"id":"600003","name":"Cuidados com o rosto"},"shopName":"Loja de exemplo","reviewCount":1200,"minPrice":3990,"maxPrice":5990,"commission":0.15,"revenue":120000,"sales":2400,"revenue30d":480000,"sales30d":9600,"sales7d":2400,"revenuePerCreator":3200,"acceleration":1.25,"trend":[313,333,400],"state":"accelerating","launchDate":"2026-03-01","rank":12,"prevRank":18,"channel":{"videoRevenue":288000,"liveRevenue":120000,"creatorsMeasured":150}},{"id":"1731916815699052496","name":"Produto de exemplo B","coverUrl":"https://exemplo.invalid/capas/1731916815699052496.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052496","categoryL1":{"id":"600010","name":"Casa e cozinha"},"categoryL2":null,"categoryL3":null,"shopName":null,"reviewCount":null,"minPrice":null,"maxPrice":null,"commission":null,"revenue":31500,"sales":630,"revenue30d":126000,"sales30d":2520,"sales7d":630,"revenuePerCreator":null,"acceleration":1.25,"trend":[82,88,105],"state":"accelerating","launchDate":"2026-03-01","rank":47,"prevRank":null,"channel":{"videoRevenue":75600,"liveRevenue":31500,"creatorsMeasured":null}}],"pagination":{"page":1,"pageSize":10,"total":342,"totalPages":35},"meta":{"dataUpTo":"2026-10-01","currency":"BRL"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições excedido. Veja o cabeçalho Retry-After.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/v1/products/{id}":{"get":{"operationId":"getProduct","tags":["Produtos"],"x-notes":["Devolve só o que já está na nossa base. Produto fora do catálogo atual devolve 404.","O 404 não consome crédito: o valor debitado é devolvido na hora.","O id é o campo id retornado por GET /v1/products."],"summary":"Detalhe de um produto","description":"Detalhe de um produto do catálogo, com os campos extras de janelas curtas (7 dias e ontem) e saturação. Devolve o que está no catálogo atual.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id do produto (campo id de GET /v1/products).","example":"1731916815699052495"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."}],"responses":{"200":{"description":"O produto.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetailResponse"},"example":{"data":{"id":"1731916815699052495","name":"Produto de exemplo A","coverUrl":"https://exemplo.invalid/capas/1731916815699052495.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052495","categoryL1":{"id":"600001","name":"Beleza"},"categoryL2":{"id":"600002","name":"Skincare"},"categoryL3":{"id":"600003","name":"Cuidados com o rosto"},"shopName":"Loja de exemplo","reviewCount":1200,"minPrice":3990,"maxPrice":5990,"commission":0.15,"revenue":120000,"sales":2400,"revenue30d":480000,"sales30d":9600,"sales7d":2400,"revenuePerCreator":3200,"acceleration":1.25,"trend":[313,333,400],"state":"accelerating","launchDate":"2026-03-01","rank":12,"prevRank":18,"channel":{"videoRevenue":288000,"liveRevenue":120000,"creatorsMeasured":150,"videosMeasured":980,"livesMeasured":35},"revenue7d":120000,"revenue1d":20000,"saturation":3.125},"meta":{"dataUpTo":"2026-10-01","currency":"BRL"}}}}},"400":{"description":"Parâmetro inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"404":{"description":"Produto não encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found","message":"Produto não encontrado.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições excedido. Veja o cabeçalho Retry-After.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/v1/products/{id}/analysis":{"get":{"operationId":"getProductAnalysis","tags":["Produtos"],"x-notes":["Texto descritivo do produto, como foi cadastrado na loja.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Análise de um produto","description":"Pontos fortes e atributos do produto, em português.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do produto (campo id de GET /v1/products).","example":"1731916815699052495"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAnalysisResponse"},"example":{"data":{"productId":"1731916815699052495","region":"BR","language":"pt-BR","highlights":[{"keyword":"Brilho Espelhado Imediato","text":"Fórmula com silicones ultra luminosos para brilho espelhado"},{"keyword":"Efeito Anti-Frizz Instantâneo","text":"Efeito anti-frizz imediato, disciplinando fios rebeldes"},{"keyword":"Proteção Solar Avançada","text":"Protege contra raios solares e agressores externos"},{"keyword":"Textura Leve Sem Pesos","text":"Textura leve que não pesa nos fios"},{"keyword":"Versatilidade para Todos os Tipos de Cabelos","text":"para todos os tipos de cabelos"}],"attributes":[{"key":"Marca","value":"Semélle"},{"key":"Tipo de Produto","value":"Reparador de Pontas Gloss"},{"key":"Indicação","value":"Todos os tipos de cabelos"},{"key":"Principais Ingredientes","value":"Silicones ultra luminosos"},{"key":"Efeito","value":"Anti-frizz, brilho espelhado, prevenção de pontas duplas"},{"key":"Proteção","value":"Contra raios solares e agressores externos"},{"key":"Textura","value":"Leve, não deixa resíduos"},{"key":"Modo de Uso","value":"Aplicar no comprimento e pontas após escova ou penteado"},{"key":"Finalidade","value":"Finalizador diário e acabamento pós-escova"},{"key":"Público-alvo","value":"Mulheres práticas e exigentes"}]},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/products/{id}/trend":{"get":{"operationId":"getProductTrend","tags":["Produtos"],"x-notes":["As datas de series são DERIVADAS, não vêm da fonte: o último ponto é o dia anterior à data UTC de meta.fetchedAt e cada ponto anterior recua um dia. A regra foi conferida contra a série diária real (63% das posições bateram a 0,5%), mas a fonte pode revisar valores já publicados, e na virada do dia em UTC o rótulo pode se deslocar um dia (premissa não provada nessas horas). O número de pontos depende da fonte e não segue necessariamente a janela. Produto sem série devolve series vazio, sem erro.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Série diária de faturamento de um produto","description":"Faturamento por dia do produto, com as datas derivadas. Use para desenhar a curva do produto.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do produto (campo id de GET /v1/products).","example":"1731665066105865445"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTrendResponse"},"example":{"data":{"productId":"1731665066105865445","series":[{"date":"2026-09-02","revenue":44069},{"date":"2026-09-03","revenue":40089},{"date":"2026-09-04","revenue":40950},{"date":"2026-09-05","revenue":36331},{"date":"2026-09-06","revenue":41241},{"date":"2026-09-07","revenue":49115},{"date":"2026-09-08","revenue":57783},{"date":"2026-09-09","revenue":36339},{"date":"2026-09-10","revenue":57629},{"date":"2026-09-11","revenue":80275},{"date":"2026-09-12","revenue":55498},{"date":"2026-09-13","revenue":107259},{"date":"2026-09-14","revenue":102209},{"date":"2026-09-15","revenue":53071},{"date":"2026-09-16","revenue":94064},{"date":"2026-09-17","revenue":80764},{"date":"2026-09-18","revenue":102115},{"date":"2026-09-19","revenue":115958},{"date":"2026-09-20","revenue":89326},{"date":"2026-09-21","revenue":72168},{"date":"2026-09-22","revenue":52390},{"date":"2026-09-23","revenue":100564},{"date":"2026-09-24","revenue":70163},{"date":"2026-09-25","revenue":47248},{"date":"2026-09-26","revenue":31277},{"date":"2026-09-27","revenue":89054},{"date":"2026-09-28","revenue":58010},{"date":"2026-09-29","revenue":19914},{"date":"2026-09-30","revenue":18991},{"date":"2026-10-01","revenue":15995}]},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops/{id}/products":{"get":{"operationId":"listShopProducts","tags":["Produtos"],"x-notes":["Só aparecem os produtos que venderam na janela: o total de produtos da entidade pode ser maior. A página de 100 linhas é a mesma para as páginas 1 a 10.","commission é uma fração (0.11 é 11%). A fonte entrega pontos percentuais e dividimos por 100, como em GET /v1/products. No ranking por entidade essa unidade é inferida, não confirmada; revenueGrowthRate é o número bruto da fonte e não deve ser tratado como porcentagem.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Produtos de uma loja","description":"Ranking dos produtos da loja por faturamento na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id da loja (campo id de GET /v1/shops).","example":"7496266893040520143"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1731916815699052495","name":"Reparador de Pontas Gloss com Silicones Ultra Luminosos Protege Contra Raios Solares e Anti-Frizz para Todos os Tipos de Cabelos Selando As Cutículas Brilho Alto Agressores Externos Textura Leve","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":1388862.74,"sales":133205,"unitPrice":10.43,"commission":0.11,"revenueGrowthRate":-19.1,"videoRevenue":706392.16,"liveRevenue":682375.62,"showcaseRevenue":94.96,"launchDate":"2025-10-28","skuCount":1},{"id":"1736900671466342351","name":"Sultana Perfume Árabe Capilar Concentrado - Luxuoso para Mulheres poderosas com Notas Misteriosas e Envolventes","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":1945.94,"sales":57,"unitPrice":34.14,"commission":0.1,"revenueGrowthRate":-9.77,"videoRevenue":164.38,"liveRevenue":1781.57,"showcaseRevenue":0,"launchDate":"2026-08-05","skuCount":1}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/creators/{id}/products":{"get":{"operationId":"listCreatorProducts","tags":["Produtos"],"x-notes":["Só aparecem os produtos que venderam na janela: o total de produtos da entidade pode ser maior. A página de 100 linhas é a mesma para as páginas 1 a 10.","commission é uma fração (0.11 é 11%). A fonte entrega pontos percentuais e dividimos por 100, como em GET /v1/products. No ranking por entidade essa unidade é inferida, não confirmada; revenueGrowthRate é o número bruto da fonte e não deve ser tratado como porcentagem.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Produtos de um criador","description":"Ranking dos produtos que o criador divulgou e que venderam na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do criador (campo id de GET /v1/creators).","example":"9993000000000000001"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1731916815699052495","name":"Reparador de Pontas Gloss com Silicones Ultra Luminosos Protege Contra Raios Solares e Anti-Frizz para Todos os Tipos de Cabelos Selando As Cutículas Brilho Alto Agressores Externos Textura Leve","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":77743.7,"sales":7518,"unitPrice":10.34,"commission":0.11,"revenueGrowthRate":-66.72,"videoRevenue":77743.7,"liveRevenue":0,"showcaseRevenue":0,"launchDate":"2025-10-28","skuCount":1},{"id":"1731942865264674037","name":"Body Splash Árabe Ayra 100ml by Primacial - Perfume Floral Gourmand","coverUrl":null,"shop":{"id":"7496154921588197621","name":"Primacial"},"revenue":922.37,"sales":47,"unitPrice":19.62,"commission":0.11,"revenueGrowthRate":-41.58,"videoRevenue":922.37,"liveRevenue":0,"showcaseRevenue":0,"launchDate":"2025-08-12","skuCount":1}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/videos/{id}/products":{"get":{"operationId":"listVideoProducts","tags":["Produtos"],"x-notes":["Só aparecem os produtos que venderam na janela: o total de produtos da entidade pode ser maior. A página de 100 linhas é a mesma para as páginas 1 a 10.","commission é uma fração (0.11 é 11%). A fonte entrega pontos percentuais e dividimos por 100, como em GET /v1/products. No ranking por entidade essa unidade é inferida, não confirmada; revenueGrowthRate é o número bruto da fonte e não deve ser tratado como porcentagem.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Produtos de um vídeo","description":"Os produtos que o vídeo divulga e que venderam na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do vídeo (campo id de GET /v1/videos).","example":"7680050878983834898"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1731916815699052495","name":"Reparador de Pontas Gloss com Silicones Ultra Luminosos Protege Contra Raios Solares e Anti-Frizz para Todos os Tipos de Cabelos Selando As Cutículas Brilho Alto Agressores Externos Textura Leve","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":67110.47,"sales":6546,"unitPrice":10.25,"commission":0.11,"revenueGrowthRate":-66.01,"videoRevenue":67110.47,"liveRevenue":0,"showcaseRevenue":0,"launchDate":"2025-10-28","skuCount":1}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/lives/{id}/products":{"get":{"operationId":"listLiveProducts","tags":["Produtos"],"x-notes":["Só aparecem os produtos que venderam na janela: o total de produtos da entidade pode ser maior. A página de 100 linhas é a mesma para as páginas 1 a 10.","commission é uma fração (0.11 é 11%). A fonte entrega pontos percentuais e dividimos por 100, como em GET /v1/products. No ranking por entidade essa unidade é inferida, não confirmada; revenueGrowthRate é o número bruto da fonte e não deve ser tratado como porcentagem.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Produtos de uma live","description":"Ranking dos produtos vendidos na live na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id da live (campo id de GET /v1/lives).","example":"7688869399273065237"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1737669706235937867","name":"Parafusadeira Elétrica 48V Com 2 Bateria Recarregável Sem Fio e Maleta Completa","coverUrl":null,"shop":{"id":"7494855033048826955","name":"WENJITK"},"revenue":54532.46,"sales":609,"unitPrice":89.54,"commission":0.05,"revenueGrowthRate":100,"videoRevenue":0,"liveRevenue":54532.46,"showcaseRevenue":0,"launchDate":"2026-09-23","skuCount":null},{"id":"1737497467647460621","name":"DEWEN Martelete Perfurador Rompedor Professional 26mm 4 em 1 4950 RPM Com Acessorios","coverUrl":null,"shop":{"id":"7494823596993447181","name":"dewen_obra"},"revenue":34946.29,"sales":130,"unitPrice":268.82,"commission":0.05,"revenueGrowthRate":100,"videoRevenue":0,"liveRevenue":34946.29,"showcaseRevenue":0,"launchDate":"2026-09-14","skuCount":2}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/products/{id}/videos":{"get":{"operationId":"listProductVideos","tags":["Vídeos"],"x-notes":["Vídeos ordenados por faturamento na janela.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Vídeos que venderam um produto","description":"Ranking dos vídeos que venderam o produto na janela, com visualizações, curtidas e faturamento.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do produto (campo id de GET /v1/products).","example":"1731916815699052495"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoRankingResponse"},"example":{"data":[{"id":"7680050878983834898","title":"#mulher #mulheres #tiktokshop #cabelo #tonicocapilar","creator":{"id":"9993000000000000001","handle":"@criador_mock_0016"},"revenue":67110.47,"revenueGrowthRate":-180.99,"views":3491380,"likes":133700,"shares":45500,"comments":3337,"publishedAt":"2026/08/31 01:39:58","creatorDebut":"2025-12-25","isAd":true,"isAiGenerated":true,"adsRoas":3.45,"adRevenueRatio":8.504760860109378,"adViewRatio":1.1179820013862714},{"id":"7681243230125575432","title":"#autocuidado","creator":{"id":"9993000000000000005","handle":"@criador_mock_0020"},"revenue":38498.26,"revenueGrowthRate":-185.1,"views":2100000,"likes":28400,"shares":685,"comments":319,"publishedAt":"2026/09/03 06:46:51","creatorDebut":"2026-01-13","isAd":false,"isAiGenerated":false,"adsRoas":0,"adRevenueRatio":0,"adViewRatio":0}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/videos/{id}":{"get":{"operationId":"getVideo","tags":["Vídeos"],"x-notes":["Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Detalhe de um vídeo","description":"Métricas de um vídeo: faturamento, vendas, visualizações, desempenho de anúncio e duração.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do vídeo.","example":"7680050878983834898"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoDetailResponse"},"example":{"data":{"id":"7680050878983834898","title":"#mulher #mulheres #tiktokshop #cabelo #tonicocapilar","region":null,"creator":{"id":"9993000000000000001","handle":"@criador_mock_0016"},"productCount":1,"revenue":67110.47,"sales":6546,"views":3491380,"likes":133700,"shares":45500,"comments":3337,"gpm":19.22,"adsViews":326870,"adsRoas":3.45,"adsPeriod":1,"adCpa":0.25242183045190886,"adViewRatio":1.1179820013862714,"duration":51,"isAd":true,"isAiGenerated":true,"revenueTrend":null},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/videos":{"get":{"operationId":"listVideos","tags":["Vídeos"],"x-notes":["Vídeos ordenados por faturamento na janela.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Ranking geral de vídeos","description":"Ranking GERAL dos vídeos do mercado por faturamento na janela. Não é o ranking de um produto nem de uma loja.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoRankingResponse"},"example":{"data":[{"id":"7681045521795927317","title":"#Tiktokshopbr99","creator":{"id":"9993000000000000010","handle":"@criador_mock_0017"},"revenue":363255.11,"revenueGrowthRate":-189.58,"views":4401675,"likes":45761,"shares":3325,"comments":563,"publishedAt":"2026/09/02 17:59:39","creatorDebut":"2025-02-03","isAd":true,"isAiGenerated":false,"adsRoas":3.55,"adRevenueRatio":60.476435076887135,"adViewRatio":33.17189479005152},{"id":"7675906754173029640","title":"#skincare #mulher #ViralTikTokShop #renovaçãodeprimavera #principia","creator":{"id":"9993000000000000011","handle":"@criador_mock_0018"},"revenue":355044.14,"revenueGrowthRate":-180.13,"views":5238160,"likes":34061,"shares":4195,"comments":472,"publishedAt":"2026/08/20 12:00:00","creatorDebut":"2025-06-26","isAd":true,"isAiGenerated":false,"adsRoas":3.18,"adRevenueRatio":80.00000000000001,"adViewRatio":40.26927394352215}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops/{id}/videos":{"get":{"operationId":"listShopVideos","tags":["Vídeos"],"x-notes":["Vídeos ordenados por faturamento na janela.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Vídeos de uma loja","description":"Ranking dos vídeos que venderam produtos da loja na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id da loja (campo id de GET /v1/shops).","example":"7496266893040520143"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoRankingResponse"},"example":{"data":[{"id":"7680050878983834898","title":"#mulher #mulheres #tiktokshop #cabelo #tonicocapilar","creator":{"id":"9993000000000000001","handle":"@criador_mock_0016"},"revenue":67110.47,"revenueGrowthRate":-180.99,"views":3491380,"likes":133700,"shares":45500,"comments":3337,"publishedAt":"2026/08/31 01:39:58","creatorDebut":"2025-12-25","isAd":true,"isAiGenerated":true,"adsRoas":3.45,"adRevenueRatio":8.504760860109378,"adViewRatio":1.1179820013862714},{"id":"7681243230125575432","title":"#autocuidado","creator":{"id":"9993000000000000005","handle":"@criador_mock_0020"},"revenue":38498.26,"revenueGrowthRate":-185.1,"views":2100000,"likes":28400,"shares":685,"comments":319,"publishedAt":"2026/09/03 06:46:51","creatorDebut":"2026-01-13","isAd":false,"isAiGenerated":false,"adsRoas":0,"adRevenueRatio":0,"adViewRatio":0}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/products/{id}/creators":{"get":{"operationId":"listProductCreators","tags":["Criadores"],"x-notes":["Só desempenho e o @ público do perfil. Esta rota nunca devolve contatos nem bio de criador. Contatos só existem em GET /v1/creators/{id}/contacts.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Criadores que divulgaram um produto","description":"Ranking dos criadores que divulgaram o produto na janela, com faturamento por canal e vendas.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do produto (campo id de GET /v1/products).","example":"1731916815699052495"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRankingResponse"},"example":{"data":[{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","followers":63000,"contentViews":4010167,"revenue":77743.7,"videoRevenue":77743.7,"liveRevenue":0,"sales":7518,"revenueGrowthRate":-66.72,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]},{"id":"9993000000000000005","nickname":"Criador Mock 0009","handle":"@criador_mock_0010","followers":21700,"contentViews":5366476,"revenue":63793.01,"videoRevenue":63793.01,"liveRevenue":0,"sales":6257,"revenueGrowthRate":-47.7,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/creators/{id}":{"get":{"operationId":"getCreator","tags":["Criadores"],"x-notes":["Esta rota nunca devolve contatos nem bio de criador. Contatos só existem em GET /v1/creators/{id}/contacts.","Buscar o criador por aqui conta como \"criador já buscado\" por 24 horas: nesse prazo, os contatos custam só 0,02 crédito.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Detalhe de um criador","description":"Desempenho de um criador na janela: faturamento por canal, seguidores, visualizações e quantidades de vídeos, lives, lojas e produtos.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do criador.","example":"9993000000000000001"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorDetailResponse"},"example":{"data":{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","region":"br","status":"INDEPENDENT","followers":63000,"newFollowers":31500,"revenue":78692.25,"videoRevenue":78666.07,"liveRevenue":0,"sales":7566,"unitPrice":10.4,"videoViews":4010167,"liveViews":0,"videoGpm":19.62,"liveGpm":0,"videoCount":0,"liveCount":0,"shopCount":7,"productCount":7,"top3ProductIds":[],"revenueTrend":null},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"404":{"description":"Criador não encontrado ou indisponível. Nada é cobrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found","message":"Produto não encontrado.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/creators/{id}/contacts":{"get":{"operationId":"getCreatorContacts","tags":["Criadores"],"x-notes":["INDISPONÍVEL POR ENQUANTO. Enquanto o recurso não é liberado, a rota responde 503 (upstream_disabled), sem cobrar e sem buscar nada. Não há data prevista.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Contatos de um criador (indisponível por enquanto)","description":"Indisponível por enquanto: esta rota existe no contrato, mas responde 503 enquanto o recurso não é liberado, sem cobrança e sem busca. Contatos públicos informados pelo criador, para quem aceitou os termos de uso da API.","x-credit-cost":"0.12","x-credit-cost-label":"Indisponível por enquanto (nada é cobrado)","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id do criador.","example":"9993000000000000001"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.12"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.88"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorContactsResponse"},"example":{"data":{"creator":{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","region":"br","status":"INDEPENDENT","followers":63000,"newFollowers":31500,"revenue":78692.25,"videoRevenue":78666.07,"liveRevenue":0,"sales":7566,"unitPrice":10.4,"videoViews":4010167,"liveViews":0,"videoGpm":19.62,"liveGpm":0,"videoCount":0,"liveCount":0,"shopCount":7,"productCount":7,"top3ProductIds":[],"revenueTrend":null},"contacts":{"email":"contato.mock@example.invalid","tiktok":"@criador_mock_0001","whatsapp":"+55 00 00000-0000","line":"line_mock_0001","facebook":"facebook.com/criador.mock","instagram":"@criador_mock_0001","zalo":"0000000000"}},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}},"examples":{"Primeiros 0,12":{"summary":"Primeiros 0,12","value":{"data":{"creator":{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","region":"br","status":"INDEPENDENT","followers":63000,"newFollowers":31500,"revenue":78692.25,"videoRevenue":78666.07,"liveRevenue":0,"sales":7566,"unitPrice":10.4,"videoViews":4010167,"liveViews":0,"videoGpm":19.62,"liveGpm":0,"videoCount":0,"liveCount":0,"shopCount":7,"productCount":7,"top3ProductIds":[],"revenueTrend":null},"contacts":{"email":"contato.mock@example.invalid","tiktok":"@criador_mock_0001","whatsapp":"+55 00 00000-0000","line":"line_mock_0001","facebook":"facebook.com/criador.mock","instagram":"@criador_mock_0001","zalo":"0000000000"}},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}},"x-headers":{"x-credits-cost":"0.12","x-credits-remaining":"4.88","x-request-id":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"Já buscado 0,02":{"summary":"Já buscado 0,02","value":{"data":{"contacts":{"email":"contato.mock@example.invalid","tiktok":"@criador_mock_0001","whatsapp":"+55 00 00000-0000","line":"line_mock_0001","facebook":"facebook.com/criador.mock","instagram":"@criador_mock_0001","zalo":"0000000000"}},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}},"x-headers":{"x-credits-cost":"0.02","x-credits-remaining":"4.98","x-request-id":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"403":{"description":"Os termos de uso da API ainda não foram aceitos pelo dono da chave. Aceite no console. Nada é cobrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"terms_not_accepted","message":"Aceite os termos de uso da API no console para consultar contatos de criador. Nada é cobrado.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"404":{"description":"Criador não encontrado ou indisponível. Nada é cobrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found","message":"Produto não encontrado.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições, cota de buscas novas por hora ou limite diário de consultas de contato atingido. O campo error diz qual: rate_limited, miss_quota_exceeded ou contacts_daily_limit.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}},"limite de contatos":{"summary":"limite de contatos","value":{"error":"contacts_daily_limit","message":"O limite diário de consultas de contato desta conta foi atingido. Tente novamente amanhã.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/creators":{"get":{"operationId":"listCreators","tags":["Criadores"],"x-notes":["Só desempenho e o @ público do perfil. Esta rota nunca devolve contatos nem bio de criador. Contatos só existem em GET /v1/creators/{id}/contacts.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Ranking geral de criadores","description":"Ranking GERAL dos criadores do mercado por faturamento na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRankingResponse"},"example":{"data":[{"id":"9993000000000000002","nickname":"Criador Mock 0003","handle":"@criador_mock_0004","followers":313000,"contentViews":12402625,"revenue":5407000.58,"videoRevenue":415032.56,"liveRevenue":4981853.14,"sales":30185,"revenueGrowthRate":7.72,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]},{"id":"9993000000000000003","nickname":"Criador Mock 0005","handle":"@criador_mock_0006","followers":21100,"contentViews":5570484,"revenue":2769191.24,"videoRevenue":24626.43,"liveRevenue":2740817.16,"sales":25517,"revenueGrowthRate":-11.92,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops/{id}/creators":{"get":{"operationId":"listShopCreators","tags":["Criadores"],"x-notes":["Só desempenho e o @ público do perfil. Esta rota nunca devolve contatos nem bio de criador. Contatos só existem em GET /v1/creators/{id}/contacts.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Criadores de uma loja","description":"Ranking dos criadores que venderam produtos da loja na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id da loja (campo id de GET /v1/shops).","example":"7496266893040520143"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRankingResponse"},"example":{"data":[{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","followers":63000,"contentViews":4010167,"revenue":77743.7,"videoRevenue":77743.7,"liveRevenue":0,"sales":7518,"revenueGrowthRate":-66.72,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]},{"id":"9993000000000000005","nickname":"Criador Mock 0009","handle":"@criador_mock_0010","followers":21700,"contentViews":5366476,"revenue":63793.01,"videoRevenue":63793.01,"liveRevenue":0,"sales":6257,"revenueGrowthRate":-47.7,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/categories":{"get":{"operationId":"listCategories","tags":["Categorias"],"x-notes":["Só entram categorias que têm produto no catálogo atual.","Use o id de uma categoria nos filtros categoryL1Id, categoryL2Id e categoryL3Id de GET /v1/products."],"summary":"Árvore de categorias","description":"Árvore de categorias do catálogo, com a quantidade de produtos de cada nó. Os ids servem de filtro em GET /v1/products.","x-credit-cost":"0","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."}],"responses":{"200":{"description":"A árvore.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"5.00"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryTreeResponse"},"example":{"data":{"nodes":[{"id":"600001","name":"Beleza","level":1,"parentId":null,"productCount":120,"children":[{"id":"600002","name":"Skincare","level":2,"parentId":"600001","productCount":45,"children":[{"id":"600003","name":"Cuidados com o rosto","level":3,"parentId":"600002","productCount":18,"children":[]}]}]},{"id":"600010","name":"Casa e cozinha","level":1,"parentId":null,"productCount":80,"children":[{"id":"600011","name":"Organização","level":2,"parentId":"600010","productCount":80,"children":[]}]}],"catalogTotal":342},"meta":{"dataUpTo":"2026-10-01","currency":"BRL"}}}}},"400":{"description":"Parâmetro inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"429":{"description":"Limite de requisições excedido. Veja o cabeçalho Retry-After.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/v1/categories/ranking":{"get":{"operationId":"getCategoryRanking","tags":["Categorias"],"x-notes":["Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Ranking de categorias","description":"Ranking GERAL das categorias do mercado por faturamento na janela. Não é o ranking de produtos de uma categoria.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryRankingResponse"},"example":{"data":[{"id":"601152","name":"Roupas femininas e roupas íntimas femininas","rank":1,"revenue":474637451.81,"sales":12809261,"revenueGrowthRate":-17.04,"top3ShopRevenueRatio":1.62,"averageRevenue":16295.45},{"id":"601450","name":"Beleza e cuidados pessoais","rank":2,"revenue":380532554.43,"sales":9700465,"revenueGrowthRate":-16.01,"top3ShopRevenueRatio":7.24,"averageRevenue":15039.03}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/categories/{id}":{"get":{"operationId":"getCategory","tags":["Categorias"],"x-notes":["Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Detalhe de uma categoria","description":"Faturamento por canal, quantidade de lojas e produtos ativos e série de faturamento de uma categoria.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id da categoria (campo id de GET /v1/categories).","example":"601450"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryDetailResponse"},"example":{"data":{"id":"601450","name":"Beleza e cuidados pessoais","revenue":380532554.43,"sales":9700465,"shopCount":25311,"activeProductCount":230842,"liveRevenue":147897129.04,"videoRevenue":187401798.12,"affiliateRevenue":323314077.93585366,"selfOperatedRevenue":28105274.717672423,"shoppingMallRevenue":45233627.27000001,"averageShopRevenue":15034.28,"revenueGrowthRate":-16.01,"revenueTrend":[12889799.783695856,12389202.164105965,14603780.078967132,13715544.60812507,13793887.497792838,12068030.611219877,12240701.922179159,13331933.8072971,15325482.947157359,8466255.224346327,9930138.139638878,10773996.168123439,12875751.735232223,14611248.31061054,12086603.103609614,11788748.443470975,9566099.773913367,10087339.358736837,15943947.79155202,14139071.130000006,13268826.870399127,13506473.152680138,10944084.797653493,10164235.226391464,15083865.50066786,14922892.998728719,12547847.829945834,12374977.73259608,13189020.371665115,13902541.956874274]},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops":{"get":{"operationId":"listShops","tags":["Lojas"],"x-notes":["A imagem da loja não é exposta.","Unidades NÃO confirmadas: revenueGrowthRate é o número bruto da fonte (em categorias e lojas parece pontos percentuais, mas em vídeos já apareceu -180,99, então não o trate como porcentagem) e as razões ads e adViewRatio também são brutas.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Ranking de lojas","description":"Ranking das lojas do mercado por faturamento na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopRankingResponse"},"example":{"data":[{"id":"7494536208662758848","name":"GOKOCO Brasil","rank":1,"revenue":11288119.35,"sales":59396,"revenueGrowthRate":-50.36,"unitPrice":190.05,"shopType":"BRAND","onSaleProductCount":18,"affiliateRevenue":10951668.2,"selfPromotionRevenue":330573.42,"shoppingMallRevenue":5877.74,"categoryNames":[],"categoryIds":[]},{"id":"7496160368512436795","name":"LOi Brasil","rank":2,"revenue":10237707.37,"sales":27020,"revenueGrowthRate":3.22,"unitPrice":378.89,"shopType":"BRAND","onSaleProductCount":141,"affiliateRevenue":9937191.39,"selfPromotionRevenue":4470.83,"shoppingMallRevenue":296045.15,"categoryNames":[],"categoryIds":[]}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops/{id}":{"get":{"operationId":"getShop","tags":["Lojas"],"x-notes":["revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Detalhe de uma loja","description":"Faturamento por origem, quantidades de criadores, produtos, vídeos e lives e série de faturamento de uma loja.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id da loja.","example":"7496266893040520143"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopDetailResponse"},"example":{"data":{"id":"7496266893040520143","name":"Semélle","region":"BR","sellerType":"BRAND","revenue":1395311.31,"sales":133380,"unitPrice":10.46,"shoppingMallRevenue":430,"selfAccountRevenue":0,"affiliateRevenue":1394881.65,"creatorCount":13255,"productCount":23,"videoCount":28958,"liveCount":20411,"top3ProductIds":[],"revenueTrend":null},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/lives":{"get":{"operationId":"listLives","tags":["Lives"],"x-notes":["Horários em ISO 8601 UTC. A duração está em segundos.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Ranking de lives","description":"Ranking das lives do mercado por faturamento na janela.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Página, de 1 a 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400."}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveRankingResponse"},"example":{"data":[{"id":"7688869399273065237","title":"Parafusadeira e furadeira 48 vol","creator":{"id":"9993000000000000007","handle":"@criador_mock_0013"},"startedAt":"2026-09-23T23:01:23.000Z","endedAt":"2026-09-28T02:59:32.000Z","durationSeconds":359889,"revenue":867470.15,"unitPrice":73.25,"views":2583360,"recordType":"SHORT"},{"id":"7685747990938979079","title":null,"creator":{"id":"9993000000000000008","handle":"@criador_mock_0014"},"startedAt":"2026-09-15T13:07:50.000Z","endedAt":"2026-09-15T22:42:04.000Z","durationSeconds":34454,"revenue":772848.24,"unitPrice":534.1,"views":162872,"recordType":"SHORT"}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/lives/{id}":{"get":{"operationId":"getLive","tags":["Lives"],"x-notes":["Horários em ISO 8601 UTC. A duração está em segundos.","meta.fetchedAt é o instante em que o dado foi obtido. Um ranking diário vale até a próxima publicação do dia (por volta das 14h UTC). O custo da rota é o mesmo em toda requisição bem-sucedida.","pageSize é fixo em 10. window aceita 7, 30 ou 90 dias. A página vai de 1 a 50. Só o mercado BR.","Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado. O campo error diz o motivo: upstream_disabled, upstream_budget_exceeded ou upstream_unavailable (fonte com falha ou ocupada, inclusive fila de buscas cheia: tente de novo depois do Retry-After).","Lista vazia pode ser passageira: tente de novo em um minuto.","Os cabeçalhos x-credits-cost e x-credits-remaining vêm nas respostas 200, no 402 e nos erros estornados depois da cobrança (como 404 e 503, com custo 0.00); não vêm no 401, no 429 nem no 400 de validação. Trazem sempre duas casas decimais (por exemplo 0.10 e 4.90). No corpo JSON os números são numéricos e não preservam zeros à direita."],"summary":"Detalhe de uma live","description":"Faturamento, espectadores, produtos e GPM de uma live.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Id da live.","example":"7688869399273065237"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Mercado. Padrão BR."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Janela em dias. Padrão 7.","example":7}],"responses":{"200":{"description":"Resposta.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveDetailResponse"},"example":{"data":{"id":"7688869399273065237","title":"Parafusadeira e furadeira 48 vol","creator":{"id":"9993000000000000007","handle":"@criador_mock_0013"},"startedAt":"2026-09-23T23:01:23.000Z","endedAt":"2026-09-29T23:09:13.000Z","durationSeconds":518870,"productCount":223,"viewers":3868783,"revenue":867470.15,"gpm":224.22,"top3ProductIds":[],"recordType":"SHORT"},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições (rate_limited) ou cota de buscas novas por hora da chave e da conta (miss_quota_exceeded). Consultas já em cache não contam na cota. Veja o cabeçalho Retry-After. Nada é cobrado.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limite":{"summary":"limite","value":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"cota de buscas novas":{"summary":"cota de buscas novas","value":{"error":"miss_quota_exceeded","message":"O limite de buscas novas por hora da sua conta ou chave foi atingido (consultas já em cache não contam). Tente de novo em 19 min, conforme o cabeçalho Retry-After.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Serviço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"indisponível":{"summary":"indisponível","value":{"error":"upstream_unavailable","message":"A busca de dados ao vivo está indisponível no momento. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"orçamento":{"summary":"orçamento","value":{"error":"upstream_budget_exceeded","message":"O orçamento de busca ao vivo acabou por agora. Tente novamente mais tarde.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"desligada":{"summary":"desligada","value":{"error":"upstream_disabled","message":"A busca de dados ao vivo está desligada.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/brecha":{"get":{"operationId":"listBrecha","tags":["Brecha"],"x-notes":["Cada página tem 10 itens e custa 0,10 crédito. Não existe pageSize: enviá-lo devolve 400. A página vai de 1 a 50.","Página vazia ou além do fim também custa 0,10 crédito, como em qualquer lista. Erro de validação (400) não consome crédito.","Só entram produtos que o rodízio de vídeos já mediu (a cabeça do catálogo por faturamento, revisitada a cada poucos dias). Produto sem medição não aparece, e total pode ser pequeno.","Por padrão a lista traz os estágios open e tight. closed só aparece quando pedido em stage. summary.stageTotals conta o recorte completo, antes do filtro de estágio.","minCommission é percentual (15 é 15%), padrão 10; 0 desliga o piso. minRevenue30d é o faturamento mínimo em 30 dias na moeda do mercado, padrão 10000.","commission e as frações newcomer* são frações (0.15 é 15%). meta.dataUpTo é o dia mais recente dos dados.","A lista de campos pode ganhar itens novos sem aviso: não trate campo desconhecido como erro."],"summary":"Produtos com espaço para criador novato","description":"Lista os produtos com demanda provada e espaço para criador novato (a Brecha), com o estágio de cada um (open, tight ou closed), o aproveitamento do novato e a comissão estimada que os criadores dividiram.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"description":"Mercado. Padrão BR.","schema":{"type":"string","enum":["BR"]}},{"name":"categoryL1Id","in":"query","required":false,"description":"Id da categoria de nível 1.","schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"name":"minCommission","in":"query","required":false,"description":"Comissão mínima em percentual (15 é 15%). Padrão 10; 0 desliga o piso. Valores entre 0 e 1 são recusados (escreva 15, não 0.15).","schema":{"type":"number","minimum":0,"maximum":100},"example":15},{"name":"minRevenue30d","in":"query","required":false,"description":"Faturamento mínimo em 30 dias, na moeda do mercado (inteiro). Padrão 10000.","schema":{"type":"integer","minimum":0},"example":20000},{"name":"stage","in":"query","required":false,"description":"Estágios, separados por vírgula (OU entre eles): open, tight, closed. Padrão open,tight.","schema":{"type":"string","example":"open,tight"},"example":"open"},{"name":"sortBy","in":"query","required":false,"description":"Ordenação decrescente, com nulos no fim. Padrão leverage.","schema":{"type":"string","enum":["leverage","revenue1d","revenue7d","commission"]},"example":"leverage"},{"name":"page","in":"query","required":false,"description":"Página, de 1 a 50. Cada página tem 10 itens.","schema":{"type":"integer","minimum":1,"maximum":50},"example":1}],"responses":{"200":{"description":"Página da Brecha.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrechaPage"},"example":{"data":[{"id":"1731916815699052495","name":"Produto de exemplo A","coverUrl":"https://exemplo.invalid/capas/1731916815699052495.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052495","categoryL1":{"id":"600001","name":"Beleza"},"revenue1d":20000,"revenue7d":120000,"revenue30d":480000,"sales7d":2400,"sales30d":9600,"commission":0.15,"creatorRevenue30d":408000,"capturedCommission30d":61200,"acceleration":1.25,"state":"accelerating","rank":12,"stage":"open","newcomerLeverage":1.3,"newcomerVideoShare":0.4,"newcomerRevenueShare":0.52,"newcomerVideosMeasured":100},{"id":"1731916815699052496","name":"Produto de exemplo B","coverUrl":"https://exemplo.invalid/capas/1731916815699052496.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052496","categoryL1":{"id":"600010","name":"Casa e cozinha"},"revenue1d":5250,"revenue7d":31500,"revenue30d":126000,"sales7d":630,"sales30d":2520,"commission":0.2,"creatorRevenue30d":107100,"capturedCommission30d":21420,"acceleration":1.25,"state":"accelerating","rank":47,"stage":"tight","newcomerLeverage":0.7,"newcomerVideoShare":0.5,"newcomerRevenueShare":0.35,"newcomerVideosMeasured":64}],"pagination":{"page":1,"pageSize":10,"total":33,"totalPages":4},"summary":{"stageTotals":{"open":21,"tight":12,"closed":4}},"meta":{"dataUpTo":"2026-10-01","currency":"BRL"}}}}},"400":{"description":"Parâmetro inválido ou desconhecido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Créditos insuficientes. Traz required e available, em créditos.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Créditos insuficientes.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Limite de requisições excedido. Veja o cabeçalho Retry-After.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/v1/account/usage":{"get":{"operationId":"getUsage","tags":["Conta"],"x-notes":["Saldo e lançamentos em créditos decimais. O delta de um débito é negativo.","Mostra só o dono da chave usada na requisição."],"summary":"Saldo e últimos usos","description":"Saldo de créditos da conta dona da chave e os últimos lançamentos do livro-caixa: compras, débitos e estornos.","x-credit-cost":"0","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Saldo em créditos e lançamentos recentes.","headers":{"x-credits-cost":{"description":"Créditos cobrados por esta resposta, sempre com duas casas (ex.: 0.10).","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"Saldo restante em créditos, sempre com duas casas (ex.: 4.90).","schema":{"type":"string"},"example":"5.00"},"x-request-id":{"description":"Identificador da requisição, gerado pela Sendyx. Informe-o ao falar com o suporte.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUsageResponse"},"example":{"data":{"balance":5,"recent":[{"createdAt":"2026-10-02T10:00:00.000Z","kind":"debit","delta":-0.1,"balanceAfter":4.9,"route":"GET /v1/products"},{"createdAt":"2026-10-02T09:30:00.000Z","kind":"refund","delta":0.1,"balanceAfter":5,"route":"GET /v1/products/{id}"}]},"meta":{"dataUpTo":null,"currency":null}}}}},"401":{"description":"Chave ausente ou inválida.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticação esperado.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"chave inválida":{"summary":"chave inválida","value":{"error":"invalid_credentials","message":"Chave de API inválida.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"sem chave":{"summary":"sem chave","value":{"error":"missing_credentials","message":"Envie a chave no cabeçalho Authorization: Bearer <chave>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"429":{"description":"Limite de requisições excedido. Veja o cabeçalho Retry-After.","headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Muitas requisições. Tente novamente em instantes.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/health/live":{"get":{"operationId":"healthLive","summary":"Liveness","security":[],"responses":{"200":{"description":"O processo está de pé."}}}},"/docs":{"get":{"operationId":"docs","summary":"Referência em HTML","security":[],"responses":{"200":{"description":"Página HTML."}}}},"/openapi.json":{"get":{"operationId":"openapi","summary":"Este contrato","security":[],"responses":{"200":{"description":"Documento OpenAPI."}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Chave da API no formato sdx_live_..."}},"schemas":{"Error":{"type":"object","required":["error","message","requestId"],"properties":{"error":{"type":"string","enum":["missing_credentials","invalid_credentials","insufficient_credits","rate_limited","validation_error","not_found","internal_error","upstream_disabled","upstream_budget_exceeded","upstream_unavailable","contacts_daily_limit","miss_quota_exceeded","daily_spend_limit_exceeded","terms_not_accepted"]},"message":{"type":"string"},"requestId":{"type":"string"}}},"InsufficientCreditsError":{"type":"object","required":["error","message","requestId","required","available"],"properties":{"error":{"type":"string","enum":["insufficient_credits"]},"message":{"type":"string"},"requestId":{"type":"string"},"required":{"type":"number","description":"Créditos que a requisição exige."},"available":{"type":"number","description":"Créditos disponíveis."}}},"Meta":{"type":"object","properties":{"dataUpTo":{"type":"string","nullable":true,"description":"Dia mais recente dos dados (yyyy-MM-dd)."},"currency":{"type":"string","enum":["BRL","USD"]}}},"Product":{"type":"object","properties":{"id":{"type":"string","description":"Id do produto no TikTok Shop. Use em GET /v1/products/{id}."},"name":{"type":"string","description":"Nome do produto."},"coverUrl":{"type":"string","nullable":true,"description":"URL da capa."},"productUrl":{"type":"string","description":"Página do produto no TikTok Shop."},"categoryL1":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Categoria de nível 1 (id e nome)."},"categoryL2":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Categoria de nível 2, quando existe."},"categoryL3":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Categoria de nível 3, quando existe."},"shopName":{"type":"string","nullable":true,"description":"Nome da loja."},"reviewCount":{"type":"integer","nullable":true,"description":"Quantidade de avaliações. Só quando o detalhe do produto já foi coletado."},"minPrice":{"type":"integer","nullable":true,"description":"Menor preço de variação, em centavos. Só quando o detalhe do produto já foi coletado."},"maxPrice":{"type":"integer","nullable":true,"description":"Maior preço de variação, em centavos. Só quando o detalhe do produto já foi coletado."},"commission":{"type":"number","nullable":true,"description":"Fração: 0.1 é 10%."},"revenue":{"type":"number","nullable":true,"description":"Faturamento na janela pedida, na moeda do mercado."},"sales":{"type":"integer","nullable":true,"description":"Unidades vendidas na janela pedida."},"revenue30d":{"type":"number","nullable":true,"description":"Faturamento dos últimos 30 dias, na moeda do mercado."},"sales30d":{"type":"integer","nullable":true,"description":"Unidades vendidas nos últimos 30 dias."},"sales7d":{"type":"integer","nullable":true,"description":"Unidades vendidas nos últimos 7 dias."},"revenuePerCreator":{"type":"number","nullable":true,"description":"Faturamento de 30 dias dividido pelos criadores medidos. Só existe quando a contagem de criadores foi medida; senão null."},"acceleration":{"type":"number","nullable":true,"description":"Ritmo de ontem dividido pela média diária de 30 dias. Acima de 1 é aceleração."},"trend":{"type":"array","items":{"type":"number"},"description":"Vendas por dia para desenhar uma curva, do dia mais antigo ao mais recente."},"state":{"type":"string","nullable":true,"enum":["exploding","accelerating","cooling","stable","idle"],"description":"Momento do produto: exploding, accelerating, cooling, stable ou idle."},"launchDate":{"type":"string","nullable":true,"description":"Data de lançamento no TikTok Shop (yyyy-MM-dd), quando medida."},"rank":{"type":"integer","nullable":true,"description":"Posição no catálogo por vendas de 7 dias."},"prevRank":{"type":"integer","nullable":true,"description":"Posição no ciclo anterior."},"channel":{"type":"object","properties":{"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"creatorsMeasured":{"type":"integer","nullable":true}},"description":"Faturamento por canal (vídeo e live) e criadores medidos."}}},"ProductDetail":{"type":"object","properties":{"id":{"type":"string","description":"Id do produto no TikTok Shop. Use em GET /v1/products/{id}."},"name":{"type":"string","description":"Nome do produto."},"coverUrl":{"type":"string","nullable":true,"description":"URL da capa."},"productUrl":{"type":"string","description":"Página do produto no TikTok Shop."},"categoryL1":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Categoria de nível 1 (id e nome)."},"categoryL2":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Categoria de nível 2, quando existe."},"categoryL3":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Categoria de nível 3, quando existe."},"shopName":{"type":"string","nullable":true,"description":"Nome da loja."},"reviewCount":{"type":"integer","nullable":true,"description":"Quantidade de avaliações. Só quando o detalhe do produto já foi coletado."},"minPrice":{"type":"integer","nullable":true,"description":"Menor preço de variação, em centavos. Só quando o detalhe do produto já foi coletado."},"maxPrice":{"type":"integer","nullable":true,"description":"Maior preço de variação, em centavos. Só quando o detalhe do produto já foi coletado."},"commission":{"type":"number","nullable":true,"description":"Fração: 0.1 é 10%."},"revenue":{"type":"number","nullable":true,"description":"Faturamento na janela pedida, na moeda do mercado."},"sales":{"type":"integer","nullable":true,"description":"Unidades vendidas na janela pedida."},"revenue30d":{"type":"number","nullable":true,"description":"Faturamento dos últimos 30 dias, na moeda do mercado."},"sales30d":{"type":"integer","nullable":true,"description":"Unidades vendidas nos últimos 30 dias."},"sales7d":{"type":"integer","nullable":true,"description":"Unidades vendidas nos últimos 7 dias."},"revenuePerCreator":{"type":"number","nullable":true,"description":"Faturamento de 30 dias dividido pelos criadores medidos. Só existe quando a contagem de criadores foi medida; senão null."},"acceleration":{"type":"number","nullable":true,"description":"Ritmo de ontem dividido pela média diária de 30 dias. Acima de 1 é aceleração."},"trend":{"type":"array","items":{"type":"number"},"description":"Vendas por dia para desenhar uma curva, do dia mais antigo ao mais recente."},"state":{"type":"string","nullable":true,"enum":["exploding","accelerating","cooling","stable","idle"],"description":"Momento do produto: exploding, accelerating, cooling, stable ou idle."},"launchDate":{"type":"string","nullable":true,"description":"Data de lançamento no TikTok Shop (yyyy-MM-dd), quando medida."},"rank":{"type":"integer","nullable":true,"description":"Posição no catálogo por vendas de 7 dias."},"prevRank":{"type":"integer","nullable":true,"description":"Posição no ciclo anterior."},"channel":{"type":"object","properties":{"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"creatorsMeasured":{"type":"integer","nullable":true}},"description":"Faturamento por canal (vídeo e live) e criadores medidos."},"revenue7d":{"type":"number","nullable":true,"description":"Faturamento dos últimos 7 dias."},"revenue1d":{"type":"number","nullable":true,"description":"Faturamento de ontem."},"saturation":{"type":"number","nullable":true,"description":"Criadores a cada 10.000 de faturamento em 30 dias. Só existe quando a contagem de criadores foi medida; senão null."}}},"ProductPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer","enum":[10]},"total":{"type":"integer"},"totalPages":{"type":"integer"}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"BrechaItem":{"type":"object","properties":{"id":{"type":"string","description":"Id do produto no TikTok Shop. Use em GET /v1/products/{id}."},"name":{"type":"string","description":"Nome do produto."},"coverUrl":{"type":"string","nullable":true,"description":"URL da capa."},"productUrl":{"type":"string","description":"Página do produto no TikTok Shop."},"categoryL1":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Categoria de nível 1 (id e nome)."},"revenue1d":{"type":"number","nullable":true,"description":"Faturamento de ontem, na moeda do mercado."},"revenue7d":{"type":"number","nullable":true,"description":"Faturamento dos últimos 7 dias."},"revenue30d":{"type":"number","nullable":true,"description":"Faturamento dos últimos 30 dias."},"sales7d":{"type":"integer","nullable":true,"description":"Unidades vendidas nos últimos 7 dias."},"sales30d":{"type":"integer","nullable":true,"description":"Unidades vendidas nos últimos 30 dias."},"commission":{"type":"number","nullable":true,"description":"Comissão de afiliado, em fração (0.15 é 15%)."},"creatorRevenue30d":{"type":"number","nullable":true,"description":"Faturamento de 30 dias que passou por criador (vídeo mais live). O restante vem de busca, anúncio e tráfego da própria loja."},"capturedCommission30d":{"type":"number","nullable":true,"description":"Estimativa da comissão que os criadores dividiram em 30 dias: creatorRevenue30d vezes commission. Null quando o canal não foi medido."},"acceleration":{"type":"number","nullable":true,"description":"Ritmo de ontem dividido pela média diária de 30 dias. Acima de 1 é aceleração."},"state":{"type":"string","nullable":true,"enum":["exploding","accelerating","cooling","stable","idle"],"description":"Momento do produto: exploding, accelerating, cooling, stable ou idle."},"rank":{"type":"integer","nullable":true,"description":"Posição no catálogo por vendas de 7 dias."},"stage":{"type":"string","enum":["open","tight","closed"],"description":"Espaço para criador novato: open (o novato leva ao menos a fatia que produz), tight (leva entre metade e a fatia que produz) ou closed (leva menos da metade)."},"newcomerLeverage":{"type":"number","nullable":true,"description":"Fatia do faturamento dos vídeos que vai para criadores novatos dividida pela fatia dos vídeos que eles gravam. 1.0 é a fronteira: acima, o novato rende mais que a média do produto."},"newcomerVideoShare":{"type":"number","nullable":true,"description":"Fração dos vídeos medidos feitos por criadores com menos de 12 meses de TikTok."},"newcomerRevenueShare":{"type":"number","nullable":true,"description":"Fração do faturamento desses vídeos que vai para criadores novatos."},"newcomerVideosMeasured":{"type":"integer","nullable":true,"description":"Quantos vídeos entraram na conta (mínimo 10)."}}},"BrechaPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BrechaItem"}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer","enum":[10]},"total":{"type":"integer"},"totalPages":{"type":"integer"}}},"summary":{"type":"object","properties":{"stageTotals":{"type":"object","description":"Produtos por estágio no recorte, antes do filtro de estágio.","properties":{"open":{"type":"integer"},"tight":{"type":"integer"},"closed":{"type":"integer"}}}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"ProductDetailResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProductDetail"},"meta":{"$ref":"#/components/schemas/Meta"}}},"RankingPagination":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer","enum":[10]},"hasMore":{"type":"boolean","description":"Pode haver mais itens na próxima página."}}},"RankingMeta":{"type":"object","properties":{"currency":{"type":"string","enum":["BRL","USD"]},"window":{"type":"integer","description":"Janela usada, em dias."},"fetchedAt":{"type":"string","format":"date-time","description":"Instante em que o dado foi obtido."}}},"VideoRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id do vídeo."},"title":{"type":"string","nullable":true},"creator":{"type":"object","properties":{"id":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"O @ público do perfil, com o @."}}},"revenue":{"type":"number","nullable":true,"description":"Faturamento do vídeo na janela, na moeda do mercado."},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Número bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem."},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"shares":{"type":"integer","nullable":true},"comments":{"type":"integer","nullable":true},"publishedAt":{"type":"string","nullable":true,"description":"Texto como a fonte manda (yyyy/MM/dd HH:mm:ss). Fuso não confirmado."},"creatorDebut":{"type":"string","nullable":true,"description":"Data de estreia do criador (yyyy-MM-dd)."},"isAd":{"type":"boolean","nullable":true,"description":"Se o vídeo é anúncio."},"isAiGenerated":{"type":"boolean","nullable":true,"description":"Se o vídeo foi gerado por IA."},"adsRoas":{"type":"number","nullable":true},"adRevenueRatio":{"type":"number","nullable":true,"description":"Razão bruta, unidade não confirmada."},"adViewRatio":{"type":"number","nullable":true,"description":"Razão bruta, unidade não confirmada (já apareceu acima de 1)."}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CreatorRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id do criador."},"nickname":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"O @ público do perfil, com o @."},"followers":{"type":"integer","nullable":true},"contentViews":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true,"description":"Faturamento do criador com o produto na janela."},"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Número bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem."},"categoryNames":{"type":"array","items":{"type":"string"},"description":"Vem vazio no ranking por produto."},"categoryIds":{"type":"array","items":{"type":"string"}},"tertiaryCategoryNames":{"type":"array","items":{"type":"string"}},"tertiaryCategoryIds":{"type":"array","items":{"type":"string"}}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"VideoDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"creator":{"type":"object","properties":{"id":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"O @ público do perfil, com o @."}}},"productCount":{"type":"integer","nullable":true,"description":"Quantos produtos o vídeo divulga."},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"shares":{"type":"integer","nullable":true},"comments":{"type":"integer","nullable":true},"gpm":{"type":"number","nullable":true,"description":"Faturamento a cada mil visualizações."},"adsViews":{"type":"integer","nullable":true},"adsRoas":{"type":"number","nullable":true},"adsPeriod":{"type":"integer","nullable":true},"adCpa":{"type":"number","nullable":true},"adViewRatio":{"type":"number","nullable":true,"description":"Razão bruta, unidade não confirmada."},"duration":{"type":"number","nullable":true,"description":"Duração do vídeo. Unidade não confirmada (provavelmente segundos)."},"isAd":{"type":"boolean","nullable":true},"isAiGenerated":{"type":"boolean","nullable":true},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CreatorDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"nickname":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"O @ público do perfil, com o @."},"region":{"type":"string","nullable":true},"status":{"type":"string","nullable":true},"followers":{"type":"integer","nullable":true},"newFollowers":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"unitPrice":{"type":"number","nullable":true},"videoViews":{"type":"integer","nullable":true},"liveViews":{"type":"integer","nullable":true},"videoGpm":{"type":"number","nullable":true},"liveGpm":{"type":"number","nullable":true},"videoCount":{"type":"integer","nullable":true},"liveCount":{"type":"integer","nullable":true},"shopCount":{"type":"integer","nullable":true},"productCount":{"type":"integer","nullable":true},"top3ProductIds":{"type":"array","items":{"type":"string"}},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CreatorContactsResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"creator":{"type":"object","properties":{"id":{"type":"string"},"nickname":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"O @ público do perfil, com o @."},"region":{"type":"string","nullable":true},"status":{"type":"string","nullable":true},"followers":{"type":"integer","nullable":true},"newFollowers":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"unitPrice":{"type":"number","nullable":true},"videoViews":{"type":"integer","nullable":true},"liveViews":{"type":"integer","nullable":true},"videoGpm":{"type":"number","nullable":true},"liveGpm":{"type":"number","nullable":true},"videoCount":{"type":"integer","nullable":true},"liveCount":{"type":"integer","nullable":true},"shopCount":{"type":"integer","nullable":true},"productCount":{"type":"integer","nullable":true},"top3ProductIds":{"type":"array","items":{"type":"string"}},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada."}},"description":"Só aparece quando o criador ainda não tinha sido buscado nas últimas 24 horas."},"contacts":{"type":"object","properties":{"email":{"type":"string","nullable":true},"tiktok":{"type":"string","nullable":true},"whatsapp":{"type":"string","nullable":true},"line":{"type":"string","nullable":true},"facebook":{"type":"string","nullable":true},"instagram":{"type":"string","nullable":true},"zalo":{"type":"string","nullable":true}},"description":"Dado pessoal. Veja as observações desta rota."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CategoryRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"rank":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Número bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem."},"top3ShopRevenueRatio":{"type":"number","nullable":true,"description":"Razão bruta, unidade não confirmada."},"averageRevenue":{"type":"number","nullable":true}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CategoryDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"shopCount":{"type":"integer","nullable":true},"activeProductCount":{"type":"integer","nullable":true},"liveRevenue":{"type":"number","nullable":true},"videoRevenue":{"type":"number","nullable":true},"affiliateRevenue":{"type":"number","nullable":true},"selfOperatedRevenue":{"type":"number","nullable":true},"shoppingMallRevenue":{"type":"number","nullable":true},"averageShopRevenue":{"type":"number","nullable":true},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Número bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem."},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"ShopRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"rank":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Número bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem."},"unitPrice":{"type":"number","nullable":true},"shopType":{"type":"string","nullable":true},"onSaleProductCount":{"type":"integer","nullable":true},"affiliateRevenue":{"type":"number","nullable":true},"selfPromotionRevenue":{"type":"number","nullable":true},"shoppingMallRevenue":{"type":"number","nullable":true},"categoryNames":{"type":"array","items":{"type":"string"}},"categoryIds":{"type":"array","items":{"type":"string"}}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"ShopDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sellerType":{"type":"string","nullable":true},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"unitPrice":{"type":"number","nullable":true},"shoppingMallRevenue":{"type":"number","nullable":true},"selfAccountRevenue":{"type":"number","nullable":true},"affiliateRevenue":{"type":"number","nullable":true},"creatorCount":{"type":"integer","nullable":true},"productCount":{"type":"integer","nullable":true},"videoCount":{"type":"integer","nullable":true},"liveCount":{"type":"integer","nullable":true},"top3ProductIds":{"type":"array","items":{"type":"string"}},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend é uma série diária de faturamento SEM datas: a fonte não rotula os pontos e a ordem cronológica não está provada (a janela de 30 dias trouxe 30 pontos). Use como curva, não como série datada."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"LiveRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","nullable":true},"creator":{"type":"object","properties":{"id":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"O @ público do perfil, com o @."}}},"startedAt":{"type":"string","format":"date-time","nullable":true},"endedAt":{"type":"string","format":"date-time","nullable":true},"durationSeconds":{"type":"integer","nullable":true,"description":"Duração em segundos (confere com fim menos início)."},"revenue":{"type":"number","nullable":true},"unitPrice":{"type":"number","nullable":true},"views":{"type":"integer","nullable":true},"recordType":{"type":"string","nullable":true,"description":"Valor da fonte (por exemplo SHORT, SCREENSHOT). Significado não confirmado."}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"LiveDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","nullable":true},"creator":{"type":"object","properties":{"id":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"O @ público do perfil, com o @."}}},"startedAt":{"type":"string","format":"date-time","nullable":true},"endedAt":{"type":"string","format":"date-time","nullable":true},"durationSeconds":{"type":"integer","nullable":true,"description":"Duração em segundos."},"productCount":{"type":"integer","nullable":true},"viewers":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"gpm":{"type":"number","nullable":true},"top3ProductIds":{"type":"array","items":{"type":"string"}},"recordType":{"type":"string","nullable":true,"description":"Valor da fonte. Significado não confirmado."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"ProductAnalysisResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"productId":{"type":"string"},"region":{"type":"string","nullable":true},"language":{"type":"string","nullable":true},"highlights":{"type":"array","items":{"type":"object","properties":{"keyword":{"type":"string","nullable":true},"text":{"type":"string","nullable":true}}},"description":"Pontos fortes do produto."},"attributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","nullable":true},"value":{"type":"string","nullable":true}}},"description":"Atributos do produto."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"RankedProductRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id do produto no TikTok Shop."},"name":{"type":"string","nullable":true},"coverUrl":{"type":"string","nullable":true,"description":"URL da capa, quando a fonte a informa."},"shop":{"type":"object","properties":{"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true}}},"revenue":{"type":"number","nullable":true,"description":"Faturamento do produto na janela, na moeda do mercado."},"sales":{"type":"integer","nullable":true,"description":"Unidades vendidas na janela."},"unitPrice":{"type":"number","nullable":true,"description":"Faturamento dividido pelas vendas, na moeda do mercado. Não é preço de etiqueta."},"commission":{"type":"number","nullable":true,"description":"Fração (0.11 é 11%). Unidade inferida, não confirmada."},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Número bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem."},"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"showcaseRevenue":{"type":"number","nullable":true},"launchDate":{"type":"string","nullable":true,"description":"Data de lançamento no TikTok Shop (yyyy-MM-dd)."},"skuCount":{"type":"integer","nullable":true,"description":"Quantidade de SKUs, quando a fonte informa."}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"ProductTrendResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"productId":{"type":"string"},"series":{"type":"array","description":"As datas de series são DERIVADAS, não vêm da fonte: o último ponto é o dia anterior à data UTC de meta.fetchedAt e cada ponto anterior recua um dia. A regra foi conferida contra a série diária real (63% das posições bateram a 0,5%), mas a fonte pode revisar valores já publicados, e na virada do dia em UTC o rótulo pode se deslocar um dia (premissa não provada nessas horas). O número de pontos depende da fonte e não segue necessariamente a janela. Produto sem série devolve series vazio, sem erro.","items":{"type":"object","properties":{"date":{"type":"string","description":"Dia derivado (yyyy-MM-dd, UTC)."},"revenue":{"type":"number","description":"Faturamento do dia, na moeda do mercado."}}}}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CategoryNode":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"level":{"type":"integer","enum":[1,2,3]},"parentId":{"type":"string","nullable":true},"productCount":{"type":"integer"},"children":{"type":"array","items":{"$ref":"#/components/schemas/CategoryNode"}}}},"CategoryTreeResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"nodes":{"type":"array","items":{"$ref":"#/components/schemas/CategoryNode"}},"catalogTotal":{"type":"integer"}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"AccountUsageResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"balance":{"type":"number","description":"Saldo em créditos."},"recent":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"kind":{"type":"string","enum":["purchase","debit","refund","reversal","grant"]},"delta":{"type":"number","description":"Variação em créditos (negativa no débito)."},"balanceAfter":{"type":"number"},"route":{"type":"string","nullable":true}}}}}},"meta":{"type":"object","properties":{"dataUpTo":{"type":"string","nullable":true},"currency":{"type":"string","nullable":true}}}}}}}}