openapi: 3.2.0 info: contact: email: support@getanyapi.com description: 'Any API, one wallet, USD, no subscriptions. Each API is a single discovered operation: send the normalized input, get a normalized result. Prices and payment outcomes are reported in USD; each operation documents the settlement policy for its enabled payment rails.' title: Any Tiktok API version: 1.0.0 x-guidance: 'Use each operation''s published method and path with its normalized JSON input (see the operation requestBody). Before setting a client or tool timeout, GET /v1/apis/{sku} and inspect its trailing-30-day latency p50/p95/p99 and sample; p99 is an observation, not a maximum. To pay: send your AnyAPI key (Authorization: Bearer, billed from your USD wallet). For operations that advertise an inline rail, pay per call inline with x402 - call with no key, receive HTTP 402 with a PAYMENT-REQUIRED header, then retry with the PAYMENT-SIGNATURE header (base, no account needed); or pay per call inline with MPP (Machine Payments Protocol) - call with no key, receive HTTP 402 with a WWW-Authenticate: Payment challenge, then retry with the Authorization: Payment header (tempo, no account needed). x402 settles after execution; execution failure is reported as released; mpp settles before execution; execution failure is reported as charged_undelivered.' servers: - url: https://api.getanyapi.com security: - bearerAuth: [] - apiKeyAuth: [] tags: - name: tiktok x-group: TikTok paths: /v1/run/tiktok.ad_library_ad: post: description: 'Fetch full details for a single TikTok ad (brand, title, spend, CTR, objectives, landing page, and video info). **Price:** \$1.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Ad Library Ad pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_ad_library_ad parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: adId: '7648493525660270600' schema: additionalProperties: false example: adId: '7648493525660270600' properties: adId: description: TikTok Top Ads material/ad ID, or a Top Ads detail URL (e.g. 7648493525660270600). type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - adId title: TikTok Ad Library Ad input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: adId: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true adTitle: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true brandName: type: string comments: type: integer cost: type: number coverUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true ctr: type: number industry: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true landingPage: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer objective: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true shares: type: integer videoUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - adId - adTitle - brandName - cost - ctr - likes - comments - shares - industry - objective - landingPage - videoUrl - coverUrl type: object found: type: boolean required: - found - data title: TikTok Ad Library Ad output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Ad Library Ad tags: - tiktok x-mint: href: /api-reference/tiktok/ad-library-ad x-payment-info: price: currency: USD max: '0.002000' min: '0.001200' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.002000' min: '0.001200' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.002000' min: '0.001200' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.ad_library_search: post: description: 'Search TikTok''s ad library by keyword (top ads with brand, title, spend, CTR, likes, and video info). **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** TikTok Ad Library Search pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_ad_library_search parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: limit: 20 objective: conversions period: 30 query: spotify schema: additionalProperties: false example: limit: 20 objective: conversions period: 30 query: spotify properties: adFormat: description: Ad format filter. enum: - spark_ads - non_spark_ads type: string adLanguage: description: Ad language filter. enum: - en - es - ar - vi - th - de - id - pt - fr - ms - nl - ja - it - ro - zh-Hant - ko type: string advertiserName: description: Filter to a specific advertiser by name (searches the public TikTok Ads Library by advertiser). type: string cursor: description: Page number for pagination (defaults to 1). type: string duration: description: Video duration bucket filter. enum: - under_10s - 10_20s - 20_30s - 30_40s - 40_50s - over_50s type: string industry: description: Advertiser industry filter. enum: - apparel_accessories - appliances - apps - baby_kids_maternity - beauty_personal_care - business_services - ecommerce_non_app - education - financial_services - food_beverage - games - health - home_improvement - household_products - life_services - news_entertainment - pets - sports_outdoor - tech_electronics - travel - vehicle_transportation type: string likes: description: Likes percentile bucket filter (top_1_20 is the top-performing 20 percent). enum: - top_1_20 - top_21_40 - top_41_60 - top_61_80 - top_81_100 type: string limit: default: 20 description: Results per page, with an existing maximum of 50 (default 20). Use a canonical JSON integer; legacy numeric strings remain accepted. maximum: 50 minimum: 0 pattern: ^0*(?:[0-9]|[1-4][0-9]|50)$ type: - integer - string objective: description: Campaign objective filter. enum: - app_installs - conversions - lead_generation - product_sales - reach - traffic - video_views type: string orderBy: description: 'Sort metric: for_you, impression, play_2s_rate, play_6s_rate, cvr, ctr, or like.' type: string period: description: Time window for top ads. Use the canonical JSON integer 7, 30, or 180; legacy numeric strings remain accepted. enum: - 7 - 30 - 180 - '7' - '30' - '180' type: - integer - string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer query: description: Keyword to search ad titles and content (e.g. spotify). type: string region: description: Country code (defaults to US). type: string required: - query title: TikTok Ad Library Search input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: ads: description: Populated whenever the provider has data for the entity. items: properties: adId: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true adTitle: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true brandName: type: string cost: type: number coverUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true ctr: type: number industry: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer objective: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true videoUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - adId - adTitle - brandName - cost - ctr - likes - industry - objective - videoUrl - coverUrl type: object type: array x-anyapi-must-populate: true hasMore: type: boolean nextCursor: description: Opaque cursor for the next page of ads, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' total: type: integer required: - nextCursor - hasMore - total - ads type: object found: type: boolean required: - found - data title: TikTok Ad Library Search output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Ad Library Search tags: - tiktok x-mint: href: /api-reference/tiktok/ad-library-search x-payment-info: price: amount: '0.002000' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.002000' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.002000' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.ad_transparency_search: post: description: 'Search TikTok''s EU Commercial Content Library by keyword or advertiser ID. **Price:** \$0.90 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** TikTok Ad Transparency Search pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_ad_transparency_search parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: days: 30 limit: 20 query: nike region: DE schema: additionalProperties: false anyOf: - required: - query - required: - advertiserId example: days: 30 limit: 20 query: nike region: DE properties: advertiserId: description: TikTok Commercial Content Library advertiser ID. Provide advertiserId or query. minLength: 1 type: string cursor: description: Search cursor from a previous response's nextCursor. type: string days: default: 30 description: Number of days of Commercial Content Library history to search, from 1 to 365. Defaults to 30. maximum: 365 minimum: 1 type: integer limit: default: 20 description: Maximum number of ads to return, from 1 to 50. Defaults to 20. Billing is flat per request. maximum: 50 minimum: 1 type: integer offset: default: 0 description: Zero-based result offset. Defaults to 0. minimum: 0 type: integer preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer query: description: Keyword to search in TikTok's EU Commercial Content Library. Provide query or advertiserId. minLength: 1 type: string region: default: DE description: Region code for the transparency search. Defaults to DE. type: string sort: default: last_shown_date,desc description: Upstream sort expression. Defaults to last_shown_date,desc. type: string title: TikTok Ad Transparency Search input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: Ad transparency search results and pagination, or null when no ads were found. oneOf: - type: 'null' - additionalProperties: false properties: ads: description: Commercial Content Library ad records returned for the search. Populated whenever the provider has data for the entity. items: properties: advertiserName: description: Advertiser display name associated with the ad. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true firstShownUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. When the ad was first shown. Populated whenever the provider has data for the entity. type: number x-anyapi-must-populate: true format: description: Commercial Content Library creative format code for the ad. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true id: description: TikTok Commercial Content Library ad identifier. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true image: description: Signed cover image URL exactly as returned by the Commercial Content Library. Populated whenever the provider has data for the entity. format: uri type: string x-anyapi-must-populate: true lastShownUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. When the ad was last shown. Populated whenever the provider has data for the entity. type: number x-anyapi-must-populate: true status: description: Commercial Content Library audit status code for the ad. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true videoUrl: description: Signed video asset URL exactly as returned by the Commercial Content Library. Populated whenever the provider has data for the entity. format: uri type: string x-anyapi-must-populate: true required: - id type: object type: array x-anyapi-must-populate: true hasMore: description: Whether the Commercial Content Library reports more matching ads. Populated whenever the provider has data for the entity. type: boolean x-anyapi-must-populate: true nextCursor: description: Search cursor to pass as cursor on a subsequent request, or null when there is no next page. Populated whenever the provider has data for the entity. type: - string - 'null' x-anyapi-must-populate: true offset: description: Zero-based result offset reported for this page. type: integer region: description: Region code applied to this transparency search. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true total: description: Total number of matching ads reported by the Commercial Content Library. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true required: - nextCursor - hasMore - total - offset - region - ads type: object found: description: True when TikTok's EU Commercial Content Library returned at least one ad. type: boolean required: - found - data title: TikTok Ad Transparency Search output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Ad Transparency Search tags: - tiktok x-mint: href: /api-reference/tiktok/ad-transparency-search x-payment-info: price: amount: '0.000900' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.001000' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.000900' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.audience_demographics: post: description: 'Get the audience country breakdown (follower count and share per country) for a TikTok creator by handle. **Price:** \$18.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Audience Demographics pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_audience_demographics parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: handle: shakira schema: additionalProperties: false example: handle: shakira properties: handle: description: TikTok username without the leading @ (e.g. "shakira"). type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - handle title: TikTok Audience Demographics input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: audienceLocations: items: properties: count: type: integer country: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true countryCode: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true percentage: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - country - countryCode - count - percentage type: object type: array required: - audienceLocations type: object found: type: boolean required: - found - data title: TikTok Audience Demographics output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Audience Demographics tags: - tiktok x-mint: href: /api-reference/tiktok/audience-demographics x-payment-info: price: currency: USD max: '0.052000' min: '0.018000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.052000' min: '0.018000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.052000' min: '0.018000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.comment_replies: post: description: 'List the replies to a TikTok comment with cursor pagination (text, author, likes). **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Comment Replies pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_comment_replies parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: commentId: '7623828115408274207' url: https://www.tiktok.com/@stoolpresidente/video/7623818255903329566 schema: additionalProperties: false example: commentId: '7623828115408274207' url: https://www.tiktok.com/@stoolpresidente/video/7623818255903329566 properties: commentId: description: TikTok comment ID (the comment's cid from the comments endpoint). type: string cursor: description: Pagination cursor from a previous response. type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer url: description: TikTok video URL the comment belongs to. type: string required: - commentId - url title: TikTok Comment Replies input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: comments: items: properties: author: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true createdUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer text: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - id - text - author - likes - createdUtc type: object type: array nextCursor: description: Opaque cursor for the next page of comments, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' required: - comments - nextCursor type: object found: type: boolean required: - found - data title: TikTok Comment Replies output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Comment Replies tags: - tiktok x-mint: href: /api-reference/tiktok/comment-replies x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.followers: post: description: 'List the followers of a TikTok account by username, returning each follower''s profile basics. **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Followers pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_followers parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: handle: stoolpresidente schema: additionalProperties: false example: handle: stoolpresidente properties: cursor: description: Pagination cursor from a previous response's nextCursor, to fetch the next page of followers. type: string handle: description: TikTok username whose followers to list, without the @ prefix (e.g. stoolpresidente). type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - handle title: TikTok Followers input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: followers: items: properties: avatarUrl: type: string followerCount: type: integer followingCount: type: integer nickname: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true region: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true userId: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true username: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - userId - username - nickname - region - followerCount - followingCount - avatarUrl type: object type: array nextCursor: description: Opaque cursor for the next page of followers, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' total: type: integer required: - nextCursor - total - followers type: object found: type: boolean required: - found - data title: TikTok Followers output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Followers tags: - tiktok x-mint: href: /api-reference/tiktok/followers x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.following: post: description: 'List the accounts a TikTok user follows (handle, display name, follower count, bio) by username. **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Following pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_following parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: handle: stoolpresidente schema: additionalProperties: false example: handle: stoolpresidente properties: cursor: description: Pagination cursor from a previous response. type: string handle: description: TikTok username without the leading @ (e.g. "stoolpresidente"). type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer requireCursor: description: Set true if you intend to page through the following list, so the request is only served by a source that can return a nextCursor. Not all sources for this list can page, and one that can may cost more per request. type: boolean required: - handle title: TikTok Following input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: following: items: properties: bio: type: string displayName: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true followers: type: integer handle: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true region: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true videos: type: integer required: - id - handle - displayName - followers - videos - region - bio type: object type: array nextCursor: description: Opaque cursor for the next page of followed accounts, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' required: - following type: object found: type: boolean required: - found - data title: TikTok Following output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Following tags: - tiktok x-mint: href: /api-reference/tiktok/following x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.hashtag_videos: post: description: 'List recent TikTok videos for a hashtag (creator, caption, views, likes, shares). **Price:** \$1.44 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 3 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Hashtag Videos pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_hashtag_videos parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: hashtag: cooking limit: 3 schema: additionalProperties: false example: hashtag: cooking limit: 3 properties: hashtag: description: 'TikTok hashtag to fetch videos for, without the # prefix (e.g. booktok).' type: string limit: description: Maximum number of results to return (1-20, default 20). maximum: 20 minimum: 1 type: integer preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - hashtag title: TikTok hashtag videos input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: items: description: Recent TikTok video records for the hashtag. Populated whenever the provider has data for the entity. items: properties: authorHandle: description: Username of the video's creator, without the @ prefix. Empty when the upstream omits it. type: string commentCount: description: Number of comments on the video. type: integer createdUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number id: description: The video's numeric TikTok ID, as a string. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true image: description: URL of the video's cover/thumbnail image, with tracking query params stripped. Empty when the upstream omits it. type: string likeCount: description: Number of likes on the video. type: integer playCount: description: Number of views/plays of the video. type: integer shareCount: description: Number of shares of the video. type: integer text: description: The video caption text. Empty for videos with no caption. type: string url: description: Canonical tiktok.com URL of the video, with tracking query params stripped. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - id - url - createdUtc type: object type: array x-anyapi-must-populate: true required: - items type: object found: description: Whether any videos were returned for the hashtag. type: boolean required: - found - data title: TikTok hashtag videos output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Hashtag Videos tags: - tiktok x-mint: href: /api-reference/tiktok/hashtag-videos x-payment-info: price: currency: USD max: '0.006600' min: '0.001440' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.006600' min: '0.001440' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.006600' min: '0.001440' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.live: post: description: 'Check whether a TikTok creator is live and get the current live room (title, viewers, start time) by handle. **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Live pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_live parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: handle: thejustalex schema: additionalProperties: false example: handle: thejustalex properties: handle: description: TikTok username without the leading @ (e.g. "thejustalex"). type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - handle title: TikTok Live input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: coverUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true displayName: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true enterCount: type: integer handle: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true roomId: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true startTime: type: integer status: type: integer title: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true viewers: type: integer required: - handle - displayName - roomId - title - coverUrl - startTime - status - viewers - enterCount type: object found: type: boolean required: - found - data title: TikTok Live output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Live tags: - tiktok x-mint: href: /api-reference/tiktok/live x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.photos: post: description: 'Get every image in a TikTok photo-mode (slideshow) post by URL, in order, with pixel dimensions and both the clean and watermarked variant of each. Videos carry no images - use tiktok.video_download for those. **Price:** \$1.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Photos pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_photos parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: url: https://www.tiktok.com/@foodbyfranchi/video/7479916555602513174 schema: additionalProperties: false example: url: https://www.tiktok.com/@foodbyfranchi/video/7479916555602513174 properties: preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer url: description: Full TikTok photo-mode post URL. TikTok serves slideshow posts under the same /video/ path as videos, so the normal share link works. minLength: 1 type: string required: - url title: TikTok Photos input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: id: description: TikTok post id. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true images: description: Every image in the post, in the order the creator arranged them. Populated whenever the provider has data for the entity. items: properties: height: description: Pixel height of the image. type: integer image: description: The image without TikTok's watermark or the creator's handle. A signed, short-lived TikTok CDN URL, so fetch it promptly; the query params are the signature and must be kept intact. Despite the .jpeg in the path this is often served as HEIC, so transcode if you need broad browser support. Populated whenever the provider has data for the entity. format: uri type: string x-anyapi-must-populate: true watermarkedImage: description: The same image carrying TikTok's watermark and the creator's handle. Signed and short-lived on the same terms as image. format: uri type: string width: description: Pixel width of the image. type: integer required: - image type: object type: array x-anyapi-must-populate: true required: - id - images type: object found: description: 'False when the post carries no photo-mode images: a plain video (use tiktok.video_download), or a deleted or private post.' type: boolean required: - found - data title: TikTok Photos output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Photos tags: - tiktok x-mint: href: /api-reference/tiktok/photos x-payment-info: price: currency: USD max: '0.002000' min: '0.001200' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.002000' min: '0.001200' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.002000' min: '0.001200' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.profile: post: description: 'Fetch a TikTok creator''s public profile (followers, likes, bio, verification) by handle. **Price:** \$0.90 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 3 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Profile pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_profile parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: handle: zachking schema: additionalProperties: false example: handle: zachking properties: handle: description: TikTok username without the leading @ (e.g. "stoolpresidente"). type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - handle title: TikTok profile input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: avatarUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true bio: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true displayName: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true externalUrl: description: The single link the account publishes in its bio, normalized to an absolute URL. Absent when the account publishes no link. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true followers: type: integer following: type: integer handle: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer secUid: description: 'TikTok''s sec_uid: the opaque account identifier TikTok''s own web and app endpoints key on, and the id most third-party TikTok tools ask for.' type: string userId: description: TikTok's numeric internal user id for the account. Unlike the handle it never changes, so store it as the account's key. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true verified: type: boolean videos: type: integer required: - handle - displayName - followers - following - likes - videos - bio - verified - avatarUrl type: object found: type: boolean required: - found - data title: TikTok profile output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Profile tags: - tiktok x-mint: href: /api-reference/tiktok/profile x-payment-info: price: currency: USD max: '0.002000' min: '0.000900' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.002000' min: '0.001000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.002000' min: '0.000900' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.profile_contact: post: description: 'Find the public contact email behind a TikTok creator''s profile: the address written into the bio plus any published on the site the profile links to, each labelled with where it came from. Returns the creator''s profile stats and linked social accounts alongside. **Price:** billed per result - \$1.16 per 1,000 requests base + \$0.00 per 1,000 results, capped at \$1.16 per 1,000 requests. **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Profile Contact Info pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_profile_contact parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: handle: gordonramsayofficial schema: additionalProperties: false example: handle: gordonramsayofficial properties: handle: description: TikTok username without the leading @. minLength: 1 type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - handle title: TikTok profile contact input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: The creator and the contact details published for them, or null when no public email was found. oneOf: - type: 'null' - properties: avatarUrl: description: Profile picture URL. TikTok signs this URL, so it expires; re-fetch rather than storing it. type: string bio: description: Profile biography text. type: string displayName: description: Account display name. type: string emails: description: 'Every public email the source publishes for the creator, each labelled with where it came from. Some sources report only the address they judge best, so a single entry does not mean a single address exists. Never empty: a creator with no public email returns found false instead. Populated whenever the provider has data for the entity.' items: properties: domain: description: The email address's own domain. Absent when the source that served the request does not report it. type: string domainHealth: description: 'The source''s verdict on whether the address can receive mail: healthy or unhealthy from a domain-level check, deliverable, risky or missing from a mailbox-level one. Which vocabulary you get varies with the source that served the request.' type: string email: description: The email address as published. type: string sourceType: description: 'Where the address was read: the TikTok bio itself (tiktok_bio) or a page the profile links to (linked_page, website). An address read off a linked page may belong to a brand or a partner rather than the creator. The exact word varies with the source that served the request.' type: string sourceUrl: description: The page the address was read from. Absent for an address read from the TikTok bio itself. type: string required: - email type: object type: array x-anyapi-must-populate: true externalUrl: description: The single link the account publishes in its bio. Absent when the account publishes no link. type: string followers: description: Follower count. type: integer following: description: Number of accounts this account follows. type: integer handle: description: TikTok username without the leading @. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: description: Total likes across the account's videos. type: integer primaryEmail: description: The address the upstream considers the creator's best contact, chosen from emails. Absent when no email was found. type: string private: description: Whether the account is private. type: boolean profileUrl: description: Canonical URL of the TikTok profile. type: string seller: description: Whether the account sells through TikTok Shop. type: boolean socialLinks: description: Other social accounts found for the creator on the page their profile links to. Empty when none were found. items: properties: platform: description: The platform the link points at, for example instagram, youtube, facebook. type: string url: description: The account URL on that platform. type: string required: - platform - url type: object type: array userId: description: TikTok's numeric internal user id for the account. Unlike the handle it never changes, so store it as the account's key. type: string verified: description: Whether the account carries TikTok's verified badge. type: boolean videos: description: Number of videos the account has published. type: integer required: - handle - emails type: object found: description: True when at least one public email was found for the creator. A real account that publishes no email anywhere returns false, and the call is free. type: boolean required: - found - data title: TikTok profile contact output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Profile Contact Info tags: - tiktok x-mint: href: /api-reference/tiktok/profile-contact x-payment-info: price: currency: USD max: '0.001870' min: '0.001160' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.001870' min: '0.001160' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.001870' min: '0.001160' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.profile_region: post: description: 'Resolve the home region (country) of a TikTok creator by handle. **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Profile Region pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_profile_region parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: handle: stoolpresidente schema: additionalProperties: false example: handle: stoolpresidente properties: handle: description: TikTok username without the leading @ (e.g. "stoolpresidente"). type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - handle title: TikTok Profile Region input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: handle: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true profileUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true region: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - handle - profileUrl - region type: object found: type: boolean required: - found - data title: TikTok Profile Region output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Profile Region tags: - tiktok x-mint: href: /api-reference/tiktok/profile-region x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.profile_videos: post: description: 'List a TikTok creator''s recent videos (views, likes, comments) by handle with cursor pagination. **Price:** \$1.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 3 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Profile Videos pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_profile_videos parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: handle: zachking schema: additionalProperties: false example: handle: zachking properties: cursor: description: Pagination cursor from a previous response's nextCursor. type: string handle: description: TikTok username without the leading @. type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - handle title: TikTok profile videos input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: nextCursor: description: Opaque cursor for the next page of videos, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' videos: items: properties: caption: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true comments: type: integer createdUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity. type: number x-anyapi-must-populate: true id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true image: description: URL of the video's cover/thumbnail image. A signed, short-lived TikTok CDN URL (typically expires within about a day; query params are load-bearing and kept intact), often served as HEIC rather than JPEG, so fetch it promptly and transcode if you need broad browser support. Absent when the upstream provides no cover. type: string likes: type: integer url: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true views: type: integer required: - id - url - caption - views - likes - comments - createdUtc type: object type: array required: - videos - nextCursor type: object found: type: boolean required: - found - data title: TikTok profile videos output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Profile Videos tags: - tiktok x-mint: href: /api-reference/tiktok/profile-videos x-payment-info: price: currency: USD max: '0.003600' min: '0.001200' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.001200' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.001200' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.search_hashtag: post: description: 'Search TikTok by hashtag and get matching videos (caption, views, likes, comments, shares) as normalized JSON. **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Hashtag Search pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_search_hashtag parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: query: recipe schema: additionalProperties: false example: query: recipe properties: cursor: description: Pagination cursor from a previous response. type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer query: description: 'Hashtag or keyword to search for (without the leading #).' type: string required: - query title: TikTok Hashtag Search input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: nextCursor: description: Opaque cursor for the next page of videos, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' videos: description: Populated whenever the provider has data for the entity. items: properties: author: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true caption: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true comments: type: integer createdUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer shares: type: integer views: type: integer required: - id - caption - author - views - likes - comments - shares - createdUtc type: object type: array x-anyapi-must-populate: true required: - videos - nextCursor type: object found: type: boolean required: - found - data title: TikTok Hashtag Search output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Hashtag Search tags: - tiktok x-mint: href: /api-reference/tiktok/search-hashtag x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.search_keyword: post: description: 'Search TikTok by keyword and get matching videos (caption, views, likes, comments, shares) as normalized JSON. **Price:** \$1.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 3 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Keyword Search pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_search_keyword parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: datePosted: 0 query: cooking sortBy: 0 schema: additionalProperties: false example: datePosted: 0 query: cooking sortBy: 0 properties: cursor: description: Pagination cursor from a previous response. type: string datePosted: default: 0 description: Time frame filter. Use a canonical JSON integer that is nonnegative; common values are 0 for any time, 1 for the past 24 hours, 7 for the past week, and 30 for the past month. Legacy numeric strings remain accepted. minimum: 0 pattern: ^[0-9]+$ type: - integer - string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer query: description: The keyword to search TikTok for. type: string requireCursor: description: Set true if you intend to page through results, so the request is only served by a source that can return a nextCursor. Not all sources for this search can page, and one that can may cost more per request. type: boolean sortBy: default: 0 description: Sort order. Use the canonical JSON integer 0 for relevance or 1 for most liked; legacy numeric strings remain accepted. enum: - 0 - 1 - '0' - '1' type: - integer - string required: - query title: TikTok keyword search input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: nextCursor: description: Opaque cursor for the next page of videos, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' videos: description: Populated whenever the provider has data for the entity. items: properties: caption: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true comments: type: integer id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer region: type: string shares: type: integer views: type: integer required: - id - caption - region - views - likes - comments - shares type: object type: array x-anyapi-must-populate: true required: - videos type: object found: type: boolean required: - found - data title: TikTok keyword search output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Keyword Search tags: - tiktok x-mint: href: /api-reference/tiktok/search-keyword x-payment-info: price: currency: USD max: '0.003600' min: '0.001200' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.001200' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.001200' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.search_top: post: description: 'Search TikTok''s top results for a keyword (caption, views, likes, comments, shares) with cursor pagination. **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Top Search pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_search_top parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: query: funny schema: additionalProperties: false example: query: funny properties: cursor: description: Pagination cursor from a previous response. type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer publishTime: description: 'Time-frame filter: yesterday, this-week, this-month, last-3-months, last-6-months, all-time.' type: string query: description: Keyword to search for (e.g. "funny"). type: string region: description: 2-letter country code for the proxy location (e.g. US, GB, FR). type: string sortBy: description: 'Sort order: relevance, most-liked, date-posted.' type: string required: - query title: TikTok Top Search input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: items: description: Populated whenever the provider has data for the entity. items: properties: author: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true caption: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true comments: type: integer contentType: type: string id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer shares: type: integer url: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true views: type: integer required: - id - caption - contentType - url - author - views - likes - comments - shares type: object type: array x-anyapi-must-populate: true nextCursor: description: Opaque cursor for the next page of results, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' required: - items - nextCursor type: object found: type: boolean required: - found - data title: TikTok Top Search output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Top Search tags: - tiktok x-mint: href: /api-reference/tiktok/search-top x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.search_users: post: description: 'Search TikTok accounts by keyword (handle, nickname, follower count) with cursor pagination. **Price:** \$1.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 3 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok User Search pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_search_users parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: query: chef schema: additionalProperties: false example: query: chef properties: cursor: description: Pagination cursor from a previous response's nextCursor. type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer query: description: The keyword to search TikTok accounts for. type: string required: - query title: TikTok user search input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: nextCursor: description: Opaque cursor for the next page of users, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' users: description: Populated whenever the provider has data for the entity. items: properties: followers: type: integer following: type: integer handle: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true nickname: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true userId: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - handle - nickname - userId - followers - following type: object type: array x-anyapi-must-populate: true required: - users - nextCursor type: object found: type: boolean required: - found - data title: TikTok user search output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok User Search tags: - tiktok x-mint: href: /api-reference/tiktok/search-users x-payment-info: price: currency: USD max: '0.003600' min: '0.001200' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.001200' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.001200' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.song: post: description: 'Fetch details for a TikTok song or sound (title, author, duration, cover art, and how many videos use it). **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Song pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_song parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: clipId: '7439295283975702544' schema: additionalProperties: false example: clipId: '7439295283975702544' properties: clipId: description: The clip identifier for the song, found in TikTok music URLs (e.g. 7439295283975702544). type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - clipId title: TikTok Song input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: album: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true author: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true coverUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true duration: description: Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true isOriginal: type: boolean shareUrl: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true songId: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true title: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true videoCount: type: integer required: - songId - title - author - album - duration - isOriginal - videoCount - coverUrl - shareUrl type: object found: type: boolean required: - found - data title: TikTok Song output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Song tags: - tiktok x-mint: href: /api-reference/tiktok/song x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.song_videos: post: description: 'List TikTok videos that use a given song or sound (with descriptions, authors, and engagement stats). **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Song Videos pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_song_videos parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: clipId: '7439295283975702544' schema: additionalProperties: false example: clipId: '7439295283975702544' properties: clipId: description: The song ID found in TikTok music URLs (e.g. 7439295283975702544). type: string cursor: description: Pagination cursor for retrieving the next page of results. type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - clipId title: TikTok Song Videos input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: hasMore: type: integer nextCursor: description: Opaque cursor for the next page of videos, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' videos: description: Populated whenever the provider has data for the entity. items: properties: authorHandle: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true authorName: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true commentCount: type: integer createTime: type: integer description: type: string likeCount: type: integer playCount: type: integer shareCount: type: integer videoId: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - videoId - description - authorHandle - authorName - createTime - playCount - likeCount - commentCount - shareCount type: object type: array x-anyapi-must-populate: true required: - nextCursor - hasMore - videos type: object found: type: boolean required: - found - data title: TikTok Song Videos output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Song Videos tags: - tiktok x-mint: href: /api-reference/tiktok/song-videos x-payment-info: price: currency: USD max: '0.003600' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.top_ads_search: post: description: 'Search TikTok Creative Center top video ads by keyword with explicit performance, objective, region, language, and time-window filters. **Price:** \$1.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** TikTok Top Ads Search pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_top_ads_search parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: query: glasses schema: additionalProperties: false example: query: glasses properties: adLanguage: default: en description: Language code for returned ads (default en). enum: - en - es - ar - vi - th - de - id - pt - fr - ms - nl - ja - it - ro - zh-Hant - ko type: string limit: default: 20 description: Maximum number of ads requested for this page, from 1 through 20 (default 20). maximum: 20 minimum: 1 type: integer objective: default: traffic description: Campaign objective filter (default traffic). enum: - traffic - app_installs - conversions - video_views - reach - lead_generation - product_sales type: string orderBy: default: for_you description: 'Result ordering: Creative Center recommendations or like count (default for_you).' enum: - for_you - likes type: string page: default: 1 description: One-based provider page number (default 1). minimum: 1 type: integer performanceRank: default: top_1_20 description: Ad performance percentile bucket, where top_1_20 is the highest-performing 20 percent (default top_1_20). enum: - top_1_20 - top_21_40 - top_41_60 - top_61_80 type: string period: default: 180 description: Lookback period in days (default 180). enum: - 7 - 30 - 180 type: integer preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer query: description: Keyword to search in TikTok Creative Center top video ads. minLength: 1 type: string region: default: US description: Country code used to select the Creative Center market (default US). type: string required: - query title: TikTok Top Ads Search input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: Top-ad results and page metadata, or null when no matching ads were found. oneOf: - type: 'null' - additionalProperties: false properties: ads: description: TikTok Creative Center top-ad records returned for this page. Populated whenever the provider has data for the entity. items: properties: adId: description: TikTok Creative Center ad material identifier. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true adTitle: description: Title or primary copy shown for the ad. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true brandName: description: Advertiser brand name when supplied by TikTok Creative Center. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true cost: description: TikTok Creative Center's relative cost ranking value for the ad. Populated whenever the provider has data for the entity. type: number x-anyapi-must-populate: true ctr: description: TikTok Creative Center's click-through rate value for the ad. Populated whenever the provider has data for the entity. type: number x-anyapi-must-populate: true durationSeconds: description: Video duration in seconds. Populated whenever the provider has data for the entity. type: number x-anyapi-must-populate: true height: description: Video height in pixels. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true image: description: Signed video cover image URL exactly as returned by TikTok Creative Center. Populated whenever the provider has data for the entity. format: uri type: string x-anyapi-must-populate: true industry: description: TikTok Creative Center industry classification key. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: description: Number of likes reported for the ad. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true objective: description: TikTok Creative Center campaign objective key. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true videoUrl: description: Signed 720p video asset URL exactly as returned by TikTok Creative Center. Populated whenever the provider has data for the entity. format: uri type: string x-anyapi-must-populate: true width: description: Video width in pixels. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true required: - adId type: object type: array x-anyapi-must-populate: true hasMore: description: Whether TikTok Creative Center reports another page of matching ads. Populated whenever the provider has data for the entity. type: boolean x-anyapi-must-populate: true page: description: One-based page number reported by TikTok Creative Center. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true pageSize: description: Page size reported by TikTok Creative Center. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true total: description: Total number of matching top ads reported by TikTok Creative Center. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true required: - page - pageSize - total - hasMore - ads type: object found: description: True when TikTok Creative Center returned at least one matching top ad. type: boolean required: - found - data title: TikTok Top Ads Search output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Top Ads Search tags: - tiktok x-mint: href: /api-reference/tiktok/top-ads-search x-payment-info: price: amount: '0.001200' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.001200' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.001200' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.trending_feed: post: description: 'Sample TikTok''s For You feed as served to a viewer in one country (caption, views, likes, comments, author). Returns a rotating sample, not a ranked chart. **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** TikTok Trending Feed pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_trending_feed parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: region: US schema: additionalProperties: false example: region: US properties: preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer region: description: 2-letter country code for the proxy location (e.g. "US"). type: string trim: description: Set to true to return a simplified response. type: string required: - region title: TikTok Trending Feed input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: videos: description: Populated whenever the provider has data for the entity. items: properties: author: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true caption: type: string comments: type: integer createdUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity. type: number x-anyapi-must-populate: true id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer region: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true shares: type: integer url: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true views: type: integer required: - id - caption - url - region - author - views - likes - comments - shares - createdUtc type: object type: array x-anyapi-must-populate: true required: - videos type: object found: type: boolean required: - found - data title: TikTok Trending Feed output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Trending Feed tags: - tiktok x-mint: href: /api-reference/tiktok/trending-feed x-payment-info: price: amount: '0.002000' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.002000' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.002000' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.trending_hashtags: post: description: 'Rank TikTok''s trending hashtags for one country and industry, with each hashtag''s daily popularity curve, post count, video views, and leading creators. Ranks 15 industry categories, or omit industry for the all-industries board. TikTok publishes only the top 3 hashtags per board to anonymous callers, so limit 1-3 is served cheaply; a limit above 3 routes to a dearer authenticated source that returns the full ranking. Covers 27 markets: AE, AR, AU, BR, CA, CO, DE, EG, ES, FR, GB, ID, IL, IT, JP, KR, MX, MY, PH, SA, SG, TH, TR, TW, US, VN, ZA. **Price:** \$1.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Trending Hashtags pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_trending_hashtags parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: limit: 3 period: 7 region: US schema: additionalProperties: false example: limit: 3 period: 7 region: US properties: industry: description: Restrict the ranking to one industry. Omit for the all-industries board. enum: - apparel_accessories - baby_kids_maternity - beauty_personal_care - education - food_beverage - games - health - home_improvement - household_products - news_entertainment - pets - sports_outdoor - tech_electronics - travel - vehicle_transportation type: string limit: default: 3 description: Maximum number of ranked hashtags to return, from 1 through 100 (default 3). TikTok publishes only the top 3 hashtags per board to anonymous callers, so 1 through 3 is served by the cheapest source; a higher limit routes to a dearer source that reads the full ranking. maximum: 100 minimum: 1 type: integer period: default: 7 description: Lookback window in days that the ranking and the popularity curve cover (default 7). enum: - 7 - 30 - 90 type: integer preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer region: default: US description: Two-letter country code of the market whose hashtag ranking to read (default US). Each market is ranked independently, so US and DE return different boards. enum: - US - FR - DE - IT - ES - GB - AR - AU - BR - CA - CO - EG - ID - IL - JP - KR - MY - MX - PH - SA - SG - ZA - TW - TH - TR - AE - VN type: string title: TikTok Trending Hashtags input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: The ranked hashtags for the requested market, or null when unavailable. oneOf: - type: 'null' - additionalProperties: false properties: items: description: Hashtags in the market's own ranking order, best first. Populated whenever the provider has data for the entity. items: properties: hashtag: description: 'Hashtag name without the leading #. Populated whenever the provider has data for the entity.' type: string x-anyapi-must-populate: true hashtagId: description: Stable TikTok hashtag identifier. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true industryIds: description: TikTok industry identifiers the hashtag is classified under, matching the ids behind the `industry` input. Empty when TikTok classifies the hashtag under none. items: type: integer type: array popularity: description: Daily popularity curve across the requested period, oldest first. Values are normalized 0-100 within this hashtag's own window, where 100 is its peak day, so they compare days of one hashtag rather than two hashtags. Populated whenever the provider has data for the entity. items: properties: atUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number value: description: Normalized popularity for that day, 0 through 100. maximum: 100 minimum: 0 type: number required: - atUtc - value type: object type: array x-anyapi-must-populate: true posts: description: Number of videos published with the hashtag during the period. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true rank: description: One-based position in this market's ranking for the requested period. Populated whenever the provider has data for the entity. minimum: 1 type: integer x-anyapi-must-populate: true topCreators: description: Creators TikTok surfaces as leading the hashtag, in its own order. items: properties: countryCode: description: Two-letter country code TikTok reports for the creator. type: string followers: description: Creator's follower count. type: integer handle: description: Creator's TikTok username without the leading @. type: string image: description: Creator's avatar image URL. format: uri type: string nickname: description: Creator's display name. type: string rank: description: One-based position among the hashtag's top creators. minimum: 1 type: integer userId: description: Creator's stable TikTok user id. type: string type: object type: array views: description: Total video views the hashtag drew during the period. Populated whenever the provider has data for the entity. type: integer x-anyapi-must-populate: true required: - rank - hashtag - hashtagId type: object type: array x-anyapi-must-populate: true required: - items type: object found: description: Whether a hashtag ranking was resolved for the requested market. type: boolean required: - found - data title: TikTok Trending Hashtags output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Trending Hashtags tags: - tiktok x-mint: href: /api-reference/tiktok/trending-hashtags x-payment-info: price: currency: USD max: '0.110000' min: '0.001200' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.110000' min: '0.001200' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.110000' min: '0.001200' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.video: post: description: 'Fetch a single TikTok video by URL with its caption and engagement counts (views, likes, comments, shares, saves). **Price:** \$0.90 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 4 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Video pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_video parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: url: https://www.tiktok.com/@mrbeast/video/7654638524729216287?_r=1&u_code=elgjf3ff8cajhk&preview_pb=0&sharer_language=en&_d=elh6737j6kjl71&share_item_id=7654638524729216287&source=h5_m schema: additionalProperties: false example: url: https://www.tiktok.com/@mrbeast/video/7654638524729216287?_r=1&u_code=elgjf3ff8cajhk&preview_pb=0&sharer_language=en&_d=elh6737j6kjl71&share_item_id=7654638524729216287&source=h5_m properties: preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer url: description: Full TikTok video URL. type: string required: - url title: TikTok video input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: caption: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true comments: type: integer id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true image: description: URL of the video's cover/thumbnail image. A signed, short-lived TikTok CDN URL (typically expires within about a day; query params are load-bearing and kept intact), often served as HEIC rather than JPEG, so fetch it promptly and transcode if you need broad browser support. Absent when the upstream provides no cover. type: string likes: type: integer region: type: string saves: type: integer shares: type: integer views: type: integer required: - id - caption - region - views - likes - comments - shares - saves type: object found: type: boolean required: - found - data title: TikTok video output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Video tags: - tiktok x-mint: href: /api-reference/tiktok/video x-payment-info: price: currency: USD max: '0.003600' min: '0.000900' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.001000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.000900' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.video_comments: post: description: 'List the comments on a TikTok video by URL with cursor pagination (text, author, likes, reply count). **Price:** \$1.44 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 3 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Video Comments pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_video_comments parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: url: https://www.tiktok.com/@zachking/video/7650468599424945422?_r=1&u_code=f0hj7d780760m9&preview_pb=0&sharer_language=en&_d=f0hj7blh067h71&share_item_id=7650468599424945422&source=h5_m schema: additionalProperties: false example: url: https://www.tiktok.com/@zachking/video/7650468599424945422?_r=1&u_code=f0hj7d780760m9&preview_pb=0&sharer_language=en&_d=f0hj7blh067h71&share_item_id=7650468599424945422&source=h5_m properties: cursor: description: Pagination cursor from a previous response's nextCursor. type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer url: description: Full TikTok video URL. type: string required: - url title: TikTok video comments input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: comments: items: properties: author: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true createdUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number id: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true likes: type: integer replies: type: integer text: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - id - text - author - likes - replies - createdUtc type: object type: array nextCursor: description: Opaque cursor for the next page of comments, or null when this lane has no more. Pass it back as cursor to continue. type: - string - 'null' required: - comments - nextCursor type: object found: type: boolean required: - found - data title: TikTok video comments output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Video Comments tags: - tiktok x-mint: href: /api-reference/tiktok/video-comments x-payment-info: price: currency: USD max: '0.003600' min: '0.001440' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.003600' min: '0.001440' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.003600' min: '0.001440' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.video_download: post: description: 'Get the playable media files behind a TikTok video URL: the clean no-watermark MP4, the watermarked one TikTok''s own save button produces, and the cover image, with duration and pixel dimensions. Photo-mode posts carry no video file - use tiktok.photos for those. **Price:** \$1.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Video Download pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_video_download parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: url: https://www.tiktok.com/@mrbeast/video/7654638524729216287 schema: additionalProperties: false example: url: https://www.tiktok.com/@mrbeast/video/7654638524729216287 properties: preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer url: description: Full TikTok video URL. Share links and tracking query params are fine. minLength: 1 type: string required: - url title: TikTok Video Download input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: durationSeconds: description: Length of the video in seconds. type: number height: description: Pixel height of the video file. type: integer id: description: TikTok video id. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true image: description: Cover image for the video. A signed, short-lived TikTok CDN URL, often served as HEIC rather than JPEG, so fetch it promptly and transcode if you need broad browser support. format: uri type: string videoUrl: description: Direct MP4 without the TikTok watermark or handle overlay. A signed, short-lived TikTok CDN URL, so fetch it promptly; the query params are the signature and must be kept intact. Send no cookies with the request - a tt_chain_token cookie makes the CDN answer 403. Populated whenever the provider has data for the entity. format: uri type: string x-anyapi-must-populate: true watermarkedUrl: description: Direct MP4 carrying TikTok's watermark and the creator's handle, the same file TikTok's own save button produces. Signed and short-lived on the same terms as videoUrl. format: uri type: string width: description: Pixel width of the video file. type: integer required: - id - videoUrl type: object found: description: 'False when the post has no downloadable video file: a deleted or private video, or a photo-mode post (use tiktok.photos for those).' type: boolean required: - found - data title: TikTok Video Download output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Video Download tags: - tiktok x-mint: href: /api-reference/tiktok/video-download x-payment-info: price: currency: USD max: '0.002000' min: '0.001200' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.002000' min: '0.001200' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.002000' min: '0.001200' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.video_transcript: post: description: 'Fetch the spoken-word transcript of a TikTok video by URL. **Price:** \$2.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** 2 independent lanes are available in execution order. A failed attempt uses the next lane only when the request''s payment authorizes that lane''s price; the normalized schema stays the same. **Catalog:** TikTok Video Transcript pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_video_transcript parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: url: https://www.tiktok.com/@washingtonpost/video/7609177768793787679 schema: additionalProperties: false example: url: https://www.tiktok.com/@washingtonpost/video/7609177768793787679 properties: preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer url: description: Full TikTok video URL. type: string required: - url title: TikTok video transcript input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: language: type: string transcript: description: Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - transcript type: object found: type: boolean required: - found - data title: TikTok video transcript output type: object x-anyapi-heavy: true - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Video Transcript tags: - tiktok x-mint: href: /api-reference/tiktok/video-transcript x-payment-info: price: currency: USD max: '0.036000' min: '0.002000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.036000' min: '0.002000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.036000' min: '0.002000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/tiktok.video_transcript_full: post: description: 'Transcribe the spoken audio of a TikTok video with timed segments, speaker labels, and per-word confidence - for videos TikTok publishes no subtitle track for. **Price:** billed per result - \$17.60 per 1,000 requests base + \$0.00 per 1,000 results, capped at \$17.60 per 1,000 requests. **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** TikTok Video Transcript (Audio) pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every TikTok endpoint.' operationId: tiktok_video_transcript_full parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: url: https://www.tiktok.com/@thatdudecancook/video/7649086431641521421 schema: additionalProperties: false example: url: https://www.tiktok.com/@thatdudecancook/video/7649086431641521421 properties: preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer url: description: TikTok video URL (e.g. "https://www.tiktok.com/@user/video/1234567890"). minLength: 1 type: string required: - url title: TikTok Video Transcript (Audio) input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - properties: durationSeconds: description: Video duration in seconds. minimum: 0 type: number language: description: Detected spoken language of the audio (BCP-47 style code, e.g. "en"). type: string segments: description: Timed transcript segments in playback order, each with the recognizer's per-word confidence so low-confidence text can be treated as uncertain rather than quoted. Populated whenever the provider has data for the entity. items: properties: endSeconds: description: Segment end offset in seconds. minimum: 0 type: number language: description: Detected language for this segment. type: string speaker: description: Recognizer speaker label for this segment (e.g. "SPEAKER_00"). Diarization is a guess, not an identification. type: string startSeconds: description: Segment start offset in seconds. minimum: 0 type: number text: description: Text of this segment. type: string words: description: Per-word timing and recognizer confidence for this segment. items: properties: confidence: description: Recognizer confidence for this word, 0 to 1. Low values mark words the recognizer guessed; they are common on names, jargon, and music. maximum: 1 minimum: 0 type: number endSeconds: description: Word end offset in seconds. minimum: 0 type: number speaker: description: Recognizer speaker label for this word. type: string startSeconds: description: Word start offset in seconds. minimum: 0 type: number word: description: The recognized word. type: string required: - word - confidence type: object type: array required: - text - startSeconds - endSeconds type: object type: array x-anyapi-must-populate: true source: description: 'How the text was produced. Always "audio_asr" on this endpoint: the words come from automatic speech recognition over the audio, not from a caption track the platform published. Populated whenever the provider has data for the entity.' type: string x-anyapi-must-populate: true transcript: description: Full spoken-word transcript, machine-transcribed from the video's audio track. Populated whenever the provider has data for the entity. type: string x-anyapi-must-populate: true required: - transcript - source type: object found: type: boolean required: - found - data title: TikTok Video Transcript (Audio) output type: object x-anyapi-heavy: true - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: TikTok Video Transcript (Audio) tags: - tiktok x-mint: href: /api-reference/tiktok/video-transcript-full x-payment-info: price: currency: USD max: '0.017600' min: '0.017600' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '0.017600' min: '0.017600' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '0.017600' min: '0.017600' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution components: schemas: AgentUpgrade: properties: authorizationServer: format: uri type: string clientId: type: string device: $ref: '#/components/schemas/DeviceUpgrade' scope: type: string required: - authorizationServer - scope type: object Payment: properties: costUsd: description: Known USD payment amount for this request. minimum: 0 type: number rail: minLength: 1 type: string settlementState: enum: - charged_undelivered - indeterminate type: string required: - rail - settlementState - costUsd type: object Error: properties: code: description: Stable machine-readable error code when the endpoint defines one. type: string error: description: Customer-safe error message. type: string payment: $ref: '#/components/schemas/Payment' requestId: description: This run's AnyAPI request id, the same value as the X-Anyapi-Request-Id response header. Quote it to support. Absent on endpoints that do not execute a run. format: uuid type: string required: - error type: object PaymentRequiredError: allOf: - $ref: '#/components/schemas/Error' - properties: error: not: const: trial_cap_reached type: object DeviceUpgrade: properties: deviceCode: type: string expiresIn: minimum: 0 type: integer grantType: type: string interval: minimum: 1 type: integer tokenEndpoint: format: uri type: string userCode: type: string verificationUri: format: uri type: string verificationUriComplete: format: uri type: string required: - verificationUriComplete - verificationUri - userCode - deviceCode - tokenEndpoint - grantType - interval - expiresIn type: object TrialCapReached: properties: error: const: trial_cap_reached type: string message: description: Human-relayable continuation instructions, including an executable token poll. type: string upgrade: $ref: '#/components/schemas/AgentUpgrade' required: - error - message - upgrade type: object securitySchemes: apiKeyAuth: description: Your AnyAPI key. in: header name: X-API-Key type: apiKey x-default: YOUR_ANYAPI_KEY bearerAuth: description: Your AnyAPI key as a Bearer token. scheme: bearer type: http x-default: YOUR_ANYAPI_KEY