{"openapi":"3.0.3","info":{"title":"Sendyx Data API","version":"1.0.0","description":"Product catalog data from TikTok Shop, charged by credit. 0.1 credit(s) per request. Limits: 60 requests per minute and 10000 per day, per key. Test environment: the sdx_test_ key (created in the console) answers the same routes, in the same format, with fixed fictional data, without charging anything. Test limit: 1000 calls per day per account and 60 per minute per key. The X-Sandbox-Scenario header (insufficient_credits, rate_limited, not_found, upstream_unavailable) forces the corresponding error."},"servers":[{"url":"https://developers.sendyx.com","description":"Production and test (the key decides the environment)."},{"url":"https://sandbox.sendyx.com","description":"Test (sandbox): accepts only sdx_test_ keys."}],"security":[{"bearerAuth":[]}],"paths":{"/v1/products":{"get":{"operationId":"listProducts","tags":["Products"],"x-notes":["The page size is fixed at 10. Sending pageSize with any other value returns 400.","Pages run from 1 to 50. To go further, narrow down with filters and sorting.","An unknown parameter returns 400. Items outside the allowed list in flags, states, and sortBy also return 400.","meta.dataUpTo is the most recent day of data. The source is one day behind.","commission is a fraction (0.15 is 15%). minPrice and maxPrice, in cents, are only returned once the product detail has been collected.","A request with a validation error does not consume credits.","region accepts BR (default) and US. US data comes as stored: names in English and values in USD (meta.currency tells the currency). While the US catalog is not visible, the US response comes back empty, with a null meta.dataUpTo, and costs 0.00 (nothing is charged). With sortBy=acceleration, a product without the yesterday and 30-day windows from the same collection has no value and goes to the end of the list, as in BR."],"summary":"List catalog products","description":"Lists the catalog products with the Radar filters and sort orders: category, revenue range, price, commission, signals, and product momentum.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"description":"Market. Defaults to BR. Accepts BR and US. While the US catalog is not visible, the US response comes back empty (404 on detail) and nothing is charged.","schema":{"type":"string","enum":["BR","US"]}},{"name":"search","in":"query","required":false,"description":"Part of the product name (up to 100 characters).","schema":{"type":"string","maxLength":100}},{"name":"categoryL1Id","in":"query","required":false,"description":"Level 1 category id.","schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"name":"categoryL2Id","in":"query","required":false,"description":"Level 2 category id.","schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"name":"categoryL3Id","in":"query","required":false,"description":"Level 3 category id.","schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"name":"categoryL1Ids","in":"query","required":false,"description":"Up to 5 level 1 ids separated by commas (OR between them).","schema":{"type":"string"}},{"name":"categoryL2Ids","in":"query","required":false,"description":"Up to 5 level 2 ids separated by commas.","schema":{"type":"string"}},{"name":"categoryL3Ids","in":"query","required":false,"description":"Up to 5 level 3 ids separated by commas.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"Descending sort order. Defaults to revenue.","schema":{"type":"string","enum":["revenue","sales","revenue30d","sales30d","acceleration","revenuePerCreator","commission"]},"example":"sales"},{"name":"flags","in":"query","required":false,"description":"Signals, separated by commas (all of them must hold).","schema":{"type":"string","example":"video,selling"},"example":"selling"},{"name":"states","in":"query","required":false,"description":"Product momentum, separated by commas (OR between them): exploding, accelerating, stable, cooling, idle.","schema":{"type":"string","example":"exploding,accelerating"}},{"name":"window","in":"query","required":false,"description":"Window of the revenue and sales metrics, in days. Defaults to 7.","schema":{"type":"integer","enum":[1,7,30]}},{"name":"minGmv","in":"query","required":false,"description":"Minimum revenue over 30 days, in the market currency (integer).","schema":{"type":"integer","minimum":0}},{"name":"maxGmv","in":"query","required":false,"description":"Maximum revenue over 30 days, in the market currency (integer).","schema":{"type":"integer","minimum":0}},{"name":"minCommission","in":"query","required":false,"description":"Minimum commission as a percentage (20 = 20%).","schema":{"type":"number","minimum":1,"maximum":100},"example":20},{"name":"launchedWithinDays","in":"query","required":false,"description":"Only products launched in the last N days.","schema":{"type":"integer","enum":[1,7,30,90]}},{"name":"page","in":"query","required":false,"description":"Page, from 1 to 50.","schema":{"type":"integer","minimum":1,"maximum":50},"example":1},{"name":"pageSize","in":"query","required":false,"description":"FIXED page size of 10. Any other value is rejected with 400.","schema":{"type":"integer","enum":[10]}}],"responses":{"200":{"description":"A page of products.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductPage"},"example":{"data":[{"id":"1731916815699052495","name":"Produto de exemplo A","coverUrl":"https://exemplo.invalid/capas/1731916815699052495.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052495","categoryL1":{"id":"600001","name":"Beleza"},"categoryL2":{"id":"600002","name":"Skincare"},"categoryL3":{"id":"600003","name":"Cuidados com o rosto"},"shopName":"Loja de exemplo","reviewCount":1200,"minPrice":3990,"maxPrice":5990,"commission":0.15,"revenue":120000,"sales":2400,"revenue30d":480000,"sales30d":9600,"sales7d":2400,"revenuePerCreator":3200,"acceleration":1.25,"trend":[313,333,400],"state":"accelerating","launchDate":"2026-03-01","rank":12,"prevRank":18,"channel":{"videoRevenue":288000,"liveRevenue":120000,"creatorsMeasured":150}},{"id":"1731916815699052496","name":"Produto de exemplo B","coverUrl":"https://exemplo.invalid/capas/1731916815699052496.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052496","categoryL1":{"id":"600010","name":"Casa e cozinha"},"categoryL2":null,"categoryL3":null,"shopName":null,"reviewCount":null,"minPrice":null,"maxPrice":null,"commission":null,"revenue":31500,"sales":630,"revenue30d":126000,"sales30d":2520,"sales7d":630,"revenuePerCreator":null,"acceleration":1.25,"trend":[82,88,105],"state":"accelerating","launchDate":"2026-03-01","rank":47,"prevRank":null,"channel":{"videoRevenue":75600,"liveRevenue":31500,"creatorsMeasured":null}}],"pagination":{"page":1,"pageSize":10,"total":342,"totalPages":35},"meta":{"dataUpTo":"2026-10-01","currency":"BRL"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit exceeded. See the Retry-After header.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/v1/products/{id}":{"get":{"operationId":"getProduct","tags":["Products"],"x-notes":["Returns only what is already in our database. A product outside the current catalog returns 404.","The 404 does not consume credits: the debited amount is refunded immediately.","The id is the id field returned by GET /v1/products.","region accepts BR (default) and US. While the US catalog is not visible, the US detail responds 404 and costs 0.00 (nothing is charged). US data comes as stored: names in English and values in USD."],"summary":"Product detail","description":"Detail of a catalog product, with the extra short-window fields (7 days and yesterday) and saturation. Returns what is in the current catalog.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Product id (the id field of GET /v1/products).","example":"1731916815699052495"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US. While the US catalog is not visible, the US response comes back empty (404 on detail) and nothing is charged."}],"responses":{"200":{"description":"The product.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetailResponse"},"example":{"data":{"id":"1731916815699052495","name":"Produto de exemplo A","coverUrl":"https://exemplo.invalid/capas/1731916815699052495.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052495","categoryL1":{"id":"600001","name":"Beleza"},"categoryL2":{"id":"600002","name":"Skincare"},"categoryL3":{"id":"600003","name":"Cuidados com o rosto"},"shopName":"Loja de exemplo","reviewCount":1200,"minPrice":3990,"maxPrice":5990,"commission":0.15,"revenue":120000,"sales":2400,"revenue30d":480000,"sales30d":9600,"sales7d":2400,"revenuePerCreator":3200,"acceleration":1.25,"trend":[313,333,400],"state":"accelerating","launchDate":"2026-03-01","rank":12,"prevRank":18,"channel":{"videoRevenue":288000,"liveRevenue":120000,"creatorsMeasured":150,"videosMeasured":980,"livesMeasured":35},"revenue7d":120000,"revenue1d":20000,"saturation":3.125},"meta":{"dataUpTo":"2026-10-01","currency":"BRL"}}}}},"400":{"description":"Invalid parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found","message":"Product not found.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit exceeded. See the Retry-After header.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/v1/products/{id}/analysis":{"get":{"operationId":"getProductAnalysis","tags":["Products"],"x-notes":["Descriptive product text, as it was registered in the shop.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Product analysis","description":"Product highlights and attributes, as text in the language of the market (Portuguese for BR, English for US).","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Product id (the id field of GET /v1/products).","example":"1731916815699052495"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAnalysisResponse"},"example":{"data":{"productId":"1731916815699052495","region":"BR","language":"pt-BR","highlights":[{"keyword":"Brilho Espelhado Imediato","text":"Fórmula com silicones ultra luminosos para brilho espelhado"},{"keyword":"Efeito Anti-Frizz Instantâneo","text":"Efeito anti-frizz imediato, disciplinando fios rebeldes"},{"keyword":"Proteção Solar Avançada","text":"Protege contra raios solares e agressores externos"},{"keyword":"Textura Leve Sem Pesos","text":"Textura leve que não pesa nos fios"},{"keyword":"Versatilidade para Todos os Tipos de Cabelos","text":"para todos os tipos de cabelos"}],"attributes":[{"key":"Marca","value":"Semélle"},{"key":"Tipo de Produto","value":"Reparador de Pontas Gloss"},{"key":"Indicação","value":"Todos os tipos de cabelos"},{"key":"Principais Ingredientes","value":"Silicones ultra luminosos"},{"key":"Efeito","value":"Anti-frizz, brilho espelhado, prevenção de pontas duplas"},{"key":"Proteção","value":"Contra raios solares e agressores externos"},{"key":"Textura","value":"Leve, não deixa resíduos"},{"key":"Modo de Uso","value":"Aplicar no comprimento e pontas após escova ou penteado"},{"key":"Finalidade","value":"Finalizador diário e acabamento pós-escova"},{"key":"Público-alvo","value":"Mulheres práticas e exigentes"}]},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/products/{id}/trend":{"get":{"operationId":"getProductTrend","tags":["Products"],"x-notes":["The dates in series are DERIVED, not provided by the source: the last point is the day before the UTC date of meta.fetchedAt and each earlier point steps back one day. The rule was checked against the real daily series (63% of the positions matched within 0.5%), but the source may revise values already published, and around the UTC day rollover the label may shift by one day (assumption not proven at those hours). The number of points depends on the source and does not necessarily follow the window. A product without a series returns an empty series, with no error.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Daily revenue series of a product","description":"Revenue per day of the product, with derived dates. Use it to draw the product curve.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Product id (the id field of GET /v1/products).","example":"1731665066105865445"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTrendResponse"},"example":{"data":{"productId":"1731665066105865445","series":[{"date":"2026-09-02","revenue":44069},{"date":"2026-09-03","revenue":40089},{"date":"2026-09-04","revenue":40950},{"date":"2026-09-05","revenue":36331},{"date":"2026-09-06","revenue":41241},{"date":"2026-09-07","revenue":49115},{"date":"2026-09-08","revenue":57783},{"date":"2026-09-09","revenue":36339},{"date":"2026-09-10","revenue":57629},{"date":"2026-09-11","revenue":80275},{"date":"2026-09-12","revenue":55498},{"date":"2026-09-13","revenue":107259},{"date":"2026-09-14","revenue":102209},{"date":"2026-09-15","revenue":53071},{"date":"2026-09-16","revenue":94064},{"date":"2026-09-17","revenue":80764},{"date":"2026-09-18","revenue":102115},{"date":"2026-09-19","revenue":115958},{"date":"2026-09-20","revenue":89326},{"date":"2026-09-21","revenue":72168},{"date":"2026-09-22","revenue":52390},{"date":"2026-09-23","revenue":100564},{"date":"2026-09-24","revenue":70163},{"date":"2026-09-25","revenue":47248},{"date":"2026-09-26","revenue":31277},{"date":"2026-09-27","revenue":89054},{"date":"2026-09-28","revenue":58010},{"date":"2026-09-29","revenue":19914},{"date":"2026-09-30","revenue":18991},{"date":"2026-10-01","revenue":15995}]},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/products/ranking":{"get":{"operationId":"listProductsRanking","tags":["Products"],"x-notes":["Only products that sold in the window appear: the entity's total number of products may be larger. The page of 100 rows is the same for pages 1 to 10.","commission is a fraction (0.11 is 11%). The source delivers percentage points and we divide by 100, as in GET /v1/products. In the per-entity ranking this unit is inferred, not confirmed; revenueGrowthRate is the raw number from the source and must not be treated as a percentage.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Overall product ranking","description":"OVERALL ranking of the market's products by revenue in the window, with no shop, creator, video, or live filter. Accepts BR and US.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1731916815699052495","name":"Reparador de Pontas Gloss com Silicones Ultra Luminosos Protege Contra Raios Solares e Anti-Frizz para Todos os Tipos de Cabelos Selando As Cutículas Brilho Alto Agressores Externos Textura Leve","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":1388862.74,"sales":133205,"unitPrice":10.43,"commission":0.11,"revenueGrowthRate":-19.1,"videoRevenue":706392.16,"liveRevenue":682375.62,"showcaseRevenue":94.96,"launchDate":"2025-10-28","skuCount":1},{"id":"1736900671466342351","name":"Sultana Perfume Árabe Capilar Concentrado - Luxuoso para Mulheres poderosas com Notas Misteriosas e Envolventes","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":1945.94,"sales":57,"unitPrice":34.14,"commission":0.1,"revenueGrowthRate":-9.77,"videoRevenue":164.38,"liveRevenue":1781.57,"showcaseRevenue":0,"launchDate":"2026-08-05","skuCount":1}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops/{id}/products":{"get":{"operationId":"listShopProducts","tags":["Products"],"x-notes":["Only products that sold in the window appear: the entity's total number of products may be larger. The page of 100 rows is the same for pages 1 to 10.","commission is a fraction (0.11 is 11%). The source delivers percentage points and we divide by 100, as in GET /v1/products. In the per-entity ranking this unit is inferred, not confirmed; revenueGrowthRate is the raw number from the source and must not be treated as a percentage.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Products of a shop","description":"Ranking of the shop's products by revenue in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Shop id (the id field of GET /v1/shops).","example":"7496266893040520143"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1731916815699052495","name":"Reparador de Pontas Gloss com Silicones Ultra Luminosos Protege Contra Raios Solares e Anti-Frizz para Todos os Tipos de Cabelos Selando As Cutículas Brilho Alto Agressores Externos Textura Leve","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":1388862.74,"sales":133205,"unitPrice":10.43,"commission":0.11,"revenueGrowthRate":-19.1,"videoRevenue":706392.16,"liveRevenue":682375.62,"showcaseRevenue":94.96,"launchDate":"2025-10-28","skuCount":1},{"id":"1736900671466342351","name":"Sultana Perfume Árabe Capilar Concentrado - Luxuoso para Mulheres poderosas com Notas Misteriosas e Envolventes","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":1945.94,"sales":57,"unitPrice":34.14,"commission":0.1,"revenueGrowthRate":-9.77,"videoRevenue":164.38,"liveRevenue":1781.57,"showcaseRevenue":0,"launchDate":"2026-08-05","skuCount":1}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/creators/{id}/products":{"get":{"operationId":"listCreatorProducts","tags":["Products"],"x-notes":["Only products that sold in the window appear: the entity's total number of products may be larger. The page of 100 rows is the same for pages 1 to 10.","commission is a fraction (0.11 is 11%). The source delivers percentage points and we divide by 100, as in GET /v1/products. In the per-entity ranking this unit is inferred, not confirmed; revenueGrowthRate is the raw number from the source and must not be treated as a percentage.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Products of a creator","description":"Ranking of the products the creator promoted that sold in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Creator id (the id field of GET /v1/creators).","example":"9993000000000000001"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1731916815699052495","name":"Reparador de Pontas Gloss com Silicones Ultra Luminosos Protege Contra Raios Solares e Anti-Frizz para Todos os Tipos de Cabelos Selando As Cutículas Brilho Alto Agressores Externos Textura Leve","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":77743.7,"sales":7518,"unitPrice":10.34,"commission":0.11,"revenueGrowthRate":-66.72,"videoRevenue":77743.7,"liveRevenue":0,"showcaseRevenue":0,"launchDate":"2025-10-28","skuCount":1},{"id":"1731942865264674037","name":"Body Splash Árabe Ayra 100ml by Primacial - Perfume Floral Gourmand","coverUrl":null,"shop":{"id":"7496154921588197621","name":"Primacial"},"revenue":922.37,"sales":47,"unitPrice":19.62,"commission":0.11,"revenueGrowthRate":-41.58,"videoRevenue":922.37,"liveRevenue":0,"showcaseRevenue":0,"launchDate":"2025-08-12","skuCount":1}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/videos/{id}/products":{"get":{"operationId":"listVideoProducts","tags":["Products"],"x-notes":["Only products that sold in the window appear: the entity's total number of products may be larger. The page of 100 rows is the same for pages 1 to 10.","commission is a fraction (0.11 is 11%). The source delivers percentage points and we divide by 100, as in GET /v1/products. In the per-entity ranking this unit is inferred, not confirmed; revenueGrowthRate is the raw number from the source and must not be treated as a percentage.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Products of a video","description":"The products the video promotes that sold in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Video id (the id field of GET /v1/videos).","example":"7680050878983834898"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1731916815699052495","name":"Reparador de Pontas Gloss com Silicones Ultra Luminosos Protege Contra Raios Solares e Anti-Frizz para Todos os Tipos de Cabelos Selando As Cutículas Brilho Alto Agressores Externos Textura Leve","coverUrl":null,"shop":{"id":"7496266893040520143","name":"Semélle"},"revenue":67110.47,"sales":6546,"unitPrice":10.25,"commission":0.11,"revenueGrowthRate":-66.01,"videoRevenue":67110.47,"liveRevenue":0,"showcaseRevenue":0,"launchDate":"2025-10-28","skuCount":1}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/lives/{id}/products":{"get":{"operationId":"listLiveProducts","tags":["Products"],"x-notes":["Only products that sold in the window appear: the entity's total number of products may be larger. The page of 100 rows is the same for pages 1 to 10.","commission is a fraction (0.11 is 11%). The source delivers percentage points and we divide by 100, as in GET /v1/products. In the per-entity ranking this unit is inferred, not confirmed; revenueGrowthRate is the raw number from the source and must not be treated as a percentage.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Products of a live","description":"Ranking of the products sold in the live in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Live id (the id field of GET /v1/lives).","example":"7688869399273065237"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankedProductRankingResponse"},"example":{"data":[{"id":"1737669706235937867","name":"Parafusadeira Elétrica 48V Com 2 Bateria Recarregável Sem Fio e Maleta Completa","coverUrl":null,"shop":{"id":"7494855033048826955","name":"WENJITK"},"revenue":54532.46,"sales":609,"unitPrice":89.54,"commission":0.05,"revenueGrowthRate":100,"videoRevenue":0,"liveRevenue":54532.46,"showcaseRevenue":0,"launchDate":"2026-09-23","skuCount":null},{"id":"1737497467647460621","name":"DEWEN Martelete Perfurador Rompedor Professional 26mm 4 em 1 4950 RPM Com Acessorios","coverUrl":null,"shop":{"id":"7494823596993447181","name":"dewen_obra"},"revenue":34946.29,"sales":130,"unitPrice":268.82,"commission":0.05,"revenueGrowthRate":100,"videoRevenue":0,"liveRevenue":34946.29,"showcaseRevenue":0,"launchDate":"2026-09-14","skuCount":2}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/products/{id}/videos":{"get":{"operationId":"listProductVideos","tags":["Videos"],"x-notes":["Videos sorted by revenue in the window.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Videos that sold a product","description":"Ranking of the videos that sold the product in the window, with views, likes, and revenue.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Product id (the id field of GET /v1/products).","example":"1731916815699052495"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoRankingResponse"},"example":{"data":[{"id":"7680050878983834898","title":"#mulher #mulheres #tiktokshop #cabelo #tonicocapilar","creator":{"id":"9993000000000000001","handle":"@criador_mock_0016"},"revenue":67110.47,"revenueGrowthRate":-180.99,"views":3491380,"likes":133700,"shares":45500,"comments":3337,"publishedAt":"2026/08/31 01:39:58","creatorDebut":"2025-12-25","isAd":true,"isAiGenerated":true,"adsRoas":3.45,"adRevenueRatio":8.504760860109378,"adViewRatio":1.1179820013862714},{"id":"7681243230125575432","title":"#autocuidado","creator":{"id":"9993000000000000005","handle":"@criador_mock_0020"},"revenue":38498.26,"revenueGrowthRate":-185.1,"views":2100000,"likes":28400,"shares":685,"comments":319,"publishedAt":"2026/09/03 06:46:51","creatorDebut":"2026-01-13","isAd":false,"isAiGenerated":false,"adsRoas":0,"adRevenueRatio":0,"adViewRatio":0}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/videos/{id}":{"get":{"operationId":"getVideo","tags":["Videos"],"x-notes":["Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Video detail","description":"Metrics of a video: revenue, sales, views, ad performance, and duration.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Video id.","example":"7680050878983834898"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoDetailResponse"},"example":{"data":{"id":"7680050878983834898","title":"#mulher #mulheres #tiktokshop #cabelo #tonicocapilar","region":null,"creator":{"id":"9993000000000000001","handle":"@criador_mock_0016"},"productCount":1,"revenue":67110.47,"sales":6546,"views":3491380,"likes":133700,"shares":45500,"comments":3337,"gpm":19.22,"adsViews":326870,"adsRoas":3.45,"adsPeriod":1,"adCpa":0.25242183045190886,"adViewRatio":1.1179820013862714,"duration":51,"isAd":true,"isAiGenerated":true,"revenueTrend":null},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/videos":{"get":{"operationId":"listVideos","tags":["Videos"],"x-notes":["Videos sorted by revenue in the window.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Overall video ranking","description":"OVERALL ranking of the market's videos by revenue in the window. It is not the ranking of a product or a shop.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoRankingResponse"},"example":{"data":[{"id":"7681045521795927317","title":"#Tiktokshopbr99","creator":{"id":"9993000000000000010","handle":"@criador_mock_0017"},"revenue":363255.11,"revenueGrowthRate":-189.58,"views":4401675,"likes":45761,"shares":3325,"comments":563,"publishedAt":"2026/09/02 17:59:39","creatorDebut":"2025-02-03","isAd":true,"isAiGenerated":false,"adsRoas":3.55,"adRevenueRatio":60.476435076887135,"adViewRatio":33.17189479005152},{"id":"7675906754173029640","title":"#skincare #mulher #ViralTikTokShop #renovaçãodeprimavera #principia","creator":{"id":"9993000000000000011","handle":"@criador_mock_0018"},"revenue":355044.14,"revenueGrowthRate":-180.13,"views":5238160,"likes":34061,"shares":4195,"comments":472,"publishedAt":"2026/08/20 12:00:00","creatorDebut":"2025-06-26","isAd":true,"isAiGenerated":false,"adsRoas":3.18,"adRevenueRatio":80.00000000000001,"adViewRatio":40.26927394352215}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops/{id}/videos":{"get":{"operationId":"listShopVideos","tags":["Videos"],"x-notes":["Videos sorted by revenue in the window.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Videos of a shop","description":"Ranking of the videos that sold the shop's products in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Shop id (the id field of GET /v1/shops).","example":"7496266893040520143"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoRankingResponse"},"example":{"data":[{"id":"7680050878983834898","title":"#mulher #mulheres #tiktokshop #cabelo #tonicocapilar","creator":{"id":"9993000000000000001","handle":"@criador_mock_0016"},"revenue":67110.47,"revenueGrowthRate":-180.99,"views":3491380,"likes":133700,"shares":45500,"comments":3337,"publishedAt":"2026/08/31 01:39:58","creatorDebut":"2025-12-25","isAd":true,"isAiGenerated":true,"adsRoas":3.45,"adRevenueRatio":8.504760860109378,"adViewRatio":1.1179820013862714},{"id":"7681243230125575432","title":"#autocuidado","creator":{"id":"9993000000000000005","handle":"@criador_mock_0020"},"revenue":38498.26,"revenueGrowthRate":-185.1,"views":2100000,"likes":28400,"shares":685,"comments":319,"publishedAt":"2026/09/03 06:46:51","creatorDebut":"2026-01-13","isAd":false,"isAiGenerated":false,"adsRoas":0,"adRevenueRatio":0,"adViewRatio":0}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/products/{id}/creators":{"get":{"operationId":"listProductCreators","tags":["Creators"],"x-notes":["Performance only and the profile's public @. This route never returns creator contacts or bio. Contacts exist only in GET /v1/creators/{id}/contacts.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Creators who promoted a product","description":"Ranking of the creators who promoted the product in the window, with revenue by channel and sales.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Product id (the id field of GET /v1/products).","example":"1731916815699052495"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRankingResponse"},"example":{"data":[{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","followers":63000,"contentViews":4010167,"revenue":77743.7,"videoRevenue":77743.7,"liveRevenue":0,"sales":7518,"revenueGrowthRate":-66.72,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]},{"id":"9993000000000000005","nickname":"Criador Mock 0009","handle":"@criador_mock_0010","followers":21700,"contentViews":5366476,"revenue":63793.01,"videoRevenue":63793.01,"liveRevenue":0,"sales":6257,"revenueGrowthRate":-47.7,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/creators/{id}":{"get":{"operationId":"getCreator","tags":["Creators"],"x-notes":["This route never returns creator contacts or bio. Contacts exist only in GET /v1/creators/{id}/contacts.","Looking up the creator here counts as \"creator already looked up\" for 24 hours: within that period, contacts cost only 0.02 credits.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Creator detail","description":"Performance of a creator in the window: revenue by channel, followers, views, and counts of videos, lives, shops, and products.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Creator id.","example":"9993000000000000001"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorDetailResponse"},"example":{"data":{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","region":"br","status":"INDEPENDENT","followers":63000,"newFollowers":31500,"revenue":78692.25,"videoRevenue":78666.07,"liveRevenue":0,"sales":7566,"unitPrice":10.4,"videoViews":4010167,"liveViews":0,"videoGpm":19.62,"liveGpm":0,"videoCount":0,"liveCount":0,"shopCount":7,"productCount":7,"top3ProductIds":[],"revenueTrend":null},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"404":{"description":"Creator not found or unavailable. Nothing is charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found","message":"Product not found.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/creators/{id}/contacts":{"get":{"operationId":"getCreatorContacts","tags":["Creators"],"x-notes":["PERSONAL DATA. Each lookup is logged (who, which key, which creator, and when) and there is a daily cap on lookups per account (all keys combined). Use it only for the purpose that justified the lookup and comply with data protection law.","With the creator already looked up in the last 24 hours by this user, the response carries only contacts and the cost is 0.02. Otherwise it carries creator and contacts and the cost is 0.12. Requesting the same creator's contacts again costs 0.02 per request.","We do not store contacts for more than 24 hours.","Requires the key owner to have accepted the API terms of use in the console (otherwise, 403 terms_not_accepted). Creators who asked for their data to be removed have no contact served (404).","Not every creator has contact details filled in: missing fields come as null.","BR only.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Creator contacts","description":"Public contacts provided by the creator (email, TikTok, WhatsApp, Line, Facebook, Instagram, and Zalo). It is an extra lookup of 0.02 credits. If you have not looked up the creator in the last 24 hours, the route looks up the creator and charges 0.12 credits (0.10 for the creator plus 0.02 for the contacts), returning creator and contacts together.","x-credit-cost":"0.12","x-credit-cost-label":"0.02 credits with the creator already looked up in the last 24 h; 0.12 credits when the creator has not been looked up yet","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Creator id.","example":"9993000000000000001"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Market. Defaults to BR. This route accepts BR only. US is rejected with 400."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.12"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.88"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorContactsResponse"},"example":{"data":{"creator":{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","region":"br","status":"INDEPENDENT","followers":63000,"newFollowers":31500,"revenue":78692.25,"videoRevenue":78666.07,"liveRevenue":0,"sales":7566,"unitPrice":10.4,"videoViews":4010167,"liveViews":0,"videoGpm":19.62,"liveGpm":0,"videoCount":0,"liveCount":0,"shopCount":7,"productCount":7,"top3ProductIds":[],"revenueTrend":null},"contacts":{"email":"contato.mock@example.invalid","tiktok":"@criador_mock_0001","whatsapp":"+55 00 00000-0000","line":"line_mock_0001","facebook":"facebook.com/criador.mock","instagram":"@criador_mock_0001","zalo":"0000000000"}},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}},"examples":{"First 0.12":{"summary":"First 0.12","value":{"data":{"creator":{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","region":"br","status":"INDEPENDENT","followers":63000,"newFollowers":31500,"revenue":78692.25,"videoRevenue":78666.07,"liveRevenue":0,"sales":7566,"unitPrice":10.4,"videoViews":4010167,"liveViews":0,"videoGpm":19.62,"liveGpm":0,"videoCount":0,"liveCount":0,"shopCount":7,"productCount":7,"top3ProductIds":[],"revenueTrend":null},"contacts":{"email":"contato.mock@example.invalid","tiktok":"@criador_mock_0001","whatsapp":"+55 00 00000-0000","line":"line_mock_0001","facebook":"facebook.com/criador.mock","instagram":"@criador_mock_0001","zalo":"0000000000"}},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}},"x-headers":{"x-credits-cost":"0.12","x-credits-remaining":"4.88","x-request-id":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"Already looked up 0.02":{"summary":"Already looked up 0.02","value":{"data":{"contacts":{"email":"contato.mock@example.invalid","tiktok":"@criador_mock_0001","whatsapp":"+55 00 00000-0000","line":"line_mock_0001","facebook":"facebook.com/criador.mock","instagram":"@criador_mock_0001","zalo":"0000000000"}},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}},"x-headers":{"x-credits-cost":"0.02","x-credits-remaining":"4.98","x-request-id":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"403":{"description":"The API terms of use have not been accepted yet by the key owner. Accept them in the console. Nothing is charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"terms_not_accepted","message":"Accept the API terms of use in the console to look up creator contacts. You are not charged.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"404":{"description":"Creator not found or unavailable. Nothing is charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found","message":"Product not found.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit, hourly quota of new lookups, or daily limit of contact lookups reached. The error field says which: rate_limited, miss_quota_exceeded, or contacts_daily_limit.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}},"contacts limit":{"summary":"contacts limit","value":{"error":"contacts_daily_limit","message":"This account has reached its daily limit of contact lookups. Try again tomorrow.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/creators":{"get":{"operationId":"listCreators","tags":["Creators"],"x-notes":["Performance only and the profile's public @. This route never returns creator contacts or bio. Contacts exist only in GET /v1/creators/{id}/contacts.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Overall creator ranking","description":"OVERALL ranking of the market's creators by revenue in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRankingResponse"},"example":{"data":[{"id":"9993000000000000002","nickname":"Criador Mock 0003","handle":"@criador_mock_0004","followers":313000,"contentViews":12402625,"revenue":5407000.58,"videoRevenue":415032.56,"liveRevenue":4981853.14,"sales":30185,"revenueGrowthRate":7.72,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]},{"id":"9993000000000000003","nickname":"Criador Mock 0005","handle":"@criador_mock_0006","followers":21100,"contentViews":5570484,"revenue":2769191.24,"videoRevenue":24626.43,"liveRevenue":2740817.16,"sales":25517,"revenueGrowthRate":-11.92,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops/{id}/creators":{"get":{"operationId":"listShopCreators","tags":["Creators"],"x-notes":["Performance only and the profile's public @. This route never returns creator contacts or bio. Contacts exist only in GET /v1/creators/{id}/contacts.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Creators of a shop","description":"Ranking of the creators who sold the shop's products in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Shop id (the id field of GET /v1/shops).","example":"7496266893040520143"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRankingResponse"},"example":{"data":[{"id":"9993000000000000001","nickname":"Criador Mock 0001","handle":"@criador_mock_0002","followers":63000,"contentViews":4010167,"revenue":77743.7,"videoRevenue":77743.7,"liveRevenue":0,"sales":7518,"revenueGrowthRate":-66.72,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]},{"id":"9993000000000000005","nickname":"Criador Mock 0009","handle":"@criador_mock_0010","followers":21700,"contentViews":5366476,"revenue":63793.01,"videoRevenue":63793.01,"liveRevenue":0,"sales":6257,"revenueGrowthRate":-47.7,"categoryNames":[],"categoryIds":[],"tertiaryCategoryNames":[],"tertiaryCategoryIds":[]}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/categories":{"get":{"operationId":"listCategories","tags":["Categories"],"x-notes":["Only categories that have a product in the current catalog are included.","Use a category id in the categoryL1Id, categoryL2Id, and categoryL3Id filters of GET /v1/products."],"summary":"Category tree","description":"Catalog category tree, with the number of products in each node. The ids work as filters in GET /v1/products.","x-credit-cost":"0","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR"]},"description":"Market. Defaults to BR. This route accepts BR only. US is rejected with 400."}],"responses":{"200":{"description":"The tree.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"5.00"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryTreeResponse"},"example":{"data":{"nodes":[{"id":"600001","name":"Beleza","level":1,"parentId":null,"productCount":120,"children":[{"id":"600002","name":"Skincare","level":2,"parentId":"600001","productCount":45,"children":[{"id":"600003","name":"Cuidados com o rosto","level":3,"parentId":"600002","productCount":18,"children":[]}]}]},{"id":"600010","name":"Casa e cozinha","level":1,"parentId":null,"productCount":80,"children":[{"id":"600011","name":"Organização","level":2,"parentId":"600010","productCount":80,"children":[]}]}],"catalogTotal":342},"meta":{"dataUpTo":"2026-10-01","currency":"BRL"}}}}},"400":{"description":"Invalid parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"429":{"description":"Request limit exceeded. See the Retry-After header.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/v1/categories/ranking":{"get":{"operationId":"getCategoryRanking","tags":["Categories"],"x-notes":["Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Category ranking","description":"OVERALL ranking of the market's categories by revenue in the window. It is not the product ranking of a category.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryRankingResponse"},"example":{"data":[{"id":"601152","name":"Roupas femininas e roupas íntimas femininas","rank":1,"revenue":474637451.81,"sales":12809261,"revenueGrowthRate":-17.04,"top3ShopRevenueRatio":1.62,"averageRevenue":16295.45},{"id":"601450","name":"Beleza e cuidados pessoais","rank":2,"revenue":380532554.43,"sales":9700465,"revenueGrowthRate":-16.01,"top3ShopRevenueRatio":7.24,"averageRevenue":15039.03}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/categories/{id}":{"get":{"operationId":"getCategory","tags":["Categories"],"x-notes":["Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Category detail","description":"Revenue by channel, number of shops and active products, and revenue series of a category.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Category id (the id field of GET /v1/categories).","example":"601450"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryDetailResponse"},"example":{"data":{"id":"601450","name":"Beleza e cuidados pessoais","revenue":380532554.43,"sales":9700465,"shopCount":25311,"activeProductCount":230842,"liveRevenue":147897129.04,"videoRevenue":187401798.12,"affiliateRevenue":323314077.93585366,"selfOperatedRevenue":28105274.717672423,"shoppingMallRevenue":45233627.27000001,"averageShopRevenue":15034.28,"revenueGrowthRate":-16.01,"revenueTrend":[12889799.783695856,12389202.164105965,14603780.078967132,13715544.60812507,13793887.497792838,12068030.611219877,12240701.922179159,13331933.8072971,15325482.947157359,8466255.224346327,9930138.139638878,10773996.168123439,12875751.735232223,14611248.31061054,12086603.103609614,11788748.443470975,9566099.773913367,10087339.358736837,15943947.79155202,14139071.130000006,13268826.870399127,13506473.152680138,10944084.797653493,10164235.226391464,15083865.50066786,14922892.998728719,12547847.829945834,12374977.73259608,13189020.371665115,13902541.956874274]},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops":{"get":{"operationId":"listShops","tags":["Shops"],"x-notes":["The shop image is not exposed.","Units NOT confirmed: revenueGrowthRate is the raw number from the source (in categories and shops it looks like percentage points, but in videos -180.99 has appeared, so do not treat it as a percentage) and the ads and adViewRatio ratios are also raw.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Shop ranking","description":"Ranking of the market's shops by revenue in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopRankingResponse"},"example":{"data":[{"id":"7494536208662758848","name":"GOKOCO Brasil","rank":1,"revenue":11288119.35,"sales":59396,"revenueGrowthRate":-50.36,"unitPrice":190.05,"shopType":"BRAND","onSaleProductCount":18,"affiliateRevenue":10951668.2,"selfPromotionRevenue":330573.42,"shoppingMallRevenue":5877.74,"categoryNames":[],"categoryIds":[]},{"id":"7496160368512436795","name":"LOi Brasil","rank":2,"revenue":10237707.37,"sales":27020,"revenueGrowthRate":3.22,"unitPrice":378.89,"shopType":"BRAND","onSaleProductCount":141,"affiliateRevenue":9937191.39,"selfPromotionRevenue":4470.83,"shoppingMallRevenue":296045.15,"categoryNames":[],"categoryIds":[]}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/shops/{id}":{"get":{"operationId":"getShop","tags":["Shops"],"x-notes":["revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Shop detail","description":"Revenue by source, counts of creators, products, videos, and lives, and revenue series of a shop.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Shop id.","example":"7496266893040520143"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopDetailResponse"},"example":{"data":{"id":"7496266893040520143","name":"Semélle","region":"BR","sellerType":"BRAND","revenue":1395311.31,"sales":133380,"unitPrice":10.46,"shoppingMallRevenue":430,"selfAccountRevenue":0,"affiliateRevenue":1394881.65,"creatorCount":13255,"productCount":23,"videoCount":28958,"liveCount":20411,"top3ProductIds":[],"revenueTrend":null},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/lives":{"get":{"operationId":"listLives","tags":["Lives"],"x-notes":["Times in ISO 8601 UTC. Duration is in seconds.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Live ranking","description":"Ranking of the market's lives by revenue in the window.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page, from 1 to 50.","example":1},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","enum":[10]},"description":"FIXED page size of 10. Any other value is rejected with 400."}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveRankingResponse"},"example":{"data":[{"id":"7688869399273065237","title":"Parafusadeira e furadeira 48 vol","creator":{"id":"9993000000000000007","handle":"@criador_mock_0013"},"startedAt":"2026-09-23T23:01:23.000Z","endedAt":"2026-09-28T02:59:32.000Z","durationSeconds":359889,"revenue":867470.15,"unitPrice":73.25,"views":2583360,"recordType":"SHORT"},{"id":"7685747990938979079","title":null,"creator":{"id":"9993000000000000008","handle":"@criador_mock_0014"},"startedAt":"2026-09-15T13:07:50.000Z","endedAt":"2026-09-15T22:42:04.000Z","durationSeconds":34454,"revenue":772848.24,"unitPrice":534.1,"views":162872,"recordType":"SHORT"}],"pagination":{"page":1,"pageSize":10,"hasMore":false},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/lives/{id}":{"get":{"operationId":"getLive","tags":["Lives"],"x-notes":["Times in ISO 8601 UTC. Duration is in seconds.","region accepts BR (default) and US. US data comes as the source delivers it: names, titles, and categories in English and values in USD, with no translation or currency conversion. meta.currency tells the currency.","meta.fetchedAt is the moment the data was obtained. A daily ranking is valid until the next publication of the day (around 14:00 UTC). The route cost is the same on every successful request.","pageSize is fixed at 10. window accepts 7, 30, or 90 days. Pages run from 1 to 50.","If the data service is unavailable, the response is 503 and no credits are charged. The error field gives the reason: upstream_disabled, upstream_budget_exceeded, or upstream_unavailable (source failing or busy, including a full live lookup queue: try again after Retry-After).","An empty list may be temporary: try again in a minute.","The x-credits-cost and x-credits-remaining headers come on 200 responses, on 402, and on errors refunded after the charge (such as 404 and 503, with cost 0.00); they do not come on 401, 429, or validation 400. They always carry two decimal places (for example 0.10 and 4.90). In the JSON body, numbers are numeric and do not keep trailing zeros."],"summary":"Live detail","description":"Revenue, viewers, products, and GPM of a live.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,20}$"},"description":"Live id.","example":"7688869399273065237"},{"name":"region","in":"query","required":false,"schema":{"type":"string","enum":["BR","US"]},"description":"Market. Defaults to BR. Accepts BR and US."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,30,90]},"description":"Window in days. Defaults to 7.","example":7}],"responses":{"200":{"description":"Response.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveDetailResponse"},"example":{"data":{"id":"7688869399273065237","title":"Parafusadeira e furadeira 48 vol","creator":{"id":"9993000000000000007","handle":"@criador_mock_0013"},"startedAt":"2026-09-23T23:01:23.000Z","endedAt":"2026-09-29T23:09:13.000Z","durationSeconds":518870,"productCount":223,"viewers":3868783,"revenue":867470.15,"gpm":224.22,"top3ProductIds":[],"recordType":"SHORT"},"meta":{"currency":"BRL","window":7,"fetchedAt":"2026-10-02T15:00:00.000Z"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit (rate_limited) or hourly quota of new lookups per key and per account (miss_quota_exceeded). Cached lookups do not count toward the quota. See the Retry-After header. Nothing is charged.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"limit":{"summary":"limit","value":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"12"}},"new lookups quota":{"summary":"new lookups quota","value":{"error":"miss_quota_exceeded","message":"The limit of new lookups in the last 60 minutes for your account or key was reached (cached lookups do not count). The window is rolling: slots come back gradually, the first one in 19 min, as given by the Retry-After header.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"1090"}}}}}},"503":{"description":"Data service unavailable at the moment. Nothing is charged. The error field gives the reason.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"30"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"unavailable":{"summary":"unavailable","value":{"error":"upstream_unavailable","message":"Live data lookup is unavailable right now. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"30"}},"budget":{"summary":"budget","value":{"error":"upstream_budget_exceeded","message":"The live lookup budget is used up for now. Try again later.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"Retry-After":"3600"}},"turned off":{"summary":"turned off","value":{"error":"upstream_disabled","message":"Live data lookup is turned off.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{}}}}}}}}},"/v1/brecha":{"get":{"operationId":"listBrecha","tags":["Brecha"],"x-notes":["Each page has 10 items and costs 0.10 credits. There is no pageSize: sending it returns 400. Pages run from 1 to 50.","An empty page or one past the end also costs 0.10 credits, as with any list. A validation error (400) does not consume credits.","Only products already measured by the video rotation are included (the head of the catalog by revenue, revisited every few days). A product without a measurement does not appear, and total may be small.","By default the list returns the open and tight stages. closed only appears when requested in stage. summary.stageTotals counts the full cut, before the stage filter.","minCommission is a percentage (15 is 15%), default 10; 0 turns off the floor. minRevenue30d is the minimum revenue over 30 days in the market currency, default 10000.","commission and the newcomer* fractions are fractions (0.15 is 15%). meta.dataUpTo is the most recent day of data.","The field list may gain new items without notice: do not treat an unknown field as an error.","region accepts BR (default) and US. US data comes as stored: names in English and values in USD (meta.currency tells the currency). While the US catalog is not visible, the US response comes back empty, with a null meta.dataUpTo, and costs 0.00 (nothing is charged). With sortBy=acceleration, a product without the yesterday and 30-day windows from the same collection has no value and goes to the end of the list, as in BR.","In US Brecha the revenue floor (minRevenue30d, default 10000) applies in dollars, like any value of the market."],"summary":"Products with room for new creators","description":"Lists the products with proven demand and room for new creators (the Brecha, or \"gap\"), with the stage of each one (open, tight, or closed), the newcomer's leverage, and the estimated commission that creators split.","x-credit-cost":"0.1","security":[{"bearerAuth":[]}],"parameters":[{"name":"region","in":"query","required":false,"description":"Market. Defaults to BR. Accepts BR and US. While the US catalog is not visible, the US response comes back empty (404 on detail) and nothing is charged.","schema":{"type":"string","enum":["BR","US"]}},{"name":"categoryL1Id","in":"query","required":false,"description":"Level 1 category id.","schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"name":"minCommission","in":"query","required":false,"description":"Minimum commission as a percentage (15 is 15%). Defaults to 10; 0 turns off the floor. Values between 0 and 1 are rejected (write 15, not 0.15).","schema":{"type":"number","minimum":0,"maximum":100},"example":15},{"name":"minRevenue30d","in":"query","required":false,"description":"Minimum revenue over 30 days, in the market currency (integer). Defaults to 10000.","schema":{"type":"integer","minimum":0},"example":20000},{"name":"stage","in":"query","required":false,"description":"Stages, separated by commas (OR between them): open, tight, closed. Defaults to open,tight.","schema":{"type":"string","example":"open,tight"},"example":"open"},{"name":"sortBy","in":"query","required":false,"description":"Descending sort order, with nulls last. Defaults to leverage.","schema":{"type":"string","enum":["leverage","revenue1d","revenue7d","commission"]},"example":"leverage"},{"name":"page","in":"query","required":false,"description":"Page, from 1 to 50. Each page has 10 items.","schema":{"type":"integer","minimum":1,"maximum":50},"example":1}],"responses":{"200":{"description":"A page of Brecha.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.10"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"4.90"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrechaPage"},"example":{"data":[{"id":"1731916815699052495","name":"Produto de exemplo A","coverUrl":"https://exemplo.invalid/capas/1731916815699052495.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052495","categoryL1":{"id":"600001","name":"Beleza"},"revenue1d":20000,"revenue7d":120000,"revenue30d":480000,"sales7d":2400,"sales30d":9600,"commission":0.15,"creatorRevenue30d":408000,"capturedCommission30d":61200,"acceleration":1.25,"state":"accelerating","rank":12,"stage":"open","newcomerLeverage":1.3,"newcomerVideoShare":0.4,"newcomerRevenueShare":0.52,"newcomerVideosMeasured":100},{"id":"1731916815699052496","name":"Produto de exemplo B","coverUrl":"https://exemplo.invalid/capas/1731916815699052496.jpg","productUrl":"https://www.tiktok.com/shop/pdp/1731916815699052496","categoryL1":{"id":"600010","name":"Casa e cozinha"},"revenue1d":5250,"revenue7d":31500,"revenue30d":126000,"sales7d":630,"sales30d":2520,"commission":0.2,"creatorRevenue30d":107100,"capturedCommission30d":21420,"acceleration":1.25,"state":"accelerating","rank":47,"stage":"tight","newcomerLeverage":0.7,"newcomerVideoShare":0.5,"newcomerRevenueShare":0.35,"newcomerVideosMeasured":64}],"pagination":{"page":1,"pageSize":10,"total":33,"totalPages":4},"summary":{"stageTotals":{"open":21,"tight":12,"closed":4}},"meta":{"dataUpTo":"2026-10-01","currency":"BRL"}}}}},"400":{"description":"Invalid or unknown parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_error","message":"pageSize must be one of the following values: 10","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"402":{"description":"Insufficient credits. Includes required and available, in credits.","headers":{"x-credits-cost":{"description":"x-credits-cost","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"x-credits-remaining","schema":{"type":"string"},"example":"0.05"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsufficientCreditsError"},"example":{"error":"insufficient_credits","message":"Insufficient credits.","required":0.1,"available":0.05,"requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}},"429":{"description":"Request limit exceeded. See the Retry-After header.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/v1/account/usage":{"get":{"operationId":"getUsage","tags":["Account"],"x-notes":["Balance and entries in decimal credits. The delta of a debit is negative.","Shows only the owner of the key used in the request."],"summary":"Balance and recent usage","description":"Credit balance of the account that owns the key and the latest ledger entries: purchases, debits, and refunds.","x-credit-cost":"0","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Credit balance and recent entries.","headers":{"x-credits-cost":{"description":"Credits charged for this response, always with two decimal places (e.g. 0.10).","schema":{"type":"string"},"example":"0.00"},"x-credits-remaining":{"description":"Remaining balance in credits, always with two decimal places (e.g. 4.90).","schema":{"type":"string"},"example":"5.00"},"x-request-id":{"description":"Request identifier, generated by Sendyx. Include it when contacting support.","schema":{"type":"string","format":"uuid"},"example":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUsageResponse"},"example":{"data":{"balance":5,"recent":[{"createdAt":"2026-10-02T10:00:00.000Z","kind":"debit","delta":-0.1,"balanceAfter":4.9,"route":"GET /v1/products"},{"createdAt":"2026-10-02T09:30:00.000Z","kind":"refund","delta":0.1,"balanceAfter":5,"route":"GET /v1/products/{id}"}]},"meta":{"dataUpTo":null,"currency":null}}}}},"401":{"description":"Missing or invalid key.","headers":{"WWW-Authenticate":{"description":"Expected authentication scheme.","schema":{"type":"string"},"example":"Bearer"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"examples":{"invalid key":{"summary":"invalid key","value":{"error":"invalid_credentials","message":"Invalid API key.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}},"no key":{"summary":"no key","value":{"error":"missing_credentials","message":"Send the key in the Authorization header: Bearer <key>.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"},"x-headers":{"WWW-Authenticate":"Bearer"}}}}}},"429":{"description":"Request limit exceeded. See the Retry-After header.","headers":{"Retry-After":{"description":"Seconds until you can try again.","schema":{"type":"string"},"example":"12"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again shortly.","requestId":"3f6c1d2e-8a4b-4c7e-9b1a-5d2e7f9a0c11"}}}}}}},"/health/live":{"get":{"operationId":"healthLive","summary":"Liveness","security":[],"responses":{"200":{"description":"The process is up."}}}},"/docs":{"get":{"operationId":"docs","summary":"HTML reference","security":[],"responses":{"200":{"description":"HTML page."}}}},"/openapi.json":{"get":{"operationId":"openapi","summary":"This contract","security":[],"responses":{"200":{"description":"OpenAPI document."}}}}},"components":{"parameters":{"SandboxScenario":{"name":"x-sandbox-scenario","in":"header","required":false,"description":"Test key only: forces the corresponding error (no cost and no effect). A production key ignores the header.","schema":{"type":"string","enum":["insufficient_credits","rate_limited","not_found","upstream_unavailable"]}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key: sdx_live_... (production, charges credits) or sdx_test_... (test, never charges)."}},"schemas":{"Error":{"type":"object","required":["error","message","requestId"],"properties":{"error":{"type":"string","enum":["missing_credentials","invalid_credentials","insufficient_credits","rate_limited","validation_error","not_found","internal_error","upstream_disabled","upstream_budget_exceeded","upstream_unavailable","contacts_daily_limit","miss_quota_exceeded","daily_spend_limit_exceeded","terms_not_accepted"]},"message":{"type":"string"},"requestId":{"type":"string"}}},"InsufficientCreditsError":{"type":"object","required":["error","message","requestId","required","available"],"properties":{"error":{"type":"string","enum":["insufficient_credits"]},"message":{"type":"string"},"requestId":{"type":"string"},"required":{"type":"number","description":"Credits the request requires."},"available":{"type":"number","description":"Credits available."}}},"Meta":{"type":"object","properties":{"dataUpTo":{"type":"string","nullable":true,"description":"Most recent day of data (yyyy-MM-dd)."},"currency":{"type":"string","enum":["BRL","USD"]}}},"Product":{"type":"object","properties":{"id":{"type":"string","description":"Product id on TikTok Shop. Use it in GET /v1/products/{id}."},"name":{"type":"string","description":"Product name."},"coverUrl":{"type":"string","nullable":true,"description":"Cover URL."},"productUrl":{"type":"string","description":"Product page on TikTok Shop."},"categoryL1":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Level 1 category (id and name)."},"categoryL2":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Level 2 category, when it exists."},"categoryL3":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Level 3 category, when it exists."},"shopName":{"type":"string","nullable":true,"description":"Shop name."},"reviewCount":{"type":"integer","nullable":true,"description":"Number of reviews. Only once the product detail has been collected."},"minPrice":{"type":"integer","nullable":true,"description":"Lowest variation price, in cents. Only once the product detail has been collected."},"maxPrice":{"type":"integer","nullable":true,"description":"Highest variation price, in cents. Only once the product detail has been collected."},"commission":{"type":"number","nullable":true,"description":"Fraction: 0.1 is 10%."},"revenue":{"type":"number","nullable":true,"description":"Revenue in the requested window, in the market currency."},"sales":{"type":"integer","nullable":true,"description":"Units sold in the requested window."},"revenue30d":{"type":"number","nullable":true,"description":"Revenue over the last 30 days, in the market currency."},"sales30d":{"type":"integer","nullable":true,"description":"Units sold in the last 30 days."},"sales7d":{"type":"integer","nullable":true,"description":"Units sold in the last 7 days."},"revenuePerCreator":{"type":"number","nullable":true,"description":"30-day revenue divided by the measured creators. Only exists when the creator count was measured; otherwise null."},"acceleration":{"type":"number","nullable":true,"description":"Yesterday's pace divided by the 30-day daily average. Above 1 means acceleration."},"trend":{"type":"array","items":{"type":"number"},"description":"Sales per day to draw a curve, from the oldest day to the most recent."},"state":{"type":"string","nullable":true,"enum":["exploding","accelerating","cooling","stable","idle"],"description":"Product momentum: exploding, accelerating, cooling, stable, or idle."},"launchDate":{"type":"string","nullable":true,"description":"Launch date on TikTok Shop (yyyy-MM-dd), when measured."},"rank":{"type":"integer","nullable":true,"description":"Position in the catalog by 7-day sales."},"prevRank":{"type":"integer","nullable":true,"description":"Position in the previous cycle."},"channel":{"type":"object","properties":{"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"creatorsMeasured":{"type":"integer","nullable":true}},"description":"Revenue by channel (video and live) and measured creators."}}},"ProductDetail":{"type":"object","properties":{"id":{"type":"string","description":"Product id on TikTok Shop. Use it in GET /v1/products/{id}."},"name":{"type":"string","description":"Product name."},"coverUrl":{"type":"string","nullable":true,"description":"Cover URL."},"productUrl":{"type":"string","description":"Product page on TikTok Shop."},"categoryL1":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Level 1 category (id and name)."},"categoryL2":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Level 2 category, when it exists."},"categoryL3":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Level 3 category, when it exists."},"shopName":{"type":"string","nullable":true,"description":"Shop name."},"reviewCount":{"type":"integer","nullable":true,"description":"Number of reviews. Only once the product detail has been collected."},"minPrice":{"type":"integer","nullable":true,"description":"Lowest variation price, in cents. Only once the product detail has been collected."},"maxPrice":{"type":"integer","nullable":true,"description":"Highest variation price, in cents. Only once the product detail has been collected."},"commission":{"type":"number","nullable":true,"description":"Fraction: 0.1 is 10%."},"revenue":{"type":"number","nullable":true,"description":"Revenue in the requested window, in the market currency."},"sales":{"type":"integer","nullable":true,"description":"Units sold in the requested window."},"revenue30d":{"type":"number","nullable":true,"description":"Revenue over the last 30 days, in the market currency."},"sales30d":{"type":"integer","nullable":true,"description":"Units sold in the last 30 days."},"sales7d":{"type":"integer","nullable":true,"description":"Units sold in the last 7 days."},"revenuePerCreator":{"type":"number","nullable":true,"description":"30-day revenue divided by the measured creators. Only exists when the creator count was measured; otherwise null."},"acceleration":{"type":"number","nullable":true,"description":"Yesterday's pace divided by the 30-day daily average. Above 1 means acceleration."},"trend":{"type":"array","items":{"type":"number"},"description":"Sales per day to draw a curve, from the oldest day to the most recent."},"state":{"type":"string","nullable":true,"enum":["exploding","accelerating","cooling","stable","idle"],"description":"Product momentum: exploding, accelerating, cooling, stable, or idle."},"launchDate":{"type":"string","nullable":true,"description":"Launch date on TikTok Shop (yyyy-MM-dd), when measured."},"rank":{"type":"integer","nullable":true,"description":"Position in the catalog by 7-day sales."},"prevRank":{"type":"integer","nullable":true,"description":"Position in the previous cycle."},"channel":{"type":"object","properties":{"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"creatorsMeasured":{"type":"integer","nullable":true}},"description":"Revenue by channel (video and live) and measured creators."},"revenue7d":{"type":"number","nullable":true,"description":"Revenue over the last 7 days."},"revenue1d":{"type":"number","nullable":true,"description":"Yesterday's revenue."},"saturation":{"type":"number","nullable":true,"description":"Creators per 10,000 of revenue over 30 days. Only exists when the creator count was measured; otherwise null."}}},"ProductPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer","enum":[10]},"total":{"type":"integer"},"totalPages":{"type":"integer"}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"BrechaItem":{"type":"object","properties":{"id":{"type":"string","description":"Product id on TikTok Shop. Use it in GET /v1/products/{id}."},"name":{"type":"string","description":"Product name."},"coverUrl":{"type":"string","nullable":true,"description":"Cover URL."},"productUrl":{"type":"string","description":"Product page on TikTok Shop."},"categoryL1":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"Level 1 category (id and name)."},"revenue1d":{"type":"number","nullable":true,"description":"Yesterday's revenue, in the market currency."},"revenue7d":{"type":"number","nullable":true,"description":"Revenue over the last 7 days."},"revenue30d":{"type":"number","nullable":true,"description":"Revenue over the last 30 days."},"sales7d":{"type":"integer","nullable":true,"description":"Units sold in the last 7 days."},"sales30d":{"type":"integer","nullable":true,"description":"Units sold in the last 30 days."},"commission":{"type":"number","nullable":true,"description":"Affiliate commission, as a fraction (0.15 is 15%)."},"creatorRevenue30d":{"type":"number","nullable":true,"description":"30-day revenue that went through creators (video plus live). The rest comes from search, ads, and the shop's own traffic."},"capturedCommission30d":{"type":"number","nullable":true,"description":"Estimate of the commission creators split over 30 days: creatorRevenue30d times commission. Null when the channel was not measured."},"acceleration":{"type":"number","nullable":true,"description":"Yesterday's pace divided by the 30-day daily average. Above 1 means acceleration."},"state":{"type":"string","nullable":true,"enum":["exploding","accelerating","cooling","stable","idle"],"description":"Product momentum: exploding, accelerating, cooling, stable, or idle."},"rank":{"type":"integer","nullable":true,"description":"Position in the catalog by 7-day sales."},"stage":{"type":"string","enum":["open","tight","closed"],"description":"Room for new creators: open (the newcomer gets at least the share it produces), tight (gets between half and the share it produces), or closed (gets less than half)."},"newcomerLeverage":{"type":"number","nullable":true,"description":"Share of video revenue that goes to new creators divided by the share of videos they record. 1.0 is the boundary: above it, the newcomer earns more than the product average."},"newcomerVideoShare":{"type":"number","nullable":true,"description":"Fraction of the measured videos made by creators with less than 12 months on TikTok."},"newcomerRevenueShare":{"type":"number","nullable":true,"description":"Fraction of the revenue of those videos that goes to new creators."},"newcomerVideosMeasured":{"type":"integer","nullable":true,"description":"How many videos went into the calculation (minimum 10)."}}},"BrechaPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BrechaItem"}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer","enum":[10]},"total":{"type":"integer"},"totalPages":{"type":"integer"}}},"summary":{"type":"object","properties":{"stageTotals":{"type":"object","description":"Products per stage in the cut, before the stage filter.","properties":{"open":{"type":"integer"},"tight":{"type":"integer"},"closed":{"type":"integer"}}}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"ProductDetailResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProductDetail"},"meta":{"$ref":"#/components/schemas/Meta"}}},"RankingPagination":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer","enum":[10]},"hasMore":{"type":"boolean","description":"There may be more items on the next page."}}},"RankingMeta":{"type":"object","properties":{"currency":{"type":"string","enum":["BRL","USD"]},"window":{"type":"integer","description":"Window used, in days."},"fetchedAt":{"type":"string","format":"date-time","description":"Moment the data was obtained."}}},"VideoRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Video id."},"title":{"type":"string","nullable":true},"creator":{"type":"object","properties":{"id":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"The profile's public @, including the @."}}},"revenue":{"type":"number","nullable":true,"description":"Video revenue in the window, in the market currency."},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Raw number from the source. Unit NOT confirmed: do not treat it as a percentage."},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"shares":{"type":"integer","nullable":true},"comments":{"type":"integer","nullable":true},"publishedAt":{"type":"string","nullable":true,"description":"Text as the source sends it (yyyy/MM/dd HH:mm:ss). Time zone not confirmed."},"creatorDebut":{"type":"string","nullable":true,"description":"Creator debut date (yyyy-MM-dd)."},"isAd":{"type":"boolean","nullable":true,"description":"Whether the video is an ad."},"isAiGenerated":{"type":"boolean","nullable":true,"description":"Whether the video was generated by AI."},"adsRoas":{"type":"number","nullable":true},"adRevenueRatio":{"type":"number","nullable":true,"description":"Raw ratio, unit not confirmed."},"adViewRatio":{"type":"number","nullable":true,"description":"Raw ratio, unit not confirmed (it has appeared above 1)."}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CreatorRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Creator id."},"nickname":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"The profile's public @, including the @."},"followers":{"type":"integer","nullable":true},"contentViews":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true,"description":"Creator revenue with the product in the window."},"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Raw number from the source. Unit NOT confirmed: do not treat it as a percentage."},"categoryNames":{"type":"array","items":{"type":"string"},"description":"Comes empty in the per-product ranking."},"categoryIds":{"type":"array","items":{"type":"string"}},"tertiaryCategoryNames":{"type":"array","items":{"type":"string"}},"tertiaryCategoryIds":{"type":"array","items":{"type":"string"}}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"VideoDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"creator":{"type":"object","properties":{"id":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"The profile's public @, including the @."}}},"productCount":{"type":"integer","nullable":true,"description":"How many products the video promotes."},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"shares":{"type":"integer","nullable":true},"comments":{"type":"integer","nullable":true},"gpm":{"type":"number","nullable":true,"description":"Revenue per thousand views."},"adsViews":{"type":"integer","nullable":true},"adsRoas":{"type":"number","nullable":true},"adsPeriod":{"type":"integer","nullable":true},"adCpa":{"type":"number","nullable":true},"adViewRatio":{"type":"number","nullable":true,"description":"Raw ratio, unit not confirmed."},"duration":{"type":"number","nullable":true,"description":"Video duration. Unit not confirmed (probably seconds)."},"isAd":{"type":"boolean","nullable":true},"isAiGenerated":{"type":"boolean","nullable":true},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CreatorDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"nickname":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"The profile's public @, including the @."},"region":{"type":"string","nullable":true},"status":{"type":"string","nullable":true},"followers":{"type":"integer","nullable":true},"newFollowers":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"unitPrice":{"type":"number","nullable":true},"videoViews":{"type":"integer","nullable":true},"liveViews":{"type":"integer","nullable":true},"videoGpm":{"type":"number","nullable":true},"liveGpm":{"type":"number","nullable":true},"videoCount":{"type":"integer","nullable":true},"liveCount":{"type":"integer","nullable":true},"shopCount":{"type":"integer","nullable":true},"productCount":{"type":"integer","nullable":true},"top3ProductIds":{"type":"array","items":{"type":"string"}},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CreatorContactsResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"creator":{"type":"object","properties":{"id":{"type":"string"},"nickname":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"The profile's public @, including the @."},"region":{"type":"string","nullable":true},"status":{"type":"string","nullable":true},"followers":{"type":"integer","nullable":true},"newFollowers":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"unitPrice":{"type":"number","nullable":true},"videoViews":{"type":"integer","nullable":true},"liveViews":{"type":"integer","nullable":true},"videoGpm":{"type":"number","nullable":true},"liveGpm":{"type":"number","nullable":true},"videoCount":{"type":"integer","nullable":true},"liveCount":{"type":"integer","nullable":true},"shopCount":{"type":"integer","nullable":true},"productCount":{"type":"integer","nullable":true},"top3ProductIds":{"type":"array","items":{"type":"string"}},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series."}},"description":"Only appears when the creator had not yet been looked up in the last 24 hours."},"contacts":{"type":"object","properties":{"email":{"type":"string","nullable":true},"tiktok":{"type":"string","nullable":true},"whatsapp":{"type":"string","nullable":true},"line":{"type":"string","nullable":true},"facebook":{"type":"string","nullable":true},"instagram":{"type":"string","nullable":true},"zalo":{"type":"string","nullable":true}},"description":"Personal data. See the notes for this route."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CategoryRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"rank":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Raw number from the source. Unit NOT confirmed: do not treat it as a percentage."},"top3ShopRevenueRatio":{"type":"number","nullable":true,"description":"Raw ratio, unit not confirmed."},"averageRevenue":{"type":"number","nullable":true}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CategoryDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"shopCount":{"type":"integer","nullable":true},"activeProductCount":{"type":"integer","nullable":true},"liveRevenue":{"type":"number","nullable":true},"videoRevenue":{"type":"number","nullable":true},"affiliateRevenue":{"type":"number","nullable":true},"selfOperatedRevenue":{"type":"number","nullable":true},"shoppingMallRevenue":{"type":"number","nullable":true},"averageShopRevenue":{"type":"number","nullable":true},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Raw number from the source. Unit NOT confirmed: do not treat it as a percentage."},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"ShopRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"rank":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Raw number from the source. Unit NOT confirmed: do not treat it as a percentage."},"unitPrice":{"type":"number","nullable":true},"shopType":{"type":"string","nullable":true},"onSaleProductCount":{"type":"integer","nullable":true},"affiliateRevenue":{"type":"number","nullable":true},"selfPromotionRevenue":{"type":"number","nullable":true},"shoppingMallRevenue":{"type":"number","nullable":true},"categoryNames":{"type":"array","items":{"type":"string"}},"categoryIds":{"type":"array","items":{"type":"string"}}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"ShopDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sellerType":{"type":"string","nullable":true},"revenue":{"type":"number","nullable":true},"sales":{"type":"integer","nullable":true},"unitPrice":{"type":"number","nullable":true},"shoppingMallRevenue":{"type":"number","nullable":true},"selfAccountRevenue":{"type":"number","nullable":true},"affiliateRevenue":{"type":"number","nullable":true},"creatorCount":{"type":"integer","nullable":true},"productCount":{"type":"integer","nullable":true},"videoCount":{"type":"integer","nullable":true},"liveCount":{"type":"integer","nullable":true},"top3ProductIds":{"type":"array","items":{"type":"string"}},"revenueTrend":{"type":"array","nullable":true,"items":{"type":"number"},"description":"revenueTrend is a daily revenue series WITHOUT dates: the source does not label the points and the chronological order is not proven (the 30-day window returned 30 points). Use it as a curve, not as a dated series."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"LiveRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","nullable":true},"creator":{"type":"object","properties":{"id":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"The profile's public @, including the @."}}},"startedAt":{"type":"string","format":"date-time","nullable":true},"endedAt":{"type":"string","format":"date-time","nullable":true},"durationSeconds":{"type":"integer","nullable":true,"description":"Duration in seconds (matches end minus start)."},"revenue":{"type":"number","nullable":true},"unitPrice":{"type":"number","nullable":true},"views":{"type":"integer","nullable":true},"recordType":{"type":"string","nullable":true,"description":"Value from the source (for example SHORT, SCREENSHOT). Meaning not confirmed."}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"LiveDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","nullable":true},"creator":{"type":"object","properties":{"id":{"type":"string","nullable":true},"handle":{"type":"string","nullable":true,"description":"The profile's public @, including the @."}}},"startedAt":{"type":"string","format":"date-time","nullable":true},"endedAt":{"type":"string","format":"date-time","nullable":true},"durationSeconds":{"type":"integer","nullable":true,"description":"Duration in seconds."},"productCount":{"type":"integer","nullable":true},"viewers":{"type":"integer","nullable":true},"revenue":{"type":"number","nullable":true},"gpm":{"type":"number","nullable":true},"top3ProductIds":{"type":"array","items":{"type":"string"}},"recordType":{"type":"string","nullable":true,"description":"Value from the source. Meaning not confirmed."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"ProductAnalysisResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"productId":{"type":"string"},"region":{"type":"string","nullable":true},"language":{"type":"string","nullable":true},"highlights":{"type":"array","items":{"type":"object","properties":{"keyword":{"type":"string","nullable":true},"text":{"type":"string","nullable":true}}},"description":"Product highlights."},"attributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","nullable":true},"value":{"type":"string","nullable":true}}},"description":"Product attributes."}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"RankedProductRankingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Product id on TikTok Shop."},"name":{"type":"string","nullable":true},"coverUrl":{"type":"string","nullable":true,"description":"Cover URL, when the source provides it."},"shop":{"type":"object","properties":{"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true}}},"revenue":{"type":"number","nullable":true,"description":"Product revenue in the window, in the market currency."},"sales":{"type":"integer","nullable":true,"description":"Units sold in the window."},"unitPrice":{"type":"number","nullable":true,"description":"Revenue divided by sales, in the market currency. It is not a list price."},"commission":{"type":"number","nullable":true,"description":"Fraction (0.11 is 11%). Inferred unit, not confirmed."},"revenueGrowthRate":{"type":"number","nullable":true,"description":"Raw number from the source. Unit NOT confirmed: do not treat it as a percentage."},"videoRevenue":{"type":"number","nullable":true},"liveRevenue":{"type":"number","nullable":true},"showcaseRevenue":{"type":"number","nullable":true},"launchDate":{"type":"string","nullable":true,"description":"Launch date on TikTok Shop (yyyy-MM-dd)."},"skuCount":{"type":"integer","nullable":true,"description":"Number of SKUs, when the source provides it."}}}},"pagination":{"$ref":"#/components/schemas/RankingPagination"},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"ProductTrendResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"productId":{"type":"string"},"series":{"type":"array","description":"The dates in series are DERIVED, not provided by the source: the last point is the day before the UTC date of meta.fetchedAt and each earlier point steps back one day. The rule was checked against the real daily series (63% of the positions matched within 0.5%), but the source may revise values already published, and around the UTC day rollover the label may shift by one day (assumption not proven at those hours). The number of points depends on the source and does not necessarily follow the window. A product without a series returns an empty series, with no error.","items":{"type":"object","properties":{"date":{"type":"string","description":"Derived day (yyyy-MM-dd, UTC)."},"revenue":{"type":"number","description":"Revenue of the day, in the market currency."}}}}}},"meta":{"$ref":"#/components/schemas/RankingMeta"}}},"CategoryNode":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"level":{"type":"integer","enum":[1,2,3]},"parentId":{"type":"string","nullable":true},"productCount":{"type":"integer"},"children":{"type":"array","items":{"$ref":"#/components/schemas/CategoryNode"}}}},"CategoryTreeResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"nodes":{"type":"array","items":{"$ref":"#/components/schemas/CategoryNode"}},"catalogTotal":{"type":"integer"}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"AccountUsageResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"balance":{"type":"number","description":"Balance in credits."},"recent":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"kind":{"type":"string","enum":["purchase","debit","refund","reversal","grant"]},"delta":{"type":"number","description":"Change in credits (negative on a debit)."},"balanceAfter":{"type":"number"},"route":{"type":"string","nullable":true}}}}}},"meta":{"type":"object","properties":{"dataUpTo":{"type":"string","nullable":true},"currency":{"type":"string","nullable":true}}}}}}}}