Sendyx Docs
Ir para o consoleConsole

Primeiros passos

Dados do catálogo de produtos do TikTok Shop em JSON, cobrados por crédito. Esta é a referência da versão 1.

URL base

https://developers.sendyx.com/v1

O contrato completo em formato OpenAPI está em /openapi.json.

Autenticação

Crie uma chave no console da Sendyx e envie no cabeçalho Authorization: Bearer sdx_live_.... Guarde a chave em uma variável de ambiente e nunca a coloque em código, em repositório ou em navegador. Ela é mostrada uma única vez.

Créditos

Cada requisição de lista ou de detalhe de qualquer entidade consome 0,10 crédito. Portanto 1 crédito equivale a 10 requisições. São gratuitos a árvore de categorias (GET /v1/categories) e o saldo (GET /v1/account/usage); as demais rotas de categorias, como GET /v1/categories/ranking, consomem o mesmo que as outras. O custo de cada rota aparece no topo da página dela.

Os contatos de criador estão indisponíveis por enquanto. A rota aparece no contrato, mas responde 503 sem cobrar enquanto o recurso não é liberado.

Se o serviço de dados estiver indisponível, a resposta é 503 e nenhum crédito é cobrado.

É preciso comprar créditos para usar a API. Uma conta nova começa com saldo zero, sem crédito de cortesia, e as rotas pagas respondem 402 até a primeira compra, feita no console da Sendyx. Créditos comprados não vencem.

O custo é debitado antes de a resposta ser servida. Requisição com parâmetro inválido (400) não cobra nada, e se ela terminar em erro depois da cobrança o crédito é devolvido na hora. Sem saldo suficiente a resposta é 402.

Cabeçalhos da resposta

CabeçalhoSignificado
x-credits-costCréditos cobrados por esta resposta, sempre com duas casas decimais (por exemplo 0.10). Vem nas respostas 200, no 402 (com 0.00) e nos erros que acontecem depois da cobrança e foram estornados, como 404 e 503 (com 0.00). Não vêm no 401, no 429 nem nos 400 de parâmetro, que são recusados antes da cobrança.
x-credits-remainingSaldo restante em créditos, sempre com duas casas decimais (por exemplo 4.90). Nas mesmas respostas do cabeçalho acima; no 402 é o saldo atual.
x-request-idIdentificador da requisição. Informe-o ao falar com o suporte.
Retry-AfterPresente no 429 e no 503: segundos até poder tentar de novo.

As rotas /v1 aceitam só GET. Um HEAD recebe 405 com Allow: GET, sem consulta e sem cobrança.

Nos cabeçalhos os créditos são texto com duas casas. No corpo JSON os números são numéricos e o JSON não preserva zeros à direita: 0.10 no cabeçalho vira 0.1 no corpo.

Idade dos dados

As rotas de vídeos, criadores, categorias (ranking e detalhe), lojas, lives e análise de produto trazem meta.fetchedAt, o instante (ISO 8601) em que o dado foi obtido. As rotas de produtos e a árvore de categorias trazem meta.dataUpTo, o dia mais recente dos dados, no formato yyyy-MM-dd; a fonte tem um dia de atraso. Se o serviço de dados estiver indisponível, a resposta é 503 e nada é cobrado.

Formato de erro

Todo erro tem o formato { "error", "message", "requestId" }. O campo error é estável e pode ser usado em código.

CódigoerrorQuando
401missing_credentialsCabeçalho Authorization ausente.
401invalid_credentialsChave inválida ou revogada.
402insufficient_creditsSaldo menor que o custo. Traz required e available, em créditos.
429rate_limitedLimite de requisições excedido. Veja o cabeçalho Retry-After.
400validation_errorParâmetro inválido, desconhecido ou fora dos limites.
404not_foundRecurso inexistente.
500internal_errorFalha nossa. O crédito é devolvido.
503upstream_disabledO serviço de dados está desligado. Nada é cobrado.
503upstream_budget_exceededO limite de consultas do serviço de dados acabou por agora. Tente mais tarde. Nada é cobrado.
503upstream_unavailableO serviço de dados falhou, está ocupado ou a fila de buscas ao vivo está cheia. Tente de novo depois do tempo de Retry-After. Nada é cobrado.
429contacts_daily_limitLimite diário de consultas de contato da conta atingido (soma de todas as chaves). Veja Retry-After. Nada é cobrado.
429miss_quota_exceededCota de buscas novas por hora atingida, por chave e por conta (consultas já em cache não contam). Veja Retry-After. Nada é cobrado.
429daily_spend_limit_exceededLimite diário de gasto da conta atingido (soma de todas as chaves; renova à meia-noite UTC). Veja Retry-After. Nada é cobrado.
403terms_not_acceptedOs termos de uso da API não foram aceitos pelo dono da chave. Aceite no console. Nada é cobrado.

Limites de taxa

Até 60 requisições por minuto e 10000 por dia, por chave. Há também um limite de 300 requisições por minuto por endereço IP, que vale inclusive para tentativas com chave errada. Ao exceder, a resposta é 429 com Retry-After.

Paginação e atualidade dos dados

As listas têm página de tamanho fixo em 10, com page de 1 a 50. A resposta traz pagination com page, pageSize, total e totalPages. O total é a contagem real de resultados, e totalPages nunca passa de 50, que é a última página que a API entrega (pedir a 51 é 400). Para chegar ao que está além dos 500 primeiros, refine por filtro e ordenação.

Toda resposta de dados traz meta.dataUpTo, o dia mais recente dos dados (a fonte tem um dia de atraso), e meta.currency, a moeda dos valores.

Sua primeira chamada

Consulte seu saldo. É gratuito:

Dados de exemplo (identificadores e contatos são falsos): o formato é o real, para você montar mocks e testes.
curl 'https://developers.sendyx.com/v1/account/usage' \
  -H "Authorization: Bearer $SENDYX_API_KEY"
const res = await fetch("https://developers.sendyx.com/v1/account/usage", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.SENDYX_API_KEY}` },
});

if (!res.ok) {
  const error = await res.json();
  throw new Error(`${res.status} ${error.error}: ${error.message}`);
}

console.log(
  "custo:", res.headers.get("x-credits-cost"),
  "saldo:", res.headers.get("x-credits-remaining"),
);
const body = await res.json();
console.log(body);
import os
import requests

response = requests.get(
    "https://developers.sendyx.com/v1/account/usage",
    headers={"Authorization": f"Bearer {os.environ['SENDYX_API_KEY']}"},
)
response.raise_for_status()

print(
    "custo:", response.headers.get("x-credits-cost"),
    "saldo:", response.headers.get("x-credits-remaining"),
)
print(response.json())

Produtos / Lista produtos do catálogo

Lista produtos do catálogo

GEThttps://developers.sendyx.com/v1/products

0,10 crédito por requisição

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.

Parâmetros

18
NomeTipoObrigatórioValores permitidosDescrição
regionstringNãoBRMercado. Padrão BR.
searchstringNãoaté 100 caracteresTrecho do nome do produto (até 100 caracteres).
categoryL1IdstringNãoformato ^\d{1,32}$Id da categoria de nível 1.
categoryL2IdstringNãoformato ^\d{1,32}$Id da categoria de nível 2.
categoryL3IdstringNãoformato ^\d{1,32}$Id da categoria de nível 3.
categoryL1IdsstringNãoAté 5 ids de nível 1 separados por vírgula (OU entre eles).
categoryL2IdsstringNãoAté 5 ids de nível 2 separados por vírgula.
categoryL3IdsstringNãoAté 5 ids de nível 3 separados por vírgula.
sortBystringNãorevenue, sales, revenue30d, sales30d, acceleration, revenuePerCreator, commissionOrdenação decrescente. Padrão revenue.
flagsstringNãoSinais, separados por vírgula (todos precisam valer).
statesstringNãoMomento do produto, separado por vírgula (OU entre eles): exploding, accelerating, stable, cooling, idle.
windowintegerNão1, 7, 30Janela das métricas de revenue e sales, em dias. Padrão 7.
minGmvintegerNãomínimo 0Faturamento mínimo em 30 dias, na moeda do mercado (inteiro).
maxGmvintegerNãomínimo 0Faturamento máximo em 30 dias, na moeda do mercado (inteiro).
minCommissionnumberNãomínimo 1; máximo 100Comissão mínima em percentual (20 = 20%).
launchedWithinDaysintegerNão1, 7, 30, 90Só produtos lançados nos últimos N dias.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

43
CampoTipoDescrição
dataarray de object
data[].idstringId do produto no TikTok Shop. Use em GET /v1/products/{id}.
data[].namestringNome do produto.
data[].coverUrlstring | nullURL da capa.
data[].productUrlstringPágina do produto no TikTok Shop.
data[].categoryL1object | nullCategoria de nível 1 (id e nome).
data[].categoryL1.idstring
data[].categoryL1.namestring
data[].categoryL2object | nullCategoria de nível 2, quando existe.
data[].categoryL2.idstring
data[].categoryL2.namestring
data[].categoryL3object | nullCategoria de nível 3, quando existe.
data[].categoryL3.idstring
data[].categoryL3.namestring
data[].shopNamestring | nullNome da loja.
data[].reviewCountinteger | nullQuantidade de avaliações. Só quando o detalhe do produto já foi coletado.
data[].minPriceinteger | nullMenor preço de variação, em centavos. Só quando o detalhe do produto já foi coletado.
data[].maxPriceinteger | nullMaior preço de variação, em centavos. Só quando o detalhe do produto já foi coletado.
data[].commissionnumber | nullFração: 0.1 é 10%.
data[].revenuenumber | nullFaturamento na janela pedida, na moeda do mercado.
data[].salesinteger | nullUnidades vendidas na janela pedida.
data[].revenue30dnumber | nullFaturamento dos últimos 30 dias, na moeda do mercado.
data[].sales30dinteger | nullUnidades vendidas nos últimos 30 dias.
data[].sales7dinteger | nullUnidades vendidas nos últimos 7 dias.
data[].revenuePerCreatornumber | nullFaturamento de 30 dias dividido pelos criadores medidos. Só existe quando a contagem de criadores foi medida; senão null.
data[].accelerationnumber | nullRitmo de ontem dividido pela média diária de 30 dias. Acima de 1 é aceleração.
data[].trendarray de numberVendas por dia para desenhar uma curva, do dia mais antigo ao mais recente.
data[].statestring | nullMomento do produto: exploding, accelerating, cooling, stable ou idle.
data[].launchDatestring | nullData de lançamento no TikTok Shop (yyyy-MM-dd), quando medida.
data[].rankinteger | nullPosição no catálogo por vendas de 7 dias.
data[].prevRankinteger | nullPosição no ciclo anterior.
data[].channelobjectFaturamento por canal (vídeo e live) e criadores medidos.
data[].channel.videoRevenuenumber | null
data[].channel.liveRevenuenumber | null
data[].channel.creatorsMeasuredinteger | null
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.totalinteger
pagination.totalPagesinteger
metaobject
meta.dataUpTostring | nullDia mais recente dos dados (yyyy-MM-dd).
meta.currencystring

Erros possíveis

4
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limitedLimite de requisições excedido. Veja o cabeçalho Retry-After.

Observações

  • 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.

Produtos / Detalhe de um produto

Detalhe de um produto

GEThttps://developers.sendyx.com/v1/products/{id}

0,10 crédito por requisição

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.

Parâmetros

2
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimId do produto (campo id de GET /v1/products).
regionstringNãoBRMercado. Padrão BR.

Campos da resposta

41
CampoTipoDescrição
dataobject
data.idstringId do produto no TikTok Shop. Use em GET /v1/products/{id}.
data.namestringNome do produto.
data.coverUrlstring | nullURL da capa.
data.productUrlstringPágina do produto no TikTok Shop.
data.categoryL1object | nullCategoria de nível 1 (id e nome).
data.categoryL1.idstring
data.categoryL1.namestring
data.categoryL2object | nullCategoria de nível 2, quando existe.
data.categoryL2.idstring
data.categoryL2.namestring
data.categoryL3object | nullCategoria de nível 3, quando existe.
data.categoryL3.idstring
data.categoryL3.namestring
data.shopNamestring | nullNome da loja.
data.reviewCountinteger | nullQuantidade de avaliações. Só quando o detalhe do produto já foi coletado.
data.minPriceinteger | nullMenor preço de variação, em centavos. Só quando o detalhe do produto já foi coletado.
data.maxPriceinteger | nullMaior preço de variação, em centavos. Só quando o detalhe do produto já foi coletado.
data.commissionnumber | nullFração: 0.1 é 10%.
data.revenuenumber | nullFaturamento na janela pedida, na moeda do mercado.
data.salesinteger | nullUnidades vendidas na janela pedida.
data.revenue30dnumber | nullFaturamento dos últimos 30 dias, na moeda do mercado.
data.sales30dinteger | nullUnidades vendidas nos últimos 30 dias.
data.sales7dinteger | nullUnidades vendidas nos últimos 7 dias.
data.revenuePerCreatornumber | nullFaturamento de 30 dias dividido pelos criadores medidos. Só existe quando a contagem de criadores foi medida; senão null.
data.accelerationnumber | nullRitmo de ontem dividido pela média diária de 30 dias. Acima de 1 é aceleração.
data.trendarray de numberVendas por dia para desenhar uma curva, do dia mais antigo ao mais recente.
data.statestring | nullMomento do produto: exploding, accelerating, cooling, stable ou idle.
data.launchDatestring | nullData de lançamento no TikTok Shop (yyyy-MM-dd), quando medida.
data.rankinteger | nullPosição no catálogo por vendas de 7 dias.
data.prevRankinteger | nullPosição no ciclo anterior.
data.channelobjectFaturamento por canal (vídeo e live) e criadores medidos.
data.channel.videoRevenuenumber | null
data.channel.liveRevenuenumber | null
data.channel.creatorsMeasuredinteger | null
data.revenue7dnumber | nullFaturamento dos últimos 7 dias.
data.revenue1dnumber | nullFaturamento de ontem.
data.saturationnumber | nullCriadores a cada 10.000 de faturamento em 30 dias. Só existe quando a contagem de criadores foi medida; senão null.
metaobject
meta.dataUpTostring | nullDia mais recente dos dados (yyyy-MM-dd).
meta.currencystring

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
404not_foundProduto não encontrado.
429rate_limitedLimite de requisições excedido. Veja o cabeçalho Retry-After.

Observações

  • 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.

Produtos / Análise de um produto

Análise de um produto

GEThttps://developers.sendyx.com/v1/products/{id}/analysis

0,10 crédito por requisição

Pontos fortes e atributos do produto, em português.

Parâmetros

3
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do produto (campo id de GET /v1/products).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.

Campos da resposta

14
CampoTipoDescrição
dataobject
data.productIdstring
data.regionstring | null
data.languagestring | null
data.highlightsarray de objectPontos fortes do produto.
data.highlights[].keywordstring | null
data.highlights[].textstring | null
data.attributesarray de objectAtributos do produto.
data.attributes[].keystring | null
data.attributes[].valuestring | null
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Produtos / Série diária de faturamento de um produto

Série diária de faturamento de um produto

GEThttps://developers.sendyx.com/v1/products/{id}/trend

0,10 crédito por requisição

Faturamento por dia do produto, com as datas derivadas. Use para desenhar a curva do produto.

Parâmetros

3
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do produto (campo id de GET /v1/products).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.

Campos da resposta

9
CampoTipoDescrição
dataobject
data.productIdstring
data.seriesarray de objectAs 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.
data.series[].datestringDia derivado (yyyy-MM-dd, UTC).
data.series[].revenuenumberFaturamento do dia, na moeda do mercado.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Produtos / Produtos de uma loja

Produtos de uma loja

GEThttps://developers.sendyx.com/v1/shops/{id}/products

0,10 crédito por requisição

Ranking dos produtos da loja por faturamento na janela.

Parâmetros

5
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id da loja (campo id de GET /v1/shops).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

25
CampoTipoDescrição
dataarray de object
data[].idstringId do produto no TikTok Shop.
data[].namestring | null
data[].coverUrlstring | nullURL da capa, quando a fonte a informa.
data[].shopobject
data[].shop.idstring | null
data[].shop.namestring | null
data[].revenuenumber | nullFaturamento do produto na janela, na moeda do mercado.
data[].salesinteger | nullUnidades vendidas na janela.
data[].unitPricenumber | nullFaturamento dividido pelas vendas, na moeda do mercado. Não é preço de etiqueta.
data[].commissionnumber | nullFração (0.11 é 11%). Unidade inferida, não confirmada.
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].videoRevenuenumber | null
data[].liveRevenuenumber | null
data[].showcaseRevenuenumber | null
data[].launchDatestring | nullData de lançamento no TikTok Shop (yyyy-MM-dd).
data[].skuCountinteger | nullQuantidade de SKUs, quando a fonte informa.
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Produtos / Produtos de um criador

Produtos de um criador

GEThttps://developers.sendyx.com/v1/creators/{id}/products

0,10 crédito por requisição

Ranking dos produtos que o criador divulgou e que venderam na janela.

Parâmetros

5
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do criador (campo id de GET /v1/creators).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

25
CampoTipoDescrição
dataarray de object
data[].idstringId do produto no TikTok Shop.
data[].namestring | null
data[].coverUrlstring | nullURL da capa, quando a fonte a informa.
data[].shopobject
data[].shop.idstring | null
data[].shop.namestring | null
data[].revenuenumber | nullFaturamento do produto na janela, na moeda do mercado.
data[].salesinteger | nullUnidades vendidas na janela.
data[].unitPricenumber | nullFaturamento dividido pelas vendas, na moeda do mercado. Não é preço de etiqueta.
data[].commissionnumber | nullFração (0.11 é 11%). Unidade inferida, não confirmada.
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].videoRevenuenumber | null
data[].liveRevenuenumber | null
data[].showcaseRevenuenumber | null
data[].launchDatestring | nullData de lançamento no TikTok Shop (yyyy-MM-dd).
data[].skuCountinteger | nullQuantidade de SKUs, quando a fonte informa.
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Produtos / Produtos de um vídeo

Produtos de um vídeo

GEThttps://developers.sendyx.com/v1/videos/{id}/products

0,10 crédito por requisição

Os produtos que o vídeo divulga e que venderam na janela.

Parâmetros

5
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do vídeo (campo id de GET /v1/videos).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

25
CampoTipoDescrição
dataarray de object
data[].idstringId do produto no TikTok Shop.
data[].namestring | null
data[].coverUrlstring | nullURL da capa, quando a fonte a informa.
data[].shopobject
data[].shop.idstring | null
data[].shop.namestring | null
data[].revenuenumber | nullFaturamento do produto na janela, na moeda do mercado.
data[].salesinteger | nullUnidades vendidas na janela.
data[].unitPricenumber | nullFaturamento dividido pelas vendas, na moeda do mercado. Não é preço de etiqueta.
data[].commissionnumber | nullFração (0.11 é 11%). Unidade inferida, não confirmada.
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].videoRevenuenumber | null
data[].liveRevenuenumber | null
data[].showcaseRevenuenumber | null
data[].launchDatestring | nullData de lançamento no TikTok Shop (yyyy-MM-dd).
data[].skuCountinteger | nullQuantidade de SKUs, quando a fonte informa.
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Produtos / Produtos de uma live

Produtos de uma live

GEThttps://developers.sendyx.com/v1/lives/{id}/products

0,10 crédito por requisição

Ranking dos produtos vendidos na live na janela.

Parâmetros

5
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id da live (campo id de GET /v1/lives).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

25
CampoTipoDescrição
dataarray de object
data[].idstringId do produto no TikTok Shop.
data[].namestring | null
data[].coverUrlstring | nullURL da capa, quando a fonte a informa.
data[].shopobject
data[].shop.idstring | null
data[].shop.namestring | null
data[].revenuenumber | nullFaturamento do produto na janela, na moeda do mercado.
data[].salesinteger | nullUnidades vendidas na janela.
data[].unitPricenumber | nullFaturamento dividido pelas vendas, na moeda do mercado. Não é preço de etiqueta.
data[].commissionnumber | nullFração (0.11 é 11%). Unidade inferida, não confirmada.
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].videoRevenuenumber | null
data[].liveRevenuenumber | null
data[].showcaseRevenuenumber | null
data[].launchDatestring | nullData de lançamento no TikTok Shop (yyyy-MM-dd).
data[].skuCountinteger | nullQuantidade de SKUs, quando a fonte informa.
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Vídeos / Vídeos que venderam um produto

Vídeos que venderam um produto

GEThttps://developers.sendyx.com/v1/products/{id}/videos

0,10 crédito por requisição

Ranking dos vídeos que venderam o produto na janela, com visualizações, curtidas e faturamento.

Parâmetros

5
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do produto (campo id de GET /v1/products).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

27
CampoTipoDescrição
dataarray de object
data[].idstringId do vídeo.
data[].titlestring | null
data[].creatorobject
data[].creator.idstring | null
data[].creator.handlestring | nullO @ público do perfil, com o @.
data[].revenuenumber | nullFaturamento do vídeo na janela, na moeda do mercado.
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].viewsinteger | null
data[].likesinteger | null
data[].sharesinteger | null
data[].commentsinteger | null
data[].publishedAtstring | nullTexto como a fonte manda (yyyy/MM/dd HH:mm:ss). Fuso não confirmado.
data[].creatorDebutstring | nullData de estreia do criador (yyyy-MM-dd).
data[].isAdboolean | nullSe o vídeo é anúncio.
data[].isAiGeneratedboolean | nullSe o vídeo foi gerado por IA.
data[].adsRoasnumber | null
data[].adRevenueRationumber | nullRazão bruta, unidade não confirmada.
data[].adViewRationumber | nullRazão bruta, unidade não confirmada (já apareceu acima de 1).
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Vídeos / Detalhe de um vídeo

Detalhe de um vídeo

GEThttps://developers.sendyx.com/v1/videos/{id}

0,10 crédito por requisição

Métricas de um vídeo: faturamento, vendas, visualizações, desempenho de anúncio e duração.

Parâmetros

3
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do vídeo.
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.

Campos da resposta

28
CampoTipoDescrição
dataobject
data.idstring
data.titlestring | null
data.regionstring | null
data.creatorobject
data.creator.idstring | null
data.creator.handlestring | nullO @ público do perfil, com o @.
data.productCountinteger | nullQuantos produtos o vídeo divulga.
data.revenuenumber | null
data.salesinteger | null
data.viewsinteger | null
data.likesinteger | null
data.sharesinteger | null
data.commentsinteger | null
data.gpmnumber | nullFaturamento a cada mil visualizações.
data.adsViewsinteger | null
data.adsRoasnumber | null
data.adsPeriodinteger | null
data.adCpanumber | null
data.adViewRationumber | nullRazão bruta, unidade não confirmada.
data.durationnumber | nullDuração do vídeo. Unidade não confirmada (provavelmente segundos).
data.isAdboolean | null
data.isAiGeneratedboolean | null
data.revenueTrendarray de numberrevenueTrend é 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.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Vídeos / Ranking geral de vídeos

Ranking geral de vídeos

GEThttps://developers.sendyx.com/v1/videos

0,10 crédito por requisição

Ranking GERAL dos vídeos do mercado por faturamento na janela. Não é o ranking de um produto nem de uma loja.

Parâmetros

4
NomeTipoObrigatórioValores permitidosDescrição
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

27
CampoTipoDescrição
dataarray de object
data[].idstringId do vídeo.
data[].titlestring | null
data[].creatorobject
data[].creator.idstring | null
data[].creator.handlestring | nullO @ público do perfil, com o @.
data[].revenuenumber | nullFaturamento do vídeo na janela, na moeda do mercado.
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].viewsinteger | null
data[].likesinteger | null
data[].sharesinteger | null
data[].commentsinteger | null
data[].publishedAtstring | nullTexto como a fonte manda (yyyy/MM/dd HH:mm:ss). Fuso não confirmado.
data[].creatorDebutstring | nullData de estreia do criador (yyyy-MM-dd).
data[].isAdboolean | nullSe o vídeo é anúncio.
data[].isAiGeneratedboolean | nullSe o vídeo foi gerado por IA.
data[].adsRoasnumber | null
data[].adRevenueRationumber | nullRazão bruta, unidade não confirmada.
data[].adViewRationumber | nullRazão bruta, unidade não confirmada (já apareceu acima de 1).
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Vídeos / Vídeos de uma loja

Vídeos de uma loja

GEThttps://developers.sendyx.com/v1/shops/{id}/videos

0,10 crédito por requisição

Ranking dos vídeos que venderam produtos da loja na janela.

Parâmetros

5
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id da loja (campo id de GET /v1/shops).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

27
CampoTipoDescrição
dataarray de object
data[].idstringId do vídeo.
data[].titlestring | null
data[].creatorobject
data[].creator.idstring | null
data[].creator.handlestring | nullO @ público do perfil, com o @.
data[].revenuenumber | nullFaturamento do vídeo na janela, na moeda do mercado.
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].viewsinteger | null
data[].likesinteger | null
data[].sharesinteger | null
data[].commentsinteger | null
data[].publishedAtstring | nullTexto como a fonte manda (yyyy/MM/dd HH:mm:ss). Fuso não confirmado.
data[].creatorDebutstring | nullData de estreia do criador (yyyy-MM-dd).
data[].isAdboolean | nullSe o vídeo é anúncio.
data[].isAiGeneratedboolean | nullSe o vídeo foi gerado por IA.
data[].adsRoasnumber | null
data[].adRevenueRationumber | nullRazão bruta, unidade não confirmada.
data[].adViewRationumber | nullRazão bruta, unidade não confirmada (já apareceu acima de 1).
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Criadores / Criadores que divulgaram um produto

Criadores que divulgaram um produto

GEThttps://developers.sendyx.com/v1/products/{id}/creators

0,10 crédito por requisição

Ranking dos criadores que divulgaram o produto na janela, com faturamento por canal e vendas.

Parâmetros

5
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do produto (campo id de GET /v1/products).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

23
CampoTipoDescrição
dataarray de object
data[].idstringId do criador.
data[].nicknamestring | null
data[].handlestring | nullO @ público do perfil, com o @.
data[].followersinteger | null
data[].contentViewsinteger | null
data[].revenuenumber | nullFaturamento do criador com o produto na janela.
data[].videoRevenuenumber | null
data[].liveRevenuenumber | null
data[].salesinteger | null
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].categoryNamesarray de stringVem vazio no ranking por produto.
data[].categoryIdsarray de string
data[].tertiaryCategoryNamesarray de string
data[].tertiaryCategoryIdsarray de string
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Criadores / Detalhe de um criador

Detalhe de um criador

GEThttps://developers.sendyx.com/v1/creators/{id}

0,10 crédito por requisição

Desempenho de um criador na janela: faturamento por canal, seguidores, visualizações e quantidades de vídeos, lives, lojas e produtos.

Parâmetros

3
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do criador.
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.

Campos da resposta

27
CampoTipoDescrição
dataobject
data.idstring
data.nicknamestring | null
data.handlestring | nullO @ público do perfil, com o @.
data.regionstring | null
data.statusstring | null
data.followersinteger | null
data.newFollowersinteger | null
data.revenuenumber | null
data.videoRevenuenumber | null
data.liveRevenuenumber | null
data.salesinteger | null
data.unitPricenumber | null
data.videoViewsinteger | null
data.liveViewsinteger | null
data.videoGpmnumber | null
data.liveGpmnumber | null
data.videoCountinteger | null
data.liveCountinteger | null
data.shopCountinteger | null
data.productCountinteger | null
data.top3ProductIdsarray de string
data.revenueTrendarray de numberrevenueTrend é 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.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

6
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
404not_foundCriador não encontrado ou indisponível. Nada é cobrado.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Criadores / Contatos de um criador (indisponível por enquanto)

Contatos de um criador (indisponível por enquanto)

GEThttps://developers.sendyx.com/v1/creators/{id}/contacts

Indisponível por enquanto (nada é cobrado)

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.

Parâmetros

3
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id do criador.
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.

Campos da resposta

36
CampoTipoDescrição
dataobject
data.creatorobjectSó aparece quando o criador ainda não tinha sido buscado nas últimas 24 horas.
data.creator.idstring
data.creator.nicknamestring | null
data.creator.handlestring | nullO @ público do perfil, com o @.
data.creator.regionstring | null
data.creator.statusstring | null
data.creator.followersinteger | null
data.creator.newFollowersinteger | null
data.creator.revenuenumber | null
data.creator.videoRevenuenumber | null
data.creator.liveRevenuenumber | null
data.creator.salesinteger | null
data.creator.unitPricenumber | null
data.creator.videoViewsinteger | null
data.creator.liveViewsinteger | null
data.creator.videoGpmnumber | null
data.creator.liveGpmnumber | null
data.creator.videoCountinteger | null
data.creator.liveCountinteger | null
data.creator.shopCountinteger | null
data.creator.productCountinteger | null
data.creator.top3ProductIdsarray de string
data.creator.revenueTrendarray de numberrevenueTrend é 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.
data.contactsobjectDado pessoal. Veja as observações desta rota.
data.contacts.emailstring | null
data.contacts.tiktokstring | null
data.contacts.whatsappstring | null
data.contacts.linestring | null
data.contacts.facebookstring | null
data.contacts.instagramstring | null
data.contacts.zalostring | null
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

7
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
403terms_not_acceptedOs termos de uso da API ainda não foram aceitos pelo dono da chave. Aceite no console. Nada é cobrado.
404not_foundCriador não encontrado ou indisponível. Nada é cobrado.
429rate_limited ou miss_quota_exceeded ou contacts_daily_limitLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Criadores / Ranking geral de criadores

Ranking geral de criadores

GEThttps://developers.sendyx.com/v1/creators

0,10 crédito por requisição

Ranking GERAL dos criadores do mercado por faturamento na janela.

Parâmetros

4
NomeTipoObrigatórioValores permitidosDescrição
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

23
CampoTipoDescrição
dataarray de object
data[].idstringId do criador.
data[].nicknamestring | null
data[].handlestring | nullO @ público do perfil, com o @.
data[].followersinteger | null
data[].contentViewsinteger | null
data[].revenuenumber | nullFaturamento do criador com o produto na janela.
data[].videoRevenuenumber | null
data[].liveRevenuenumber | null
data[].salesinteger | null
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].categoryNamesarray de stringVem vazio no ranking por produto.
data[].categoryIdsarray de string
data[].tertiaryCategoryNamesarray de string
data[].tertiaryCategoryIdsarray de string
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Criadores / Criadores de uma loja

Criadores de uma loja

GEThttps://developers.sendyx.com/v1/shops/{id}/creators

0,10 crédito por requisição

Ranking dos criadores que venderam produtos da loja na janela.

Parâmetros

5
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id da loja (campo id de GET /v1/shops).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

23
CampoTipoDescrição
dataarray de object
data[].idstringId do criador.
data[].nicknamestring | null
data[].handlestring | nullO @ público do perfil, com o @.
data[].followersinteger | null
data[].contentViewsinteger | null
data[].revenuenumber | nullFaturamento do criador com o produto na janela.
data[].videoRevenuenumber | null
data[].liveRevenuenumber | null
data[].salesinteger | null
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].categoryNamesarray de stringVem vazio no ranking por produto.
data[].categoryIdsarray de string
data[].tertiaryCategoryNamesarray de string
data[].tertiaryCategoryIdsarray de string
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Categorias / Árvore de categorias

Árvore de categorias

GEThttps://developers.sendyx.com/v1/categories

Gratuito

Árvore de categorias do catálogo, com a quantidade de produtos de cada nó. Os ids servem de filtro em GET /v1/products.

Parâmetros

1
NomeTipoObrigatórioValores permitidosDescrição
regionstringNãoBRMercado. Padrão BR.

Campos da resposta

12
CampoTipoDescrição
dataobject
data.nodesarray de object
data.nodes[].idstring
data.nodes[].namestring
data.nodes[].levelinteger
data.nodes[].parentIdstring | null
data.nodes[].productCountinteger
data.nodes[].childrenarray de object
data.catalogTotalinteger
metaobject
meta.dataUpTostring | nullDia mais recente dos dados (yyyy-MM-dd).
meta.currencystring

Erros possíveis

3
CódigoerrorQuando
400validation_errorParâmetro inválido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
429rate_limitedLimite de requisições excedido. Veja o cabeçalho Retry-After.

Observações

  • 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.

Categorias / Ranking de categorias

Ranking de categorias

GEThttps://developers.sendyx.com/v1/categories/ranking

0,10 crédito por requisição

Ranking GERAL das categorias do mercado por faturamento na janela. Não é o ranking de produtos de uma categoria.

Parâmetros

4
NomeTipoObrigatórioValores permitidosDescrição
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

17
CampoTipoDescrição
dataarray de object
data[].idstring
data[].namestring | null
data[].rankinteger | null
data[].revenuenumber | null
data[].salesinteger | null
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].top3ShopRevenueRationumber | nullRazão bruta, unidade não confirmada.
data[].averageRevenuenumber | null
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Categorias / Detalhe de uma categoria

Detalhe de uma categoria

GEThttps://developers.sendyx.com/v1/categories/{id}

0,10 crédito por requisição

Faturamento por canal, quantidade de lojas e produtos ativos e série de faturamento de uma categoria.

Parâmetros

3
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id da categoria (campo id de GET /v1/categories).
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.

Campos da resposta

19
CampoTipoDescrição
dataobject
data.idstring
data.namestring | null
data.revenuenumber | null
data.salesinteger | null
data.shopCountinteger | null
data.activeProductCountinteger | null
data.liveRevenuenumber | null
data.videoRevenuenumber | null
data.affiliateRevenuenumber | null
data.selfOperatedRevenuenumber | null
data.shoppingMallRevenuenumber | null
data.averageShopRevenuenumber | null
data.revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data.revenueTrendarray de numberrevenueTrend é 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.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Lojas / Ranking de lojas

Ranking de lojas

GEThttps://developers.sendyx.com/v1/shops

0,10 crédito por requisição

Ranking das lojas do mercado por faturamento na janela.

Parâmetros

4
NomeTipoObrigatórioValores permitidosDescrição
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

23
CampoTipoDescrição
dataarray de object
data[].idstring
data[].namestring | null
data[].rankinteger | null
data[].revenuenumber | null
data[].salesinteger | null
data[].revenueGrowthRatenumber | nullNúmero bruto da fonte. Unidade NÃO confirmada: não trate como porcentagem.
data[].unitPricenumber | null
data[].shopTypestring | null
data[].onSaleProductCountinteger | null
data[].affiliateRevenuenumber | null
data[].selfPromotionRevenuenumber | null
data[].shoppingMallRevenuenumber | null
data[].categoryNamesarray de string
data[].categoryIdsarray de string
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Lojas / Detalhe de uma loja

Detalhe de uma loja

GEThttps://developers.sendyx.com/v1/shops/{id}

0,10 crédito por requisição

Faturamento por origem, quantidades de criadores, produtos, vídeos e lives e série de faturamento de uma loja.

Parâmetros

3
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id da loja.
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.

Campos da resposta

21
CampoTipoDescrição
dataobject
data.idstring
data.namestring | null
data.regionstring | null
data.sellerTypestring | null
data.revenuenumber | null
data.salesinteger | null
data.unitPricenumber | null
data.shoppingMallRevenuenumber | null
data.selfAccountRevenuenumber | null
data.affiliateRevenuenumber | null
data.creatorCountinteger | null
data.productCountinteger | null
data.videoCountinteger | null
data.liveCountinteger | null
data.top3ProductIdsarray de string
data.revenueTrendarray de numberrevenueTrend é 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.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Lives / Ranking de lives

Ranking de lives

GEThttps://developers.sendyx.com/v1/lives

0,10 crédito por requisição

Ranking das lives do mercado por faturamento na janela.

Parâmetros

4
NomeTipoObrigatórioValores permitidosDescrição
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50.
pageSizeintegerNão10Tamanho de página FIXO em 10. Qualquer outro valor é recusado com 400.

Campos da resposta

21
CampoTipoDescrição
dataarray de object
data[].idstring
data[].titlestring | null
data[].creatorobject
data[].creator.idstring | null
data[].creator.handlestring | nullO @ público do perfil, com o @.
data[].startedAtstring (date-time) | null
data[].endedAtstring (date-time) | null
data[].durationSecondsinteger | nullDuração em segundos (confere com fim menos início).
data[].revenuenumber | null
data[].unitPricenumber | null
data[].viewsinteger | null
data[].recordTypestring | nullValor da fonte (por exemplo SHORT, SCREENSHOT). Significado não confirmado.
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.hasMorebooleanPode haver mais itens na próxima página.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Lives / Detalhe de uma live

Detalhe de uma live

GEThttps://developers.sendyx.com/v1/lives/{id}

0,10 crédito por requisição

Faturamento, espectadores, produtos e GPM de uma live.

Parâmetros

3
NomeTipoObrigatórioValores permitidosDescrição
id (caminho)stringSimformato ^\d{1,20}$Id da live.
regionstringNãoBRMercado. Padrão BR.
windowintegerNão7, 30, 90Janela em dias. Padrão 7.

Campos da resposta

19
CampoTipoDescrição
dataobject
data.idstring
data.titlestring | null
data.creatorobject
data.creator.idstring | null
data.creator.handlestring | nullO @ público do perfil, com o @.
data.startedAtstring (date-time) | null
data.endedAtstring (date-time) | null
data.durationSecondsinteger | nullDuração em segundos.
data.productCountinteger | null
data.viewersinteger | null
data.revenuenumber | null
data.gpmnumber | null
data.top3ProductIdsarray de string
data.recordTypestring | nullValor da fonte. Significado não confirmado.
metaobject
meta.currencystring
meta.windowintegerJanela usada, em dias.
meta.fetchedAtstring (date-time)Instante em que o dado foi obtido.

Erros possíveis

5
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limited ou miss_quota_exceededLimite 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.
503upstream_unavailable ou upstream_budget_exceeded ou upstream_disabledServiço de dados indisponível no momento. Nada é cobrado. O campo error diz o motivo.

Observações

  • 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.

Brecha / Produtos com espaço para criador novato

Produtos com espaço para criador novato

GEThttps://developers.sendyx.com/v1/brecha

0,10 crédito por requisição

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.

Parâmetros

7
NomeTipoObrigatórioValores permitidosDescrição
regionstringNãoBRMercado. Padrão BR.
categoryL1IdstringNãoformato ^\d{1,32}$Id da categoria de nível 1.
minCommissionnumberNãomínimo 0; máximo 100Comissã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).
minRevenue30dintegerNãomínimo 0Faturamento mínimo em 30 dias, na moeda do mercado (inteiro). Padrão 10000.
stagestringNãoEstágios, separados por vírgula (OU entre eles): open, tight, closed. Padrão open,tight.
sortBystringNãoleverage, revenue1d, revenue7d, commissionOrdenação decrescente, com nulos no fim. Padrão leverage.
pageintegerNãomínimo 1; máximo 50Página, de 1 a 50. Cada página tem 10 itens.

Campos da resposta

37
CampoTipoDescrição
dataarray de object
data[].idstringId do produto no TikTok Shop. Use em GET /v1/products/{id}.
data[].namestringNome do produto.
data[].coverUrlstring | nullURL da capa.
data[].productUrlstringPágina do produto no TikTok Shop.
data[].categoryL1object | nullCategoria de nível 1 (id e nome).
data[].categoryL1.idstring
data[].categoryL1.namestring
data[].revenue1dnumber | nullFaturamento de ontem, na moeda do mercado.
data[].revenue7dnumber | nullFaturamento dos últimos 7 dias.
data[].revenue30dnumber | nullFaturamento dos últimos 30 dias.
data[].sales7dinteger | nullUnidades vendidas nos últimos 7 dias.
data[].sales30dinteger | nullUnidades vendidas nos últimos 30 dias.
data[].commissionnumber | nullComissão de afiliado, em fração (0.15 é 15%).
data[].creatorRevenue30dnumber | nullFaturamento 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.
data[].capturedCommission30dnumber | nullEstimativa da comissão que os criadores dividiram em 30 dias: creatorRevenue30d vezes commission. Null quando o canal não foi medido.
data[].accelerationnumber | nullRitmo de ontem dividido pela média diária de 30 dias. Acima de 1 é aceleração.
data[].statestring | nullMomento do produto: exploding, accelerating, cooling, stable ou idle.
data[].rankinteger | nullPosição no catálogo por vendas de 7 dias.
data[].stagestringEspaç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).
data[].newcomerLeveragenumber | nullFatia 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.
data[].newcomerVideoSharenumber | nullFração dos vídeos medidos feitos por criadores com menos de 12 meses de TikTok.
data[].newcomerRevenueSharenumber | nullFração do faturamento desses vídeos que vai para criadores novatos.
data[].newcomerVideosMeasuredinteger | nullQuantos vídeos entraram na conta (mínimo 10).
paginationobject
pagination.pageinteger
pagination.pageSizeinteger
pagination.totalinteger
pagination.totalPagesinteger
summaryobject
summary.stageTotalsobjectProdutos por estágio no recorte, antes do filtro de estágio.
summary.stageTotals.openinteger
summary.stageTotals.tightinteger
summary.stageTotals.closedinteger
metaobject
meta.dataUpTostring | nullDia mais recente dos dados (yyyy-MM-dd).
meta.currencystring

Erros possíveis

4
CódigoerrorQuando
400validation_errorParâmetro inválido ou desconhecido.
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
402insufficient_creditsCréditos insuficientes. Traz required e available, em créditos.
429rate_limitedLimite de requisições excedido. Veja o cabeçalho Retry-After.

Observações

  • 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.

Conta / Saldo e últimos usos

Saldo e últimos usos

GEThttps://developers.sendyx.com/v1/account/usage

Gratuito

Saldo de créditos da conta dona da chave e os últimos lançamentos do livro-caixa: compras, débitos e estornos.

Campos da resposta

11
CampoTipoDescrição
dataobject
data.balancenumberSaldo em créditos.
data.recentarray de object
data.recent[].createdAtstring (date-time)
data.recent[].kindstring
data.recent[].deltanumberVariação em créditos (negativa no débito).
data.recent[].balanceAfternumber
data.recent[].routestring | null
metaobject
meta.dataUpTostring | null
meta.currencystring | null

Erros possíveis

2
CódigoerrorQuando
401invalid_credentials ou missing_credentialsChave ausente ou inválida.
429rate_limitedLimite de requisições excedido. Veja o cabeçalho Retry-After.

Observações

  • 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.