{"openapi":"3.1.0","info":{"title":"InsightSocial API","version":"2.0.0","description":"Public social data from 9 platforms through one key and one credit balance. Schema 2: one response shape per entity on every platform."},"servers":[{"url":"https://api.insightsocial.app"}],"security":[{"apiKey":[]}],"tags":[{"name":"account"},{"name":"instagram"},{"name":"tiktok"},{"name":"facebook"},{"name":"linkedin"},{"name":"twitter"},{"name":"threads"},{"name":"youtube"},{"name":"reddit"},{"name":"pinterest"}],"paths":{"/v1/facebook/profile":{"get":{"operationId":"facebook_profile","summary":"Profile","description":"Returns a Facebook page's public profile: page id, display name, profile image, bio, follower count, and page-like count.\n\nUse it when you have a page URL and want a quick snapshot before pulling that page's posts, photos, or reels.\n\n**20 credits** per call.","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Facebook page or profile","schema":{"type":"string","example":"https://www.facebook.com/Meta"}},{"name":"get_business_hours","in":"query","required":false,"description":"Get the business's hours","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/profile/posts":{"get":{"operationId":"facebook_profile_posts","summary":"Profile › Posts","description":"Returns recent posts from a Facebook page or profile, each with the post text, like and comment counts, the per-reaction breakdown, media, and publish time. Share counts are null on a plain call.\n\nUse it to pull a page's recent content by url or pageId. The optional include=engagement fills each row's share count, and a reel's exact views and duration, in the same call.\n\n**Metered: 20–80 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":false,"description":"Full URL of the Facebook page or profile to fetch posts for. Provide at least one of: `url`, `pageId`.","schema":{"type":"string","example":"https://www.facebook.com/Meta"}},{"name":"pageId","in":"query","required":false,"description":"Facebook profile page id. Provide at least one of: `url`, `pageId`.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only posts published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older posts are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned posts sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.","schema":{"type":"string","example":"2026-09-01"}},{"name":"stop_at_id","in":"query","required":false,"description":"The id (`post.id`) or URL (`post.url`) of the newest post you already hold. The page stops just before it: that post and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned post never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"To paginate through the posts","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `engagement` (one token only) to fill `post.engagement.shares` on every row, and `post.engagement.views` and `post.content.duration_seconds` on reels, in this one call. A row that links to an event rather than a post is not looked up. Without it the call is unchanged.","schema":{"type":"string","enum":["engagement"]}},{"name":"recent_days","in":"query","required":false,"description":"Keep only posts published in the last N days (1 to 3650) and stop pagination once a page reaches older posts. Does not change the price of a page.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":80},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/post":{"get":{"operationId":"facebook_post","summary":"Post","description":"Returns one Facebook post in full: the post text, like, comment and share counts, a reactions breakdown, media attachments, and author info.\n\nUse it when you have a single post URL and need more than profile/posts gives, such as the reactions breakdown.\n\n**20 credits** per call.","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Facebook post","schema":{"type":"string","example":"https://www.facebook.com/Meta/posts/pfbid0kPiRpqdc4HcL5ZMP6ANbkTWvjKYTs1hGKdZwHbYjTo4SNX8hM2UvjQmHBjq4r3cvl"}},{"name":"get_comments","in":"query","required":false,"description":"Accepted for backwards compatibility and currently a NO-OP: this endpoint returns the same body with or without it.","schema":{"type":"boolean"}},{"name":"get_transcript","in":"query","required":false,"description":"Accepted for backwards compatibility and currently a NO-OP: this endpoint returns the same body with or without it. Use `/v1/facebook/post/transcript` for a video transcript.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/post/comments":{"get":{"operationId":"facebook_post_comments","summary":"Post › Comments","description":"Returns comments on a Facebook post, each with the commenter's name, comment text, like count, reply count, and creation time.\n\nUse it to read a post's discussion; it also returns the feedback_id and expansion_token that post/comment/replies needs.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":false,"description":"Full URL of the Facebook post to fetch comments for. Provide at least one of: `url`, `feedback_id`.","schema":{"type":"string","example":"https://www.facebook.com/Meta/videos/a-slightly-life-changing-story/1459847961114516/"}},{"name":"feedback_id","in":"query","required":false,"description":"Using feedback_id (instead of url) will *really* speed up the request. You can get the feedback_id when you make a request to /v1/facebook/post. Provide at least one of: `url`, `feedback_id`.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more comments. Get 'cursor' from previous response.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/group/posts":{"get":{"operationId":"facebook_group_posts","summary":"Group › Posts","description":"Returns posts from a Facebook group, 3 to 4 per page, each with the post text, reaction count, comment count, the per-reaction breakdown, and author info.\n\nUse it for group content, since profile/posts covers pages only. Send next_cursor back as cursor for older posts. Share counts are not on this surface; read one with post.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":false,"description":"Full URL of the Facebook group. Provide at least one of: `url`, `group_id`.","schema":{"type":"string","example":"https://www.facebook.com/groups/2204685680"}},{"name":"group_id","in":"query","required":false,"description":"The ID of the group. Provide at least one of: `url`, `group_id`.","schema":{"type":"string"}},{"name":"sort_by","in":"query","required":false,"description":"How to sort the posts","schema":{"type":"string","enum":["TOP_POSTS","RECENT_ACTIVITY","CHRONOLOGICAL","CHRONOLOGICAL_LISTINGS"]}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get the next page of posts. Take it from `pagination.next_cursor` on the previous response.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Group","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/group":{"get":{"operationId":"facebook_group","summary":"Group","description":"Returns a Facebook group's public record: name, description, member count, privacy, visibility, and creation date.\n\nUse it to identify a group by URL or group_id before calling group/posts for the recent posts.\n\n**20 credits** per call.","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":false,"description":"Full URL of the Facebook group. Provide at least one of: `url`, `group_id`.","schema":{"type":"string","example":"https://www.facebook.com/groups/2204685680"}},{"name":"group_id","in":"query","required":false,"description":"Numeric Facebook group id. Provide at least one of: `url`, `group_id`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Group","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/post/transcript":{"get":{"operationId":"facebook_post_transcript","summary":"Post › Transcript","description":"Returns the spoken words of a Facebook video post as a transcript, using Facebook's auto-generated captions.\n\nUse it when you need what was said in a video; post returns the caption text and engagement but not the speech.\n\n**200 credits** per call.","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Facebook video post","schema":{"type":"string","example":"https://www.facebook.com/Meta/videos/a-slightly-life-changing-story/1459847961114516/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranscriptOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/profile/photos":{"get":{"operationId":"facebook_profile_photos","summary":"Profile › Photos","description":"Returns a page or profile's photos, each with a photo id, permalink, full-size image URL, thumbnail, and accessibility caption when available.\n\nUse it for a page's photo gallery. The plain row carries no author, engagement or publish time, so add the optional include=details to fill them from each photo's own post in the same call.\n\n**Metered: 20–180 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Facebook page or profile","schema":{"type":"string","example":"https://www.facebook.com/Meta"}},{"name":"next_page_id","in":"query","required":false,"description":"To paginate through to the next page","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `details` (one token only) to fill `post.author.display_name`, `post.author.avatar_url`, `author.id`, `post.engagement.likes`, `.comments` and `.shares`, and `post.published_at` on every photo in this one call. A photo inside a multi-photo post carries its own counts, not the post's. Without it the call is unchanged.","schema":{"type":"string","enum":["details"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":180},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/profile/reels":{"get":{"operationId":"facebook_profile_reels","summary":"Profile › Reels","description":"Returns a page or profile's reels, each with a reel id, description, thumbnail, permalink, publish time, and a rounded public view count.\n\nUse it for a cheap reel listing; when you need exact views plus likes, comments, and shares, use profile/reels/full instead.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Facebook page or profile","schema":{"type":"string","example":"https://www.facebook.com/Meta"}},{"name":"next_page_id","in":"query","required":false,"description":"To paginate through to the next page","schema":{"type":"string"}},{"name":"recent_days","in":"query","required":false,"description":"Keep only reels published in the last N days (1 to 3650) and stop pagination once a page reaches older reels. Does not change the price of a page.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/adlibrary/ad":{"get":{"operationId":"facebook_adlibrary_ad","summary":"Adlibrary › Ad","description":"Returns one ad from the Facebook Ad Library: creative, CTA and link, run dates, display format, and the advertiser's page URL, likes and categories.\n\nUse it when you have an ad id or URL. Spend and reach are political-ads-only, and Facebook publishes no per-ad impression count.\n\n**100 credits** per call.","tags":["facebook"],"parameters":[{"name":"id","in":"query","required":false,"description":"Facebook Ad Library ad ID. Ad ids rotate as campaigns end, so take a current one from `/v1/facebook/adlibrary/company/ads` or `/v1/facebook/adlibrary/search/ads` rather than reusing an old one. Provide at least one of: `id`, `url`.","schema":{"type":"string","example":"1702938977100376"}},{"name":"url","in":"query","required":false,"description":"Facebook Ad Library URL for the ad (`https://www.facebook.com/ads/library?id=...`). A page URL is rejected with a 400. Provide at least one of: `id`, `url`.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Adlibrary","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/adlibrary/company/ads":{"get":{"operationId":"facebook_adlibrary_company_ads","summary":"Adlibrary › Company › Ads","description":"Returns the ads one company or page is running in the Facebook Ad Library, each with its creative, status, spend, and targeting info.\n\nUse it when you know the advertiser by pageId or company name; to find ads by keyword across advertisers, use adlibrary/search/ads.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"pageId","in":"query","required":false,"description":"Facebook page ID of the advertiser. Provide at least one of: `pageId`, `companyName`.","schema":{"type":"string"}},{"name":"companyName","in":"query","required":false,"description":"The name of the company. Can either use this or pageId. Provide at least one of: `pageId`, `companyName`.","schema":{"type":"string","example":"Lululemon"}},{"name":"country","in":"query","required":false,"description":"This can only be one country. It has to be the 2 letter code for the country. It defaults to ALL.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Status of the ad. Defaults to ACTIVE.","schema":{"type":"string","enum":["ALL","ACTIVE","INACTIVE"]}},{"name":"media_type","in":"query","required":false,"description":"Media type of the ad. Defaults to ALL. Meme refers to ads with image and text. Not sure why they call it meme.","schema":{"type":"string","enum":["ALL","IMAGE","VIDEO","MEME","IMAGE_AND_MEME","NONE"]}},{"name":"language","in":"query","required":false,"description":"Language to filter ads on. Needs to be 2 letter language code, ie EN, ES, FR, etc","schema":{"type":"string"}},{"name":"sort_by","in":"query","required":false,"description":"Sort by impressions (high to low), or Most Recent (relevancy_monthly_grouped). Defaults to impressions.","schema":{"type":"string","enum":["total_impressions","relevancy_monthly_grouped"]}},{"name":"start_date","in":"query","required":false,"description":"Start date to search for. Format: YYYY-MM-DD","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"End date to search for. Format: YYYY-MM-DD","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to paginate through results","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Adlibrary","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/adlibrary/search/ads":{"get":{"operationId":"facebook_adlibrary_search_ads","summary":"Adlibrary › Search › Ads","description":"Returns Facebook Ad Library ads matching a keyword, each with its creative text, images, sponsor info, and running status.\n\nUse it to find ads across all advertisers by keyword; if you already know the advertiser, adlibrary/company/ads is more direct.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find ads in the Facebook Ad Library","schema":{"type":"string","example":"artificial intelligence"}},{"name":"sort_by","in":"query","required":false,"description":"Sort by impressions (high to low), or Most Recent (relevancy_monthly_grouped). Defaults to impressions.","schema":{"type":"string","enum":["total_impressions","relevancy_monthly_grouped"]}},{"name":"search_type","in":"query","required":false,"description":"If you want to search by exact phrase or not","schema":{"type":"string","enum":["keyword_unordered","keyword_exact_phrase"]}},{"name":"ad_type","in":"query","required":false,"description":"Search for all ads or only political and issue ads","schema":{"type":"string","enum":["all","political_and_issue_ads"]}},{"name":"country","in":"query","required":false,"description":"This can only be one country. It has to be the 2 letter code for the country. It defaults to ALL.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Status of the ad. Defaults to ACTIVE.","schema":{"type":"string","enum":["ALL","ACTIVE","INACTIVE"]}},{"name":"media_type","in":"query","required":false,"description":"Media type of the ad. Defaults to ALL. Meme just means the ad has text and an image. No clue why they call it meme.","schema":{"type":"string","enum":["ALL","IMAGE","VIDEO","MEME","IMAGE_AND_MEME","NONE"]}},{"name":"start_date","in":"query","required":false,"description":"Impressions start date. Needs to be in YYYY-MM-DD format.","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Impressions end date. Needs to be in YYYY-MM-DD format.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to paginate through results","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Adlibrary","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/facebook/adlibrary/search/companies":{"get":{"operationId":"facebook_adlibrary_search_companies","summary":"Adlibrary › Search › Companies","description":"Returns advertiser pages in the Facebook Ad Library matching a name, each with its page id, name, handle, verification badge and follower count.\n\nUse it to find an advertiser's pageId first, then pass that pageId to adlibrary/company/ads, which is also where you count their ads.\n\n**100 credits** per call.","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find companies in the Facebook Ad Library","schema":{"type":"string","example":"Nike"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Adlibrary","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/profile/events":{"get":{"operationId":"facebook_profile_events","summary":"Profile › Events","description":"Returns a Facebook page's upcoming and past events, each with a title, link, the start time, the venue, the city, the rendered time line, and the cancelled, past and online flags.\n\nUse it for one page's own events; events covers a city. The start time sits on published_at and is often in the future. Optional include=details adds the description, hosts, cover and RSVP counts.\n\n**Metered: 20–180 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the public Facebook page.","schema":{"type":"string","example":"https://www.facebook.com/brickyardoldtown"}},{"name":"cursor","in":"query","required":false,"description":"Cursor returned by the previous response for pagination.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `details` (one token only) to fill, on every event in this one call, `post.ext.event.description`, `address`, `latitude`, `longitude`, `hosts`, `host_context_text`, `category`, `privacy`, `attendance_count`, `interested_count` and `going_count`, the cover image on `post.content.thumbnail_url`, and the RSVP counts on `post.engagement.views` (interested) and `.likes` (going). Without it the call is unchanged.","schema":{"type":"string","enum":["details"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":180},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/post/comment/replies":{"get":{"operationId":"facebook_post_comment_replies","summary":"Post › Comment › Replies","description":"Returns the replies under a single Facebook comment, each with the author name, reply text, like count, and creation time.\n\nUse it after post/comments: pass that response's feedback_id and expansion_token, which are not the comment id.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"feedback_id","in":"query","required":true,"description":"`feedback_id` from `/v1/facebook/post/comments` for the parent comment (this is NOT the comment ID).","schema":{"type":"string"}},{"name":"expansion_token","in":"query","required":true,"description":"`expansion_token` from `/v1/facebook/post/comments` for the parent comment.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Cursor returned by the previous response for pagination.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/marketplace/location/search":{"get":{"operationId":"facebook_marketplace_location_search","summary":"Marketplace › Location › Search","description":"Returns Facebook Marketplace locations and cities matching a search term, each with its lat and lng coordinates.\n\nUse it first to turn a place name into coordinates, then pass those to marketplace/search.\n\n**20 credits** per call.","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Location search query (city or area name).","schema":{"type":"string","example":"Los Angeles"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Marketplace","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/facebook/marketplace/search":{"get":{"operationId":"facebook_marketplace_search","summary":"Marketplace › Search","description":"Returns Facebook Marketplace listings near a lat/lng, each with title, price, location, photo, delivery types, and sold or live flags.\n\nUse it to find listings in an area; get lat and lng from marketplace/location/search, and de-duplicate by listing id since ordering can shift.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword (e.g., `bike`, `couch`).","schema":{"type":"string","example":"bike"}},{"name":"lat","in":"query","required":true,"description":"Latitude of the search location.","schema":{"type":"string","example":"40.7128"}},{"name":"lng","in":"query","required":true,"description":"Longitude of the search location.","schema":{"type":"string","example":"-74.0060"}},{"name":"radius_km","in":"query","required":false,"description":"Search radius in kilometers.","schema":{"type":"integer"}},{"name":"min_price","in":"query","required":false,"description":"Minimum listing price.","schema":{"type":"integer"}},{"name":"max_price","in":"query","required":false,"description":"Maximum listing price.","schema":{"type":"integer"}},{"name":"count","in":"query","required":false,"description":"Number of listings to return per page.","schema":{"type":"integer"}},{"name":"sort_by","in":"query","required":false,"description":"Sort order for results.","schema":{"type":"string","enum":["suggested","distance_ascend","creation_time_descend","price_ascend","price_descend"]}},{"name":"delivery_method","in":"query","required":false,"description":"Delivery filter: local pickup only, shipping only, or all.","schema":{"type":"string","enum":["all","local_pickup","shipping"]}},{"name":"condition","in":"query","required":false,"description":"Filter listings by item condition.","schema":{"type":"string","enum":["new","used_like_new","used_good","used_fair"]}},{"name":"date_listed","in":"query","required":false,"description":"Filter by listing recency (relative window or numeric day count).","schema":{"type":"string","enum":["all","1","7","30","last_24_hours","last_7_days","last_30_days"]}},{"name":"availability","in":"query","required":false,"description":"Filter by listing status: `available`, `sold`, or `all`.","schema":{"type":"string","enum":["available","sold","all"]}},{"name":"cursor","in":"query","required":false,"description":"Opaque pagination cursor returned by the previous response: forward as-is.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Marketplace","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/facebook/marketplace/item":{"get":{"operationId":"facebook_marketplace_item","summary":"Marketplace › Item","description":"Returns one Facebook Marketplace listing: title, description, price, location, condition, photos, seller, and availability flags.\n\nUse it after marketplace/search when you need one listing in full, by numeric id or Marketplace URL.\n\n**20 credits** per call.","tags":["facebook"],"parameters":[{"name":"id","in":"query","required":false,"description":"Facebook Marketplace item ID (numeric). Provide at least one of: `id`, `url`.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"Full URL of the Marketplace item. Provide at least one of: `id`, `url`.","schema":{"type":"string","example":"https://www.facebook.com/marketplace/item/1656586118821988/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Marketplace","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/events/search":{"get":{"operationId":"facebook_events_search","summary":"Events › Search","description":"Returns public Facebook events matching a keyword, each with name, date sentence, venue, cover photo, interested and going counts, and online and past flags.\n\nUse it to find events by topic anywhere; filter on is_past yourself, since the directory also returns events that have already happened.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Event name or keyword to search for.","schema":{"type":"string","example":"dogs"}},{"name":"cursor","in":"query","required":false,"description":"Cursor returned by the previous response for pagination.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Events","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/facebook/events":{"get":{"operationId":"facebook_events","summary":"Events","description":"Returns the events listed on a Facebook city or region events page, each with a title, link, cover image, the start time, the venue, and the going and interested counts.\n\nUse it to see what is on in a place, optionally narrowed by a time filter; use profile/events for one page's own events. The optional include=details adds the description, address and hosts.\n\n**Metered: 20–260 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the city's Facebook Events page.","schema":{"type":"string","example":"https://www.facebook.com/events/explore/saint-petersburg-florida/111326725552547"}},{"name":"time","in":"query","required":false,"description":"Relative time window. Defaults to all time when omitted.","schema":{"type":"string","enum":["today","this_week","next_week"]}},{"name":"cursor","in":"query","required":false,"description":"Cursor returned by the previous response for pagination.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `details` (one token only) to fill, on every event in this one call, `post.ext.event.description`, `address`, `city`, `latitude`, `longitude`, `hosts`, `host_context_text`, `category`, `privacy`, `is_canceled` and `attendance_count`, and the host credit on `post.author.display_name`. Without it the call is unchanged.","schema":{"type":"string","enum":["details"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":260},"x-group":"Events","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/event/details":{"get":{"operationId":"facebook_event_details","summary":"Event › Details","description":"Returns one Facebook event in full: title, description, start and end time, location, host, cover image, and RSVP counts when shown.\n\nUse it after events, events/search, or profile/events when a listing row is not enough, by event id or URL.\n\n**20 credits** per call.","tags":["facebook"],"parameters":[{"name":"id","in":"query","required":false,"description":"Facebook event ID (numeric). Provide at least one of: `id`, `url`.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"Full URL of the event. Provide at least one of: `id`, `url`.","schema":{"type":"string","example":"https://www.facebook.com/events/3819476484850108/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Event","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/adlibrary/ad/transcript":{"get":{"operationId":"facebook_adlibrary_ad_transcript","summary":"Adlibrary › Ad › Transcript","description":"Returns the spoken words of a Facebook Ad Library video ad, from Facebook's captions when available or transcribed from the video itself.\n\nUse it when you need what an ad says out loud; adlibrary/ad returns the creative and spend but not the speech.\n\n**200 credits** per call.","tags":["facebook"],"parameters":[{"name":"id","in":"query","required":false,"description":"Facebook Ad Library ad ID. Ad ids rotate as campaigns end, so take a current one from `/v1/facebook/adlibrary/company/ads` rather than reusing an old one. Provide at least one of: `id`, `url`.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"Facebook Ad Library URL for the ad. A page URL is rejected with a 400. Provide at least one of: `id`, `url`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Adlibrary","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranscriptOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/profile/full":{"get":{"operationId":"facebook_profile_full","summary":"Profile › Full","description":"Use it instead of calling profile and profile/posts yourself; the profile still comes back even if the posts part fails.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full Facebook profile or page URL. One of the identity params is required.","schema":{"type":"string","example":"https://www.facebook.com/mrbeast"}},{"name":"posts","in":"query","required":false,"description":"How many of the fetched recent posts to return and compute the metrics over (1-100, default 25).","schema":{"type":"integer","example":25}},{"name":"cursor","in":"query","required":false,"description":"Pass a prior response's posts_cursor to read the next page of posts.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/facebook/profile/reels/full":{"get":{"operationId":"facebook_profile_reels_full","summary":"Profile › Reels › Full","description":"Returns a page's reels with exact per-reel engagement merged in: views, likes, comments, and shares, plus each reel's id, thumbnail, and link.\n\nUse it instead of profile/reels when the numbers matter, since that list carries only a rounded view count and no likes or comments.\n\n**Metered: 100–500 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Facebook page or profile","schema":{"type":"string","example":"https://www.facebook.com/Meta"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from a prior response's next_cursor to page deeper.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Return up to this many reels in one call (1-50). The endpoint pages the underlying list server-side until it has collected this many (or runs out), and bills per page read. Omit for a single page.","schema":{"type":"integer"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":500},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/facebook/search/posts":{"get":{"operationId":"facebook_search_posts","summary":"Search › Posts","description":"Returns public Facebook posts matching a keyword, each with text, permalink, publish time, like count, comment count, and author.\n\nUse it when you have a phrase, not a page URL. recent_posts=true ranks by recency; start_date and end_date bound the window.\n\n**Metered: 20–100 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keyword or phrase to search for.","schema":{"type":"string","example":"NASA"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response.","schema":{"type":"string"}},{"name":"start_date","in":"query","required":false,"description":"Include posts on or after this date (YYYY-MM-DD).","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Include posts on or before this date (YYYY-MM-DD).","schema":{"type":"string"}},{"name":"recent_posts","in":"query","required":false,"description":"When true, rank by recency instead of relevance.","schema":{"type":"boolean"}},{"name":"location_uid","in":"query","required":false,"description":"Facebook location id to scope the search.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}}],"x-credits":{"min":20,"max":100},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/search/pages":{"get":{"operationId":"facebook_search_pages","summary":"Search › Pages","description":"Returns Facebook pages matching a keyword, each with page id, display name, permalink, avatar, and verified flag.\n\nUse it to find pages by name; follower counts are not on this card, so take author.url to profile for the full page.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keyword or phrase to search for.","schema":{"type":"string","example":"NASA"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response.","schema":{"type":"string"}},{"name":"location_uid","in":"query","required":false,"description":"Facebook location id to scope the search.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/search/people":{"get":{"operationId":"facebook_search_people","summary":"Search › People","description":"Returns Facebook people matching a keyword, each with profile id, display name, permalink, avatar, and verified flag.\n\nUse it to find people by name. The id is often a pfbid token, not a numeric user id, and follower counts are not on this card.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Name or phrase to search for.","schema":{"type":"string","example":"NASA"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response.","schema":{"type":"string"}},{"name":"location_uid","in":"query","required":false,"description":"Facebook location id to scope the search to a city.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/search/videos":{"get":{"operationId":"facebook_search_videos","summary":"Search › Videos","description":"Returns public Facebook videos matching a keyword, each with video id, caption, permalink, thumbnail, and author.\n\nUse it to find videos by phrase. View counts on this card are a display string and are not parsed into engagement.views.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keyword or phrase to search for.","schema":{"type":"string","example":"NASA"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response.","schema":{"type":"string"}},{"name":"start_date","in":"query","required":false,"description":"Include videos on or after this date (YYYY-MM-DD).","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Include videos on or before this date (YYYY-MM-DD).","schema":{"type":"string"}},{"name":"recent_videos","in":"query","required":false,"description":"When true, rank by recency instead of relevance.","schema":{"type":"boolean"}},{"name":"location_uid","in":"query","required":false,"description":"Facebook location id to scope the search.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/facebook/search/groups":{"get":{"operationId":"facebook_search_groups","summary":"Search › Groups","description":"Returns public Facebook groups matching your keywords, one row per group, with the group's name, id and URL in the same shape the group endpoints take.\n\nUse it when you need to find the groups to read before pulling their posts. Add include=details for member counts, descriptions and privacy.\n\n**Metered: 20–220 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["facebook"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keywords describing the groups to find, for example `vintage cars`. Keywords only: the search is already limited to public Facebook groups, so a `site:` operator is refused before billing.","schema":{"type":"string","example":"vintage cars"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1. Forwarding `pagination.next_cursor` as `cursor` does the same.","schema":{"type":"integer","minimum":1}},{"name":"include","in":"query","required":false,"description":"Set to `details` (one token only) to fill, on every group in this one call, `author.followers` (members), `author.bio` (the description), `author.joined_at`, `author.ext.group.privacy_label`, `visibility_label`, `activity` and `id` (the numeric group id), and the name where it was null. Without it the call is unchanged.","schema":{"type":"string","enum":["details"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":{"min":20,"max":220},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/profile":{"get":{"operationId":"instagram_profile","summary":"Profile","description":"Returns an Instagram account's public profile: bio, exact integer follower count on author.followers, following count, picture URL, verification, and author.ext.public_email from the bio.\n\n**20 credits** per call.","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Instagram username without the @ symbol","schema":{"type":"string","example":"instagram"}},{"name":"trim","in":"query","required":false,"description":"Set to true to get a trimmed response","schema":{"type":"boolean"}},{"name":"contact_email","in":"query","required":false,"description":"Optional. When 1, also returns author.ext.contact_email: when the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim from the bio. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. author.ext.public_email is unchanged. No extra credits.","schema":{"type":"string","enum":["1"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/profile/about":{"get":{"operationId":"instagram_profile_about","summary":"Profile › About","description":"Returns Instagram's \"About this account\" details for a public account (country, month joined, published contact) plus its follower count and lifetime post count.\n\nUse it when you need an account's total post count, or to tell where a creator is based, for example to include or exclude a region.\n\n**20 credits** per call.","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Instagram username without the @ symbol","schema":{"type":"string","example":"instagram"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/profile/posts":{"get":{"operationId":"instagram_profile_posts","summary":"Profile › Posts","description":"Returns a user's recent posts with caption, like and comment counts, media URL, media type, and timestamp; share counts are not included. Collab posts list every co-author under ext.coauthors.\n\nUse it for a plain feed pull; profile/posts/full adds per-post share counts. On a collab post the author is whoever created it, so read ext.coauthors for everyone on it.\n\n**Metered: 20–260 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Instagram username without the @ symbol","schema":{"type":"string","example":"instagram"}},{"name":"since","in":"query","required":false,"description":"Only posts published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older posts are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned posts sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.","schema":{"type":"string","example":"2026-09-01"}},{"name":"stop_at_id","in":"query","required":false,"description":"The id (`post.id`) or URL (`post.url`) of the newest post you already hold. The page stops just before it: that post and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned post never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.","schema":{"type":"string"}},{"name":"next_max_id","in":"query","required":false,"description":"Cursor to get next page of results.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true to request the lighter record. The differences trim itself makes are that `post.ext.coauthors` is omitted and `post.flags.pinned` is null, because the trimmed record carries neither signal; every other canonical field is still returned. Trim does not affect the two record widths described above, which vary per row in both modes.","schema":{"type":"boolean"}},{"name":"exclude_pinned","in":"query","required":false,"description":"Set to true to leave out the posts the owner pinned to the top of the profile. A row whose pin state is unknown, which is every row with trim=true, is kept.","schema":{"type":"boolean"}},{"name":"recent_days","in":"query","required":false,"description":"Keep only posts published in the last N days (1 to 3650). Older posts are removed from the page, pinned ones included, and once a page reaches posts older than the window `next_cursor` is not returned, so a walk back to a date window stops on its own. The page still costs what a page costs.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"include","in":"query","required":false,"description":"Photos and carousels are never looked up.","schema":{"type":"string","enum":["audio"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":{"min":20,"max":260},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/post":{"get":{"operationId":"instagram_post","summary":"Post","description":"Returns one post's details: caption, view count on videos and reels, like and comment counts, media URLs, media type, the author, and any tagged users.\n\nUse it for the standard single post lookup, views included on video; use post/stats only when you also need the share count.\n\n**20 credits** per call.","tags":["instagram"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Instagram post","schema":{"type":"string","example":"https://www.instagram.com/p/DcCH2ZygIiP/"}},{"name":"region","in":"query","required":false,"description":"2 letter country code to set the proxy in","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true to get a trimmed response","schema":{"type":"boolean"}},{"name":"download_media","in":"query","required":false,"description":"Set to true to also download the video/images and get back durable hosted media URLs under `data.post.ext.download_media_urls` (`[{ post_id, cdn_url, type, cached }]`). Use these for archiving; the raw `media_urls` are short-lived signed CDN links that expire. Adds a few seconds of latency while the media is fetched.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/post/comments":{"get":{"operationId":"instagram_post_comments","summary":"Post › Comments","description":"Returns a post's comments, each with its text, author, like count, reply count, and time, ranked by popularity by default or newest first.\n\nUse it to read the comment section of one post, paging deeper with the cursor it returns; pass sort=recent for newest first.\n\n**Metered: 100–300 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"url","in":"query","required":true,"description":"URL of the Instagram post (a /p/, /reel/, /reels/, or /tv/ link).","schema":{"type":"string","example":"https://www.instagram.com/p/DXidPIVDU6M/"}},{"name":"sort","in":"query","required":false,"description":"Ordering: `top` (default) ranks by Instagram's popularity order (most-liked first); `recent` returns newest-first. Use `recent` when you are paging through a whole thread: Instagram ranks only the most-liked head, so a `top` walk starts repeating comments once you page past it.","schema":{"type":"string","enum":["top","recent"]}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"safe_url","in":"query","required":false,"description":"When true, returns URL-safe profile picture links suitable for embedding.","schema":{"type":"boolean"}},{"name":"scan_pages","in":"query","required":false,"description":"Optional, 1 to 3, default 1. With 2 or 3, the call reads that many pages, drops comments repeated across pages, and returns them all sorted by likes (sort=top) or newest first (sort=recent). Use it when the first page of a top-sorted thread is low-like comments.","schema":{"type":"integer","minimum":1,"maximum":3}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":300},"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/comment":{"get":{"operationId":"instagram_comment","summary":"Comment","description":"Returns one comment's current text, like count, reply count, author, and timestamp, plus the post's total comment count for context.\n\nUse it when you already know which comment you want, so you do not have to page through post/comments to find it again.\n\n**Metered: 100–300 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["instagram"],"parameters":[{"name":"comment_url","in":"query","required":false,"description":"An Instagram comment permalink: `https://www.instagram.com/p/{shortcode}/c/{commentId}/` (or a reply permalink `.../c/{parent}/r/{reply}/`, best-effort). Mutually exclusive with `post_url`+`comment_id`. Provide at least one of: `comment_url`, `post_url`.","schema":{"type":"string","example":"https://www.instagram.com/p/CnpPou9hWqq/c/18007013966365752/"}},{"name":"post_url","in":"query","required":false,"description":"The post URL (a `/p/`, `/reel/`, `/reels/`, or `/tv/` link). Combine with `comment_id`, or with `author_username`/`text_contains` for a search. Provide at least one of: `comment_url`, `post_url`.","schema":{"type":"string"}},{"name":"comment_id","in":"query","required":false,"description":"The target comment's numeric id (`pk`). Requires `post_url`.","schema":{"type":"string"}},{"name":"author_username","in":"query","required":false,"description":"Return up to `max` comments authored by this username (no comment id needed). Mutually exclusive with `text_contains` and any comment id.","schema":{"type":"string"}},{"name":"text_contains","in":"query","required":false,"description":"Return up to `max` comments whose text contains this snippet (case-insensitive). Mutually exclusive with `author_username` and any comment id.","schema":{"type":"string"}},{"name":"deep_scan","in":"query","required":false,"description":"Widen the scan budget for deeply-buried comments (raises the per-chain page ceiling and deadline).","schema":{"type":"boolean"}},{"name":"position_hint","in":"query","required":false,"description":"Opaque token from a prior lookup's `lookup.position_hint`. Passing it back replays just the last-known sort chain first, making a re-check of an already-found comment cheap.","schema":{"type":"string"}},{"name":"max","in":"query","required":false,"description":"For `author_username`/`text_contains` search: max matches to return (1-20, default 5).","schema":{"type":"integer"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":300},"x-group":"Comment","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/basic-profile":{"get":{"operationId":"instagram_basic_profile","summary":"Basic Profile","description":"Returns a minimal Instagram profile looked up by numeric user id: username, full name, and profile picture.\n\nUse it when all you have is a numeric user id and only need the name and avatar; use profile for bio, follower counts, and verification.\n\n**20 credits** per call.","tags":["instagram"],"parameters":[{"name":"userId","in":"query","required":true,"description":"Instagram numeric user ID","schema":{"type":"string","example":"314216"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Basic profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/profile/reels":{"get":{"operationId":"instagram_profile_reels","summary":"Profile › Reels","description":"Returns a user's reels with view, like and comment counts and a thumbnail; share counts are not included here. Collab reels list every co-author under ext.coauthors.\n\nUse it for reels only rather than the whole post feed; use profile/reels/full when you also need per-reel share counts.\n\n**Metered: 20–280 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"user_id","in":"query","required":false,"description":"Instagram user id. Use this for faster response times. Provide at least one of: `user_id`, `handle`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"Instagram username without the @ symbol. Provide at least one of: `user_id`, `handle`.","schema":{"type":"string","example":"mrbeast"}},{"name":"since","in":"query","required":false,"description":"Only reels published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older reels are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned reels sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.","schema":{"type":"string","example":"2026-09-01"}},{"name":"stop_at_id","in":"query","required":false,"description":"The id (`post.id`) or URL (`post.url`) of the newest reel you already hold. The page stops just before it: that reel and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned reel never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.","schema":{"type":"string"}},{"name":"max_id","in":"query","required":false,"description":"Max id to get more reels. Get 'max_id' from previous response.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true to request the lighter record: a smaller, faster page that keeps the engagement, the author, the caption, the timestamp and the reel URL. What it drops is `post.content.media_urls` (the video file), `post.content.duration_seconds`, `post.ext.coauthors` and `post.flags.pinned`. The cover image is returned as `post.content.thumbnail_url` either way. Leave it unset when you need the video URL or the duration.","schema":{"type":"boolean"}},{"name":"exclude_pinned","in":"query","required":false,"description":"Set to true to leave out the posts the owner pinned to the top of the profile. A row whose pin state is unknown, which is every row with trim=true, is kept.","schema":{"type":"boolean"}},{"name":"recent_days","in":"query","required":false,"description":"Keep only posts published in the last N days (1 to 3650). Older posts are removed from the page, pinned ones included, and once a page reaches posts older than the window `next_cursor` is not returned, so a walk back to a date window stops on its own. The page still costs what a page costs.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"include","in":"query","required":false,"description":"`stats` returns the full stat line on every reel: `engagement.shares`, `engagement.saves` and `post.ext.repost_count` beside views, likes, comments, the remix counter, `post.ext.music_id` for original sounds and licensed music alike, and `post.ext.audio_cluster_id`, Instagram's audio cluster for the reel. It is served by a second source, so a cursor from a request without it cannot continue a walk with it; start from page 1. Both tokens can be combined (`include=audio,stats`).","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":{"min":20,"max":280},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/highlights":{"get":{"operationId":"instagram_highlights","summary":"Highlights","description":"Returns a user's saved story highlight collections, each with its title, cover image, and the number of items inside.\n\nUse it to list the highlight collections on a profile, then pass one of the ids to highlight/detail to open it.\n\n**20 credits** per call.","tags":["instagram"],"parameters":[{"name":"user_id","in":"query","required":false,"description":"Instagram user id. Use for faster response times. Provide at least one of: `user_id`, `handle`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"Instagram username without the @ symbol. Provide at least one of: `user_id`, `handle`.","schema":{"type":"string","example":"instagram"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Highlights","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/highlight/detail":{"get":{"operationId":"instagram_highlight_detail","summary":"Highlight › Detail","description":"Returns the individual stories saved inside one highlight, with their media URLs, timestamps, and interaction counts.\n\nUse it after highlights: pass the id it returned to see the contents of a single collection.\n\n**20 credits** per call.","tags":["instagram"],"parameters":[{"name":"id","in":"query","required":true,"description":"Instagram highlight ID: the numeric id, with or without the `highlight:` prefix. Get it from `/v1/instagram/user/highlights`.","schema":{"type":"string","example":"18067016518767507"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Highlight","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/search/reels":{"get":{"operationId":"instagram_search_reels","summary":"Search › Reels","description":"Returns reels matching a keyword, each with its view count, like count, and author; share and save counts are not included on this endpoint.\n\nUse it for keyword based reel discovery; search/hashtag is the better choice when you have a specific tag rather than a phrase. Pass a result URL to post/stats for a reel's share count.\n\n**Metered: 20–1300 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find Instagram reels","schema":{"type":"string","example":"workout routine"}},{"name":"date_posted","in":"query","required":false,"description":"Date posted","schema":{"type":"string","enum":["last-week","last-month","last-year"]}},{"name":"page","in":"query","required":false,"description":"The page number to return.","schema":{"type":"integer"}},{"name":"region","in":"query","required":false,"description":"Two-letter market code (ES, MX, DE, BR, KR, FR) to localise the results. Instagram does not rank search by country, so the market's own name is appended to your query (`fitness` with `ES` searches `fitness españa`), unless the query already names the market or is already written in the market's own script (Hangul for KR), which Instagram localises by itself. It favours creators from the market but does not promise that every creator is from it; send `country` for that. For a topic about a place, such as eSIMs or travel, a phrasing locals use works better (`esim móvil` rather than `esim`). Same price as a plain call. Only these markets are supported; any other code is refused with the list, at no charge. A typo is a free 400.","schema":{"type":"string","enum":["ES","MX","DE","BR","KR","FR"]}},{"name":"include","in":"query","required":false,"description":"Send `creator` to add each reel's creator card, read from the creator's About this account panel: `post.ext.author_country`, `author_followers`, `author_following`, `author_posts_count`, `author_public_email` and `author_public_phone`, plus the creator's name, avatar and verified flag where the row lacks them. `author_country` is the country the creator declares there, not where the reel was filmed; it is null when Instagram does not publish one, and nothing is guessed. A typo is a free 400.","schema":{"type":"string","enum":["creator"]}},{"name":"country","in":"query","required":false,"description":"Two-letter market code (ES, MX, DE, BR, KR, FR) to keep only reels whose creator is based in that market, read from the creator's own profile (`post.ext.author_country`). Adds the creator card (`include=creator`) and, when `region` is not sent, localises the query for the same market. When no row matches, the page is `items: []` with the warning `country_no_match`, and the lookups are still billed. A page left empty only because the creator lookups failed costs nothing. Works with `max_pages`. A typo is a free 400.","schema":{"type":"string","enum":["ES","MX","DE","BR","KR","FR"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":{"min":20,"max":1300},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/media/transcript":{"get":{"operationId":"instagram_media_transcript","summary":"Media › Transcript","description":"Returns the spoken words in an Instagram video or reel of up to 2 minutes as text. A video with no speech returns 404 with reason no_speech, free of charge.\n\nUse it when you need what was said in a video rather than its metrics; pass the reel or video URL. Photo posts and videos over 2 minutes cannot be transcribed.\n\n**200 credits** per call.","tags":["instagram"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Instagram video or reel (a `/reel/`, `/p/` or `/tv/` link to a video post). Photo posts have no audio to transcribe.","schema":{"type":"string","example":"https://www.instagram.com/reel/DHsD6HGqJhp/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Media","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranscriptOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/media/screen-text":{"get":{"operationId":"instagram_media_screen_text","summary":"Media › Screen Text","description":"Returns the text shown on an Instagram post's images, read by AI: the photo, each carousel slide up to 10, or a reel's cover frame, with results per slide.\n\nUse it for text designed into a post, like carousel headlines; the caption lives on post and spoken words on media/transcript. Text shown later in a reel is not read.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Instagram post, reel or video (a `/p/`, `/reel/`, `/reels/` or `/tv/` link)","schema":{"type":"string","example":"https://www.instagram.com/p/DdEqEl5Dl-S/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":100},"x-group":"Media","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/user/embed":{"get":{"operationId":"instagram_user_embed","summary":"User › Embed","description":"Returns an embeddable HTML snippet for an Instagram profile, meant to be dropped into a page on your own site.\n\nUse it when you want to display a profile on a web page; use profile instead when you need the follower numbers and bio as data.\n\n**20 credits** per call.","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Instagram username without the @ symbol","schema":{"type":"string","example":"instagram"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/audio/reels":{"get":{"operationId":"instagram_audio_reels","summary":"Audio › Reels","description":"Returns reels that use one specific audio track, each with its engagement counts and the account that posted it.\n\nUse it after search/music or music/trending: pass the audio_id to see who is posting with that sound.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"audio_id","in":"query","required":true,"description":"Instagram audio ID: the numeric id from an instagram.com/reels/audio/{audio_id}/ URL","schema":{"type":"string","example":"1392969992841787"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Audio","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/search/hashtag":{"get":{"operationId":"instagram_search_hashtag","summary":"Search › Hashtag","description":"Returns public posts carrying a hashtag, each with shortcode, URL, caption, media URLs, engagement counts, and the author; share and save counts are not included.\n\nUse it to pull a hashtag feed; set type to top, recent, or clips to pick the ranking, and page deeper with the cursor it returns. Pass a result URL to post/stats for a share count.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"hashtag","in":"query","required":true,"description":"The hashtag to search for. The leading # is optional.","schema":{"type":"string","example":"makeup"}},{"name":"type","in":"query","required":false,"description":"Ranking of the returned posts: `top` (default), `recent`, or `clips` (reels only). Only `recent` pages: `top` and `clips` are one ranked page each and return `has_more: false`.","schema":{"type":"string","enum":["top","recent","clips"]}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor for `type=recent` only. Use the `next_cursor` from the previous response and send the same `type` again. `top` and `clips` return no cursor.","schema":{"type":"string"}},{"name":"safe_url","in":"query","required":false,"description":"When true, returns URL-safe media links suitable for embedding.","schema":{"type":"boolean"}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/search/profiles":{"get":{"operationId":"instagram_search_profiles","summary":"Search › Profiles","description":"Returns public profiles matching a keyword, each with username, display name, bio, follower and following counts, post count, and profile URL.\n\nUse it to find accounts by topic, keeping in mind it searches Google's index of Instagram rather than Instagram's own account search.\n\n**Metered: 20–500 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"query","in":"query","required":true,"description":"Bio or caption keyword/phrase to search for.","schema":{"type":"string","example":"yoga"}},{"name":"cursor","in":"query","required":false,"description":"The cursor returned by the previous response. In this version it is the next Google results page number.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"A typo is a free 400.","schema":{"type":"string","enum":["about"]}},{"name":"limit","in":"query","required":false,"description":"Cap the rows served, and with `include=about` the credits held. 1 to 12. Default 8 when the token is present so the hold is 17, not 25.","schema":{"type":"integer","minimum":1,"maximum":12}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":500},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/reels/trending":{"get":{"operationId":"instagram_reels_trending","summary":"Reels › Trending","description":"Returns reels from Instagram's public trending page, each with shortcode, URL, caption, media URLs, engagement counts where shown, and the account.\n\nUse it to sample global trends; it takes no region. Call again to see more. For one region, page location/posts after search/location.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Reels","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/followers":{"get":{"operationId":"instagram_followers","summary":"Followers","description":"Returns the accounts that follow a user, each with username, display name, avatar URL, verification status, and profile URL.\n\nUse it to walk an account's follower list, passing either handle or user_id and paging deeper with the cursor it returns.\n\n**Metered: 100–200 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":false,"description":"Instagram username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"mrbeast"}},{"name":"user_id","in":"query","required":false,"description":"Instagram numeric user ID. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"coverage","in":"query","required":false,"description":"Send `full` to walk a merged list: accounts are added from several reads of the list and no account appears twice inside a page, until the rows reach the profile's count in `data.total`. On the pages one source covered on its own a handful of accounts can repeat across consecutive pages; wherever that source cannot cover the list the merged walk runs instead, and it never returns an account it has already given you. Requires `handle`. A page usually takes about 8 seconds and can take up to about 45, and a `503` is retried with the same cursor. A cursor from this mode only continues this mode.","schema":{"type":"string","enum":["full"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":200},"x-group":"Followers","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/following":{"get":{"operationId":"instagram_following","summary":"Following","description":"Returns the accounts a user follows, each with username, display name, avatar URL, verification status, and profile URL.\n\nUse it for the other side of the graph from followers: the accounts this user chose to follow.\n\n**Metered: 100–200 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":false,"description":"Instagram username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"mrbeast"}},{"name":"user_id","in":"query","required":false,"description":"Instagram numeric user ID. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"coverage","in":"query","required":false,"description":"Send `full` to walk a merged list: accounts are added from several reads of the list and no account appears twice inside a page, until the rows reach the profile's count in `data.total`. On the pages one source covered on its own a handful of accounts can repeat across consecutive pages; wherever that source cannot cover the list the merged walk runs instead, and it never returns an account it has already given you. Requires `handle`. A page usually takes about 8 seconds and can take up to about 45, and a `503` is retried with the same cursor. A cursor from this mode only continues this mode.","schema":{"type":"string","enum":["full"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":200},"x-group":"Following","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/similar":{"get":{"operationId":"instagram_similar","summary":"Similar","description":"Returns the accounts Instagram suggests as similar to a given user, each with username, display name, avatar URL, verification status, and URL.\n\nUse it to find accounts comparable to one you already know; it returns a single fixed list and cannot be paged.\n\n**Metered: 100–1700 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":false,"description":"Instagram username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"mrbeast"}},{"name":"user_id","in":"query","required":false,"description":"Instagram numeric user ID. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `profile` (one token only) to fill `author.followers`, `author.following` and `author.bio` on every row in this one call, plus `author.posts_count` where the lookup has an exact total. The hydrated list is its top 20 accounts unless you pass `limit` (1 to 80).","schema":{"type":"string","enum":["profile"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N accounts of the list (1 to 80). Without `include=profile` the full list is returned unless you cap it.","schema":{"type":"integer","minimum":1,"maximum":80}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":1700},"x-group":"Similar","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/post/likers":{"get":{"operationId":"instagram_post_likers","summary":"Post › Likers","description":"Returns a sample of the accounts that liked a post, each with username, display name, avatar, and verification status, plus the full like count.\n\nUse it to see who liked a post, accepting that Instagram exposes only about the first 100 likers however many likes the post has.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"url","in":"query","required":true,"description":"URL of the Instagram post (a /p/ or /reel/ link).","schema":{"type":"string","example":"https://www.instagram.com/p/CnpPou9hWqq/"}},{"name":"safe_url","in":"query","required":false,"description":"When true, returns URL-safe profile picture links suitable for embedding.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/post/stats":{"get":{"operationId":"instagram_post_stats","summary":"Post › Stats","description":"Returns one post's engagement: likes, comments, and, on video posts only, the play count and the share count shown by the paper plane icon. Collab posts also list co-authors under ext.coauthors.\n\nUse it when you need the share count for a single post, or the co-author list of one collab post; views also come on post itself, and photo posts return both numbers as null.\n\n**Metered: 100–180 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["instagram"],"parameters":[{"name":"url","in":"query","required":true,"description":"URL of the Instagram post (a /p/, /reel/, or /tv/ link).","schema":{"type":"string","example":"https://www.instagram.com/p/CnpPou9hWqq/"}},{"name":"safe_url","in":"query","required":false,"description":"When true, returns URL-safe media links suitable for embedding.","schema":{"type":"boolean"}},{"name":"include","in":"query","required":false,"description":"Set to `saves` (one token only) to ask a third source for a reel's save count (`post.engagement.saves`) and repost count (`post.ext.repost_count`) when the plain call returned without them. Photos and carousels are never looked up, because Instagram publishes no save count on them.","schema":{"type":"string","enum":["saves"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":180},"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/tagged":{"get":{"operationId":"instagram_tagged","summary":"Tagged","description":"Returns posts that tag a given user, each with its shortcode, URL, caption, media URLs, engagement counts, and the account that posted it.\n\nUse it to see what other people posted about an account; profile/posts returns only what the account posted itself.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":false,"description":"Instagram username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"mrbeast"}},{"name":"user_id","in":"query","required":false,"description":"Instagram numeric user ID. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"safe_url","in":"query","required":false,"description":"When true, returns URL-safe media links suitable for embedding.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Tagged","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/location/posts":{"get":{"operationId":"instagram_location_posts","summary":"Location › Posts","description":"Returns posts tagged at a place, newest first, about 60 a page, each with shortcode, URL, caption, media URLs, engagement counts, and the author.\n\nUse it after search/location for region-scoped posts. Page back in time with the cursor; for a time window, stop once a whole page is older than its start.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"location_id","in":"query","required":true,"description":"Instagram location id. Use location.pk from /v1/instagram/search/location.","schema":{"type":"string","example":"331004901"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor. Use the `next_cursor` from the previous response to fetch the next, older page.","schema":{"type":"string"}},{"name":"safe_url","in":"query","required":false,"description":"When true, returns URL-safe media links suitable for embedding.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Location","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/engagement":{"get":{"operationId":"instagram_engagement","summary":"Engagement","description":"Use it when you want the engagement math done for you, including likes and comments per hour on each post, rather than raw posts to total yourself.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Instagram username without the @ symbol.","schema":{"type":"string","example":"mrbeast"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Engagement","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/search/location":{"get":{"operationId":"instagram_search_location","summary":"Search › Location","description":"Returns places matching a keyword, each with its location id, name, and coordinates, plus a display title and subtitle.\n\nUse it to turn a place name into a location id, then pass that id to location/posts to see what was posted there.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find Instagram locations.","schema":{"type":"string","example":"Paris"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/search":{"get":{"operationId":"instagram_search","summary":"Search","description":"Returns mixed Instagram search matches for a query: accounts, hashtags, and places in one payload.\n\nUse it when you need the same mixed results Instagram's search box shows; search/profiles, search/hashtag, and search/location split those types.\n\n**20 credits** per call.","tags":["instagram"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword as typed in Instagram's search box.","schema":{"type":"string","example":"nike"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/search/popular":{"get":{"operationId":"instagram_search_popular","summary":"Search › Popular","description":"Returns popular Instagram posts matching a keyword, each with caption, play count, permalink, thumbnail, and the owner's username.\n\nUse it to sample what is popular for a topic; search/reels is the choice when you want a keyword reel feed instead.\n\n**Metered: 20–260 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keyword or topic to find popular Instagram posts.","schema":{"type":"string","example":"basketball"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `engagement` (one token only) to fill `post.engagement.likes`, `.comments`, `.shares`, `.views`, `post.published_at` and `post.content.duration_seconds` on every row in this one call.","schema":{"type":"string","enum":["engagement"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N rows of the page (1 to 12) after the search has run. It is not a page size: `next_cursor` still advances past the full page, so rows beyond N on this page are not returned by the next page.","schema":{"type":"integer","minimum":1,"maximum":12}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":260},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/post/comment/replies":{"get":{"operationId":"instagram_post_comment_replies","summary":"Post › Comment › Replies","description":"Returns replies under one Instagram comment, each with text, like count, nested reply count, author, and timestamp.\n\nUse it after post/comments: pass the post URL and the parent comment_id to expand one thread.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"url","in":"query","required":true,"description":"URL of the Instagram post that holds the parent comment.","schema":{"type":"string","example":"https://www.instagram.com/reel/C8rKmYvsrck"}},{"name":"comment_id","in":"query","required":true,"description":"Id of the parent comment whose replies to list.","schema":{"type":"string","example":"18038110327814211"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/username-suggestions":{"get":{"operationId":"instagram_username_suggestions","summary":"Username Suggestions","description":"Returns suggested available Instagram usernames built from a keyword you supply.\n\nUse it when picking a new handle; it invents name ideas and does not look up existing accounts, which is what search/profiles does.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keyword to seed the username suggestions.","schema":{"type":"string","example":"mrbeast"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Username suggestions","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/search/music":{"get":{"operationId":"instagram_search_music","summary":"Search › Music","description":"Returns audio tracks matching a keyword, each with artist, title, audio and cover artwork URLs, duration, and usage details.\n\nUse it to find a specific sound by name; music/trending is the choice when you want whatever is popular right now.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find Instagram audio tracks.","schema":{"type":"string","example":"beyonce"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/stories":{"get":{"operationId":"instagram_stories","summary":"Stories","description":"Returns the stories a user has live right now, each with its id, image or video URLs, thumbnail, duration, capture time, and the author.\n\nUse it to check an account's current story tray; an account with nothing live returns an empty list rather than an error.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":false,"description":"Instagram username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"natgeo"}},{"name":"user_id","in":"query","required":false,"description":"Instagram numeric user ID. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"safe_url","in":"query","required":false,"description":"When true, returns URL-safe media links suitable for embedding.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Stories","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/instagram/story/download":{"get":{"operationId":"instagram_story_download","summary":"Story › Download","description":"Returns the full resolution image or video URLs and metadata for one specific story.\n\nUse it after stories: pass the author's user_id plus the story_id it returned to pull that one story's media.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"user_id","in":"query","required":true,"description":"Instagram numeric user ID of the story's author.","schema":{"type":"string"}},{"name":"story_id","in":"query","required":true,"description":"ID of the individual story to download.","schema":{"type":"string"}},{"name":"safe_url","in":"query","required":false,"description":"When true, returns URL-safe media links suitable for embedding.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Story","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/music/trending":{"get":{"operationId":"instagram_music_trending","summary":"Music › Trending","description":"Returns a chart of licensed tracks trending on Instagram, each with title, artist, audio and cover artwork URLs, and usage details.\n\nUse it to spot sounds worth posting with. It takes no region: the chart follows the viewing account's market.\n\n**100 credits** per call.","tags":["instagram"],"parameters":[{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Music","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/profile/full":{"get":{"operationId":"instagram_profile_full","summary":"Profile › Full","description":"Use it instead of calling profile and profile/posts separately; the profile still comes back if posts cannot be fetched, with post metrics null.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Instagram username or handle, with or without a leading @. One of the identity params is required.","schema":{"type":"string","example":"mrbeast"}},{"name":"posts","in":"query","required":false,"description":"How many of the fetched recent posts to return and compute the metrics over (1-100, default 25).","schema":{"type":"integer","example":25}},{"name":"cursor","in":"query","required":false,"description":"Pass a prior response's posts_cursor to read the next page of posts.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/profile/reels/full":{"get":{"operationId":"instagram_profile_reels_full","summary":"Profile › Reels › Full","description":"Returns a user's reels with views, likes, comments, and a per-reel share count where the second source exposes one, plus a coverage figure.\n\nUse it when share counts matter across a creator's reels; profile/reels is the lighter choice when views, likes, and comments are enough.\n\n**Metered: 100–500 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":false,"description":"Instagram username (with or without a leading @). Required unless user_id is given. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"sid.and.listen"}},{"name":"user_id","in":"query","required":false,"description":"Numeric Instagram user id. Alternative to handle: the account's username is looked up from the id first, so a user_id call returns the same items, share counts and price as a handle call. An id that matches no account returns 404 and is not charged. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from a prior response's next_cursor to page deeper.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Return up to this many items in one call (1-50). The endpoint pages the underlying source server-side until it has collected this many (or runs out), and bills per page read. Omit for a single page.","schema":{"type":"integer"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":500},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/instagram/profile/posts/full":{"get":{"operationId":"instagram_profile_posts_full","summary":"Profile › Posts › Full","description":"Returns a user's recent posts with likes, comments, views, and a per-post share count where the second source exposes one, plus a coverage figure.\n\nUse it when share counts matter across a whole feed; profile/posts is the lighter choice when likes and comments are enough.\n\n**Metered: 100–500 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["instagram"],"parameters":[{"name":"handle","in":"query","required":false,"description":"Instagram username (with or without a leading @). Required unless user_id is given. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"sid.and.listen"}},{"name":"user_id","in":"query","required":false,"description":"Numeric Instagram user id. Alternative to handle: the account's username is looked up from the id first, so a user_id call returns the same items, share counts and price as a handle call. An id that matches no account returns 404 and is not charged. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from a prior response's next_cursor to page deeper.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Return up to this many items in one call (1-50). The endpoint pages the underlying source server-side until it has collected this many (or runs out), and bills per page read. Omit for a single page.","schema":{"type":"integer"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":500},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile":{"get":{"operationId":"linkedin_profile","summary":"Profile","description":"Returns a LinkedIn member's public profile: full name, headline, location, follower and connection counts, profile picture, and profile URL.\n\nUse it as the starting point for any person lookup, then call the profile sub-endpoints for their experiences, skills, or posts.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile page","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/company":{"get":{"operationId":"linkedin_company","summary":"Company","description":"Returns a LinkedIn company page: company name, description, follower count, headquarters location, website, and logo.\n\nUse it to look up a company by its page URL, and to get the numeric company_id that the other company endpoints need.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn company page","schema":{"type":"string","example":"https://www.linkedin.com/company/microsoft/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/company/by-domain":{"get":{"operationId":"linkedin_company_by_domain","summary":"Company › By Domain","description":"Returns the LinkedIn company page that owns a website domain: name, description, follower count, headquarters, website, logo, and numeric company id.\n\nUse it when you have a company website rather than a LinkedIn page URL. company looks up the same record from a page URL.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Company website domain, with or without a scheme. `microsoft.com` and `https://www.microsoft.com/` resolve the same page.","schema":{"type":"string","example":"microsoft.com"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/similar":{"get":{"operationId":"linkedin_profile_similar","summary":"Profile › Similar","description":"Returns members LinkedIn groups with a given profile, each with handle, headline, profile URL, and picture.\n\nUse it after profile to find nearby people; search/people filters by title, company, or location instead.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile to find similar members for.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/search/companies":{"get":{"operationId":"linkedin_search_companies","summary":"Search › Companies","description":"Returns LinkedIn company pages matching a keyword, each with name, tagline, page URL, and logo.\n\nUse it to find companies by name and optional size, industry, location, or open-jobs filters, then pass a result to company.\n\n**200 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"query","in":"query","required":true,"description":"Company name or keyword.","schema":{"type":"string","example":"microsoft"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"company_size","in":"query","required":false,"description":"Headcount bucket. One of `1-10`, `11-50`, `51-200`, `201-500`, `501-1000`, `1001-5000`, `5001-10000`, `10001+`.","schema":{"type":"string","enum":["1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10001+"]}},{"name":"has_jobs","in":"query","required":false,"description":"When true, return only companies that currently have open jobs.","schema":{"type":"boolean"}},{"name":"industry_ids","in":"query","required":false,"description":"Comma-separated industry ids from /v1/linkedin/search/industry.","schema":{"type":"string"}},{"name":"geocode","in":"query","required":false,"description":"Comma-separated location ids from /v1/linkedin/search/location.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/posted-jobs":{"get":{"operationId":"linkedin_profile_posted_jobs","summary":"Profile › Posted Jobs","description":"Returns the jobs a LinkedIn member has posted, each with job id, title, hiring company, location, and posting date.\n\nUse it when you have a person's profile URL and want the roles they listed, not every opening at their employer.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile whose posted jobs to list.","schema":{"type":"string","example":"https://www.linkedin.com/in/jipeng-han/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/job/hiring-team":{"get":{"operationId":"linkedin_job_hiring_team","summary":"Job › Hiring Team","description":"Returns the members LinkedIn shows as the hiring team on a job, each with handle, headline, profile URL, and picture.\n\nUse it after search/jobs or company/jobs, passing a job id or the job URL.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"id","in":"query","required":false,"description":"LinkedIn job ID (from /v1/linkedin/search/jobs or /v1/linkedin/company/jobs). Provide at least one of: `id`, `url`.","schema":{"type":"string","example":"4463963538"}},{"name":"url","in":"query","required":false,"description":"Full URL of the LinkedIn job posting. Provide at least one of: `id`, `url`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Job","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/articles":{"get":{"operationId":"linkedin_profile_articles","summary":"Profile › Articles","description":"Returns Pulse articles a LinkedIn member published, each with text, author, engagement, and date.\n\nUse it for long-form writing. profile/posts is the short-form feed; article fetches one Pulse URL.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile whose articles to list.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/article":{"get":{"operationId":"linkedin_article","summary":"Article","description":"Returns one LinkedIn Pulse article: its text, author, like and comment counts, and publish time.\n\nUse it when you have a /pulse/ URL. Comments and reactions are article/comments and article/reactions.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn Pulse article.","schema":{"type":"string","example":"https://www.linkedin.com/pulse/hidden-costs-unreliable-electricity-bill-gates/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Article","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/article/comments":{"get":{"operationId":"linkedin_article_comments","summary":"Article › Comments","description":"Returns comments on a LinkedIn Pulse article, with commenter identity, text, and timestamp.\n\nUse it after article or profile/articles, passing the article URL.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn Pulse article.","schema":{"type":"string","example":"https://www.linkedin.com/pulse/2024-corporate-climate-pivot-bill-gates-u89mc/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Article","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/article/reactions":{"get":{"operationId":"linkedin_article_reactions","summary":"Article › Reactions","description":"Returns members who reacted to a LinkedIn Pulse article, each with handle, name, picture, and reaction type.\n\nUse it after article, passing the same Pulse URL.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn Pulse article.","schema":{"type":"string","example":"https://www.linkedin.com/pulse/2024-corporate-climate-pivot-bill-gates-u89mc/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Article","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/search/hashtag":{"get":{"operationId":"linkedin_search_hashtag","summary":"Search › Hashtag","description":"Returns public LinkedIn posts tagged with a hashtag, each with text, author, engagement, and date.\n\nUse it to monitor a tag. Keyword search across posts is search/posts.\n\n**200 credits** per call.","tags":["linkedin"],"parameters":[{"name":"query","in":"query","required":true,"description":"Hashtag to search, with or without a leading #.","schema":{"type":"string","example":"hiring"}},{"name":"sort_by","in":"query","required":false,"description":"Result ordering: recent, oldest, or relevance.","schema":{"type":"string","enum":["recent","oldest","relevance"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/activity":{"get":{"operationId":"linkedin_profile_activity","summary":"Profile › Activity","description":"Returns when a LinkedIn member last showed public activity.\n\nUse it to see recency, not the feed itself. profile/posts returns the posts.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile.","schema":{"type":"string","example":"https://www.linkedin.com/in/adamselipsky/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/company/also-viewed":{"get":{"operationId":"linkedin_company_also_viewed","summary":"Company › Also Viewed","description":"Returns company pages LinkedIn shows as people also viewed, each with name, page URL, and logo.\n\nUse it after company to find nearby pages; pass the numeric company_id from company, or the company page URL.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"company_id","in":"query","required":false,"description":"Numeric LinkedIn company id, for example 1441 for Google. It is `author.id` on `/v1/linkedin/company`. Send this or `url`. Provide at least one of: `company_id`, `url`.","schema":{"type":"string","example":"1441"}},{"name":"url","in":"query","required":false,"description":"Full URL of the LinkedIn company page, for example https://www.linkedin.com/company/google/. Send this or `company_id`. Provide at least one of: `company_id`, `url`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/company/employees-count":{"get":{"operationId":"linkedin_company_employees_count","summary":"Company › Employees Count","description":"Returns how many LinkedIn members list a company as employer, optionally broken down by location.\n\nUse it for a headcount by city or country; company.ext.employee_count is the headline total.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"company_id","in":"query","required":true,"description":"LinkedIn numeric company ID (from /v1/linkedin/company).","schema":{"type":"string","example":"1441"}},{"name":"geocode","in":"query","required":false,"description":"Comma-separated location ids from /v1/linkedin/search/location.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/interests/schools":{"get":{"operationId":"linkedin_profile_interests_schools","summary":"Profile › Interests › Schools","description":"Returns the school pages a LinkedIn member follows, each with name and page URL.\n\nUse it after profile. search/schools turns a university name into a school id.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/interests/newsletters":{"get":{"operationId":"linkedin_profile_interests_newsletters","summary":"Profile › Interests › Newsletters","description":"Returns the newsletters a LinkedIn member follows, each with name and page URL.\n\nUse it after profile to see which newsletters they follow.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/interests/top-voices":{"get":{"operationId":"linkedin_profile_interests_top_voices","summary":"Profile › Interests › Top Voices","description":"Returns the Top Voice profiles a LinkedIn member follows, each with name and profile URL.\n\nUse it after profile to see which Top Voices they follow.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/position-skills":{"get":{"operationId":"linkedin_profile_position_skills","summary":"Profile › Position Skills","description":"Returns a member's positions with the skills listed on each role.\n\nUse it when you need skills per job. profile/experiences is the role list; profile/skills is the flat list.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile.","schema":{"type":"string","example":"https://www.linkedin.com/in/tedgaubert/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/top-position":{"get":{"operationId":"linkedin_profile_top_position","summary":"Profile › Top Position","description":"Returns the company page of the member's current top position: company id, name, website, headcount, industries and locations, not the job title.\n\nUse it to find where a member works now. company returns the same company in the canonical schema; profile/experiences has titles and dates.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile.","schema":{"type":"string","example":"https://www.linkedin.com/in/adamselipsky/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/search/people/by-url":{"get":{"operationId":"linkedin_search_people_by_url","summary":"Search › People › By Url","description":"Returns LinkedIn members from a people-search results URL, each with handle, headline, and profile URL.\n\nUse it when you already have a LinkedIn people-search URL. Keyword search is search/people.\n\n**200 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"LinkedIn people-search results URL.","schema":{"type":"string","example":"https://www.linkedin.com/search/results/people/?keywords=kyc"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/all":{"get":{"operationId":"linkedin_profile_all","summary":"Profile › All","description":"Returns a member's entire public profile in one call: `author` with both counts, and `background` with About, experience, education, skills, recommendations, Featured and interests.\n\nUse it for a one-call profile audit, in place of stacking profile, profile/complete, profile/stats, the five interests lanes and profile/similar.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":false,"description":"Full URL of the LinkedIn profile. Provide at least one of: `url`, `urls`.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"urls","in":"query","required":false,"description":"Up to 10 full LinkedIn profile URLs in one call, comma separated. The response becomes `{items, total}` instead of a single profile. A list where nothing resolves is a free 404. Provide at least one of: `url`, `urls`.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates,https://www.linkedin.com/in/jeffweiner08"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/complete":{"get":{"operationId":"linkedin_profile_complete","summary":"Profile › Complete","description":"Returns a member's full background: `author` in the /profile shape, and `background` with About, experiences, educations, skills and recommendations in the profile/* item shapes.\n\nUse it for background checks and enrichment, where one premium call replaces profile, profile/experiences, profile/educations, profile/skills and profile/recommendations.\n\n**200 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile.","schema":{"type":"string","example":"https://www.linkedin.com/in/ryanroslansky/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/with-posts":{"get":{"operationId":"linkedin_profile_with_posts","summary":"Profile › With Posts","description":"Returns a member's profile with follower and connection counts in `author`, recent `posts` in the profile/posts item shape, and experiences, educations and skills under `background`.\n\nUse it for one call covering the counts, recent posts and career history. Use profile/complete when you need recommendations.\n\n**200 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile.","schema":{"type":"string","example":"https://www.linkedin.com/in/adamselipsky/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/post/with-comments":{"get":{"operationId":"linkedin_post_with_comments","summary":"Post › With Comments","description":"Returns one LinkedIn post packed with its comments in a single payload.\n\nUse it to fetch a post and its thread together. Prefer post plus post/comments when you want each on its own schema.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Activity URL of the LinkedIn post.","schema":{"type":"string","example":"https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/post":{"get":{"operationId":"linkedin_post","summary":"Post","description":"Returns one LinkedIn post: its text, author name and picture, like, comment and share counts, attached media, and the publish time.\n\nUse it when you have a post URL and want the post itself, not its comments, reactions, or reposts.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn post. It has to carry the post's ACTIVITY id, either `https://www.linkedin.com/feed/update/urn:li:activity:<id>` or `https://www.linkedin.com/posts/<slug>-activity-<id>-<code>`. Every endpoint that lists posts publishes the activity form as `post.url`, so copy that field rather than rebuilding the URL from `post.id`, which is not always the activity id.","schema":{"type":"string","example":"https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/search/people":{"get":{"operationId":"linkedin_search_people","summary":"Search › People","description":"Returns LinkedIn members matching a name or filters, each with handle, headline, location, follower count, profile URL, and member id.\n\nUse it to build a prospect list by job title, company, school, or location; use company/people to list one employer's staff.\n\n**Metered: 200–1000 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"query","in":"query","required":true,"description":"Name or display-name keyword to search for (e.g. 'Bill Gates').","schema":{"type":"string","example":"Bill Gates"}},{"name":"page","in":"query","required":false,"description":"Page number for pagination (default 1).","schema":{"type":"integer","minimum":1}},{"name":"first_name","in":"query","required":false,"description":"Filter by first name.","schema":{"type":"string"}},{"name":"last_name","in":"query","required":false,"description":"Filter by last name.","schema":{"type":"string"}},{"name":"title","in":"query","required":false,"description":"Filter by job title or headline.","schema":{"type":"string"}},{"name":"current_company","in":"query","required":false,"description":"Filter by current company, using a numeric company id from /v1/linkedin/company (`author.id`). Comma-separated for multiple.","schema":{"type":"string","example":"1035"}},{"name":"past_company","in":"query","required":false,"description":"Filter by a previously-worked company, using a numeric company id from /v1/linkedin/company (`author.id`).","schema":{"type":"string","example":"1035"}},{"name":"school","in":"query","required":false,"description":"Filter by school, using a school id from /v1/linkedin/search/schools (`id`).","schema":{"type":"string","example":"1792"}},{"name":"industry","in":"query","required":false,"description":"Filter by industry, using an industry id from /v1/linkedin/search/industry (`industry_id`).","schema":{"type":"string","example":"4"}},{"name":"geocode_location","in":"query","required":false,"description":"Filter by location, using a geocode id from /v1/linkedin/search/location (`geocode`).","schema":{"type":"string","example":"103644278"}},{"name":"profile_language","in":"query","required":false,"description":"Filter by profile language (ISO 2-letter code, e.g. 'en').","schema":{"type":"string"}},{"name":"service_category","in":"query","required":false,"description":"Filter by service category, using a numeric service-category id. No endpoint resolves these, so pass one you already hold.","schema":{"type":"string","example":"1"}},{"name":"follower_of","in":"query","required":false,"description":"Return people who follow a specific member, using the member's URN from /v1/linkedin/profile (`author.ext.urn`). This one is a URN and not a numeric id.","schema":{"type":"string","example":"ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"}},{"name":"include","in":"query","required":false,"description":"Set to `profile` (one token only) to join every row to the member's profile lookup in this one call: `author.followers` becomes the exact count and `followers_approximate` reads false on every row the lookup filled, `author.following` is filled with the member's connection count, and the location, joined date, country, website, cover image and profile flags land where the row lacks them.","schema":{"type":"string","enum":["profile"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N rows of this page (1 to 10). The page cursor still advances past the full page of 10, so the rows past your limit are skipped, not carried to the next page.","schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":200,"max":1000},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/company/people":{"get":{"operationId":"linkedin_company_people","summary":"Company › People","description":"Returns the members who list a company as their employer, each with handle, headline, location, profile picture, and follower count.\n\nUse it when you already have a company_id and want its staff; use search/people to filter across all of LinkedIn instead.\n\n**Metered: 200–1000 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"company_id","in":"query","required":true,"description":"LinkedIn numeric company ID (from /v1/linkedin/company).","schema":{"type":"string","example":"1035"}},{"name":"page","in":"query","required":false,"description":"Page number for pagination (default 1).","schema":{"type":"integer","minimum":1}},{"name":"include","in":"query","required":false,"description":"Set to `profile` (one token only) to join every row to the member's profile lookup in this one call: `author.followers` becomes the exact count and `followers_approximate` reads false on every row the lookup filled, `author.following` is filled with the member's connection count, and the location, joined date, country, website, cover image and profile flags land where the row lacks them.","schema":{"type":"string","enum":["profile"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N rows of this page (1 to 10). The page cursor still advances past the full page of 10, so the rows past your limit are skipped, not carried to the next page.","schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":200,"max":1000},"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/post/comments":{"get":{"operationId":"linkedin_post_comments","summary":"Post › Comments","description":"Returns the comments on a LinkedIn post: commenter name, comment text, reaction counts, reply count, pinned and edited flags, and timestamps.\n\nUse it for the top-level comments on a post, then pass a comment's id to post/comments/replies to open one thread.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn post. It has to carry the post's ACTIVITY id, either `https://www.linkedin.com/feed/update/urn:li:activity:<id>` or `https://www.linkedin.com/posts/<slug>-activity-<id>-<code>`. Every endpoint that lists posts publishes the activity form as `post.url`, so copy that field rather than rebuilding the URL from `post.id`, which is not always the activity id.","schema":{"type":"string","example":"https://www.linkedin.com/feed/update/urn:li:activity:7244804629786419202"}},{"name":"page","in":"query","required":false,"description":"Page number for pagination (default 1).","schema":{"type":"integer","minimum":1}},{"name":"post_type","in":"query","required":false,"description":"Post type: 'activity' (default) or 'ugc'.","schema":{"type":"string","enum":["activity","ugc"]}},{"name":"sort_order","in":"query","required":false,"description":"Comment ordering: 'relevance' or 'recent'.","schema":{"type":"string","enum":["recent","relevance"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/posts":{"get":{"operationId":"linkedin_profile_posts","summary":"Profile › Posts","description":"Returns the posts a LinkedIn member published, each with text, author name, like, comment and share counts, media, and publish time.\n\nUse it for what a person posted themselves; profile/reactions covers posts they only reacted to, profile/comments their comments.\n\n**Metered: 100–4000 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"limit","in":"query","required":false,"description":"How many posts to return in the one call, 1 to 100. Defaults to the platform's 20.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":4000},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/reactions":{"get":{"operationId":"linkedin_profile_reactions","summary":"Profile › Reactions","description":"Returns the posts a LinkedIn member reacted to, each with the post text, its original author, like, comment and share counts, and date.\n\nUse it to see what a person engages with rather than what they publish, which profile/posts returns.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/post/reposts":{"get":{"operationId":"linkedin_post_reposts","summary":"Post › Reposts","description":"Returns the reposts of a LinkedIn post, each with the resharer's name, any added commentary, engagement counts, and publish time.\n\nUse it to see who amplified a post; post/reactions lists who reacted and post/comments lists who replied.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn post. It has to carry the post's ACTIVITY id, either `https://www.linkedin.com/feed/update/urn:li:activity:<id>` or `https://www.linkedin.com/posts/<slug>-activity-<id>-<code>`. Every endpoint that lists posts publishes the activity form as `post.url`, so copy that field rather than rebuilding the URL from `post.id`, which is not always the activity id.","schema":{"type":"string","example":"https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928"}},{"name":"cursor","in":"query","required":false,"description":"LinkedIn cursor.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/group/posts":{"get":{"operationId":"linkedin_group_posts","summary":"Group › Posts","description":"Returns the posts inside a LinkedIn group, each with text, author name, like, comment and share counts, media, and publish time.\n\nUse it to read a group's discussion feed; call group first if you also need the group's own details.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"group_id","in":"query","required":true,"description":"LinkedIn numeric group ID.","schema":{"type":"string","example":"62438"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Group","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/company/affiliated-pages":{"get":{"operationId":"linkedin_company_affiliated_pages","summary":"Company › Affiliated Pages","description":"Returns a company's affiliated and showcase pages, each with page name, LinkedIn URL, speciality, follower count, and logo.\n\nUse it to map a parent brand to its regional and product pages before pulling posts or jobs for each one.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"company_id","in":"query","required":true,"description":"LinkedIn numeric company ID (from /v1/linkedin/company).","schema":{"type":"string","example":"1035"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/post/comments/replies":{"get":{"operationId":"linkedin_post_comments_replies","summary":"Post › Comments › Replies","description":"Returns the replies under one LinkedIn comment, each with the replier's name, reply text, reaction and reply counts, and timestamps.\n\nUse it after post/comments: pass that comment's comment_id together with the post url to expand a single thread.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn post. It has to carry the post's ACTIVITY id, either `https://www.linkedin.com/feed/update/urn:li:activity:<id>` or `https://www.linkedin.com/posts/<slug>-activity-<id>-<code>`. Every endpoint that lists posts publishes the activity form as `post.url`, so copy that field rather than rebuilding the URL from `post.id`, which is not always the activity id.","schema":{"type":"string","example":"https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928"}},{"name":"comment_id","in":"query","required":true,"description":"The parent comment's `comment.id` from /v1/linkedin/post/comments, or its `comment.ext.urn` (urn:li:comment:(ugcPost:<post>,<comment>)).","schema":{"type":"string","example":"7501480403283886080"}},{"name":"cursor","in":"query","required":false,"description":"LinkedIn cursor.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/experiences":{"get":{"operationId":"linkedin_profile_experiences","summary":"Profile › Experiences","description":"Returns a LinkedIn member's work history, with each role's job title, company, employment dates, location, and description.\n\nUse it for the full career list, which the main profile endpoint condenses down to the current company only.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/educations":{"get":{"operationId":"linkedin_profile_educations","summary":"Profile › Educations","description":"Returns a LinkedIn member's education history, with each entry's school, degree, field of study, and the years attended.\n\nUse it for schooling detail; profile/experiences covers jobs, and search/schools turns a school name into a filter id.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/skills":{"get":{"operationId":"linkedin_profile_skills","summary":"Profile › Skills","description":"Returns the skills listed on a LinkedIn member's profile, with each skill's name and the endorsements shown against it.\n\nUse it to score a person against a skill requirement, separately from the roles returned by profile/experiences.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/honors":{"get":{"operationId":"linkedin_profile_honors","summary":"Profile › Honors","description":"Returns the honors and awards on a LinkedIn member's profile, with each award's title, issuer, date, and description.\n\nUse it for awards only: certifications live in profile/certifications and published work in profile/publications.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/certifications":{"get":{"operationId":"linkedin_profile_certifications","summary":"Profile › Certifications","description":"Returns the licenses and certifications on a LinkedIn member's profile, with each one's name, issuer, and issue or expiry dates.\n\nUse it to check formal credentials, as opposed to self-listed skills in profile/skills or degrees in profile/educations.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/publications":{"get":{"operationId":"linkedin_profile_publications","summary":"Profile › Publications","description":"Returns the publications on a LinkedIn member's profile, with each one's title, publisher, publication date, description, and link.\n\nUse it for articles, papers, and books a person published, not for their LinkedIn posts, which profile/posts returns.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/volunteers":{"get":{"operationId":"linkedin_profile_volunteers","summary":"Profile › Volunteers","description":"Returns the volunteer experience on a LinkedIn member's profile, with each entry's role, organisation, cause, and dates.\n\nUse it for unpaid and community roles, which the paid work history in profile/experiences does not cover.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/recommendations":{"get":{"operationId":"linkedin_profile_recommendations","summary":"Profile › Recommendations","description":"Returns the recommendations on a LinkedIn member's profile, with the recommender's name and headline, the recommendation text, and date.\n\nUse it for written references, and set type to received or given to choose which side of the relationship you want.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/satyanadella/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"type","in":"query","required":false,"description":"Filter by kind. See the allowed values.","schema":{"type":"string","enum":["received","given"]}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/interests/companies":{"get":{"operationId":"linkedin_profile_interests_companies","summary":"Profile › Interests › Companies","description":"Returns the companies a LinkedIn member follows, with each company's name, LinkedIn URL, follower count, and logo.\n\nUse it to infer a person's interests and vendor affinities; profile/interests/groups covers the groups they follow.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/interests/groups":{"get":{"operationId":"linkedin_profile_interests_groups","summary":"Profile › Interests › Groups","description":"Returns the LinkedIn groups a member follows, with each group's name, URL, and the size of its membership.\n\nUse it to find the communities a person belongs to, then pass a group_id to group or group/posts to go deeper.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/images":{"get":{"operationId":"linkedin_profile_images","summary":"Profile › Images","description":"Returns the image posts on a LinkedIn member's profile, with each post's text, image links, engagement counts, and publish time.\n\nUse it when you only want photo posts; profile/posts returns every format and profile/videos returns the videos.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/videos":{"get":{"operationId":"linkedin_profile_videos","summary":"Profile › Videos","description":"Returns the video posts on a LinkedIn member's profile, with each post's text, video and thumbnail links, engagement counts, and date.\n\nUse it to collect a person's videos, then pass a video post's URL to post/transcript to read what was said.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/comments":{"get":{"operationId":"linkedin_profile_comments","summary":"Profile › Comments","description":"Returns the comments a LinkedIn member left on other people's posts, with the comment text, the post it sits under, and the timestamp.\n\nUse it to track someone's activity in other conversations; post/comments returns the comments on one specific post.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/post/reactions":{"get":{"operationId":"linkedin_post_reactions","summary":"Post › Reactions","description":"Returns the people who reacted to a LinkedIn post, each with their name, headline, profile URL, and the reaction they left.\n\nUse it to see who liked or praised a post, optionally filtered by type; post/comments covers the people who wrote a comment.\n\n**Metered: 200–1000 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn post. It has to carry the post's ACTIVITY id, either `https://www.linkedin.com/feed/update/urn:li:activity:<id>` or `https://www.linkedin.com/posts/<slug>-activity-<id>-<code>`. Every endpoint that lists posts publishes the activity form as `post.url`, so copy that field rather than rebuilding the URL from `post.id`, which is not always the activity id.","schema":{"type":"string","example":"https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"type","in":"query","required":false,"description":"Filter by kind. See the allowed values.","schema":{"type":"string","enum":["all","like","praise","empathy","appreciation","interest"]}},{"name":"include","in":"query","required":false,"description":"Set to `profile` (one token only) to join every row to the member's profile lookup in this one call: `author.followers` becomes the exact count and `followers_approximate` reads false on every row the lookup filled, `author.following` is filled with the member's connection count, and the location, joined date, country, website, cover image and profile flags land where the row lacks them.","schema":{"type":"string","enum":["profile"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N rows of this page (1 to 10). The page cursor still advances past the full page of 10, so the rows past your limit are skipped, not carried to the next page.","schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":200,"max":1000},"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/company/jobs":{"get":{"operationId":"linkedin_company_jobs","summary":"Company › Jobs","description":"Returns the jobs a company has posted, each with job id, title, location, hiring company details, posting date, and Easy Apply flag.\n\nUse it for one employer's openings; search/jobs looks across all companies and job returns one posting's full text.\n\n**200 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"company_id","in":"query","required":true,"description":"LinkedIn numeric company ID (from /v1/linkedin/company).","schema":{"type":"string","example":"1035"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"date_posted","in":"query","required":false,"description":"How recently the job was listed. One of `anytime`, `past_24_hours`, `past_week`, `past_month`. Note the job lanes use `past_24_hours` while /v1/linkedin/search/posts uses `past_24h`; they are different vocabularies and are not interchangeable.","schema":{"type":"string","enum":["anytime","past_24_hours","past_week","past_month"]}},{"name":"experience_level","in":"query","required":false,"description":"Required seniority for the role.","schema":{"type":"string","enum":["internship","entry_level","associate","mid_senior","director","executive"]}},{"name":"job_type","in":"query","required":false,"description":"Contract type for the role.","schema":{"type":"string","enum":["full_time","part_time","contract","temporary","volunteer","internship","other"]}},{"name":"remote","in":"query","required":false,"description":"Workplace type: onsite, remote, or hybrid.","schema":{"type":"string","enum":["onsite","remote","hybrid"]}},{"name":"easy_apply","in":"query","required":false,"description":"When true, return only jobs that support LinkedIn Easy Apply.","schema":{"type":"boolean"}},{"name":"sort_by","in":"query","required":false,"description":"Result ordering.","schema":{"type":"string","enum":["recent","relevant"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/search/jobs":{"get":{"operationId":"linkedin_search_jobs","summary":"Search › Jobs","description":"Returns LinkedIn job postings matching a keyword, each with job id, title, hiring company, location, posting date, and Easy Apply flag.\n\nUse it to search openings across employers with filters like remote, job type, and experience level, then pass an id to job.\n\n**200 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword.","schema":{"type":"string","example":"marketing"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"date_posted","in":"query","required":false,"description":"How recently the job was listed. One of `anytime`, `past_24_hours`, `past_week`, `past_month`. Note the job lanes use `past_24_hours` while /v1/linkedin/search/posts uses `past_24h`; they are different vocabularies and are not interchangeable.","schema":{"type":"string","enum":["anytime","past_24_hours","past_week","past_month"]}},{"name":"experience_level","in":"query","required":false,"description":"Required seniority for the role.","schema":{"type":"string","enum":["internship","entry_level","associate","mid_senior","director","executive"]}},{"name":"job_type","in":"query","required":false,"description":"Contract type for the role.","schema":{"type":"string","enum":["full_time","part_time","contract","temporary","volunteer","internship","other"]}},{"name":"remote","in":"query","required":false,"description":"Workplace type: onsite, remote, or hybrid.","schema":{"type":"string","enum":["onsite","remote","hybrid"]}},{"name":"easy_apply","in":"query","required":false,"description":"When true, return only jobs that support LinkedIn Easy Apply.","schema":{"type":"boolean"}},{"name":"sort_by","in":"query","required":false,"description":"Result ordering.","schema":{"type":"string","enum":["recent","relevant"]}},{"name":"company","in":"query","required":false,"description":"Filter by company, using a numeric company id from /v1/linkedin/company (`author.id`).","schema":{"type":"string","example":"1035"}},{"name":"geocode","in":"query","required":false,"description":"Filter by location, using a geocode id from /v1/linkedin/search/location.","schema":{"type":"string","example":"103644278"}},{"name":"industry_ids","in":"query","required":false,"description":"Comma-separated industry ids from /v1/linkedin/search/industry.","schema":{"type":"string","example":"4"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/search/location":{"get":{"operationId":"linkedin_search_location","summary":"Search › Location","description":"Returns LinkedIn locations matching a place name, each with the location's display name and the geocode id LinkedIn filters on.\n\nUse it first to turn a city or country name into the id that search/people and search/jobs expect for location filters.\n\n**20 credits** per call.","tags":["linkedin"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword.","schema":{"type":"string","example":"London"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/search/schools":{"get":{"operationId":"linkedin_search_schools","summary":"Search › Schools","description":"Returns LinkedIn school pages matching a name, each with the school's name, page URL, and the id used in search filters.\n\nUse it to turn a university name into the school id that search/people accepts as a filter.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword.","schema":{"type":"string","example":"Stanford"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/search/industry":{"get":{"operationId":"linkedin_search_industry","summary":"Search › Industry","description":"Returns LinkedIn industries matching a keyword, each with the industry name and the id LinkedIn uses to identify it.\n\nUse it to turn an industry name into the id that search/people and search/jobs need for their industry filters.\n\n**20 credits** per call.","tags":["linkedin"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword.","schema":{"type":"string","example":"Software"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/about":{"get":{"operationId":"linkedin_profile_about","summary":"Profile › About","description":"Returns the month a LinkedIn member joined and how recently contact details and the profile photo were updated, plus identity verification when LinkedIn shows it for that member.\n\nUse it to judge how current a profile is. Verification is included only for members whose verification panel can be read. Values come back as relative text, not exact dates.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"urn","in":"query","required":false,"description":"The member's opaque LinkedIn URN, as returned in `author.ext.urn` by /v1/linkedin/profile. Optional, and a pure optimisation: pass it ALONGSIDE `url` (which stays required) and this call skips the internal handle lookup, so it answers faster. Verified on the deployed API 05/09/2026.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/contact":{"get":{"operationId":"linkedin_profile_contact","summary":"Profile › Contact","description":"Returns the contact details a LinkedIn member exposes publicly: websites, phone numbers, address, WeChat, and Twitter, alongside their name and profile urn.\n\nUse it when you need a way to reach a person; most fields come back empty unless the member filled them in, and no email address is returned.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/stats":{"get":{"operationId":"linkedin_profile_stats","summary":"Profile › Stats","description":"Returns a LinkedIn member's audience size: their follower count and their connection count.\n\nUse it when all you need is reach numbers and you do not want to pull the whole profile.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn profile, company, or post.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/company/job-count":{"get":{"operationId":"linkedin_company_job_count","summary":"Company › Job Count","description":"Returns the number of jobs a LinkedIn company currently has open.\n\nUse it to track hiring volume over time without paging through the full list in company/jobs.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"company_id","in":"query","required":true,"description":"LinkedIn numeric company ID (from /v1/linkedin/company).","schema":{"type":"string","example":"1035"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/company/insights":{"get":{"operationId":"linkedin_company_insights","summary":"Company › Insights","description":"Returns headcount breakdowns of a LinkedIn company's members as name and count pairs, covering locations, schools, job functions, skills, service categories, and fields of study.\n\nUse it for a workforce profile of an employer without paging through staff; company/people lists the individual members.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"company_id","in":"query","required":true,"description":"LinkedIn numeric company ID (from /v1/linkedin/company).","schema":{"type":"string","example":"1035"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/group":{"get":{"operationId":"linkedin_group","summary":"Group","description":"Returns a LinkedIn group's profile: name, description, member count, posting rules, industries, owners, logo and cover images, and its public and active flags.\n\nUse it to size up a group and read its rules before pulling its feed with group/posts.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"group_id","in":"query","required":true,"description":"LinkedIn numeric group ID.","schema":{"type":"string","example":"62438"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Group","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/job":{"get":{"operationId":"linkedin_job","summary":"Job","description":"Returns one LinkedIn job posting in full: title, hiring company, location, posting date, the job description text, and the Easy Apply flag.\n\nUse it after search/jobs or company/jobs, passing a job id from those lists to read the complete description.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"id","in":"query","required":true,"description":"LinkedIn job ID.","schema":{"type":"string","example":"4462185352"}},{"name":"include_skills","in":"query","required":false,"description":"When true, include the job's required skills in `job.ext.skills`.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Job","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/company/posts":{"get":{"operationId":"linkedin_company_posts","summary":"Company › Posts","description":"Returns the recent posts from a LinkedIn company page, each with text, author name, like, comment and share counts, media, and date.\n\nUse it for what a brand publishes; profile/posts covers an individual member and group/posts covers a group feed.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"company_id","in":"query","required":true,"description":"LinkedIn numeric company ID (from /v1/linkedin/company).","schema":{"type":"string","example":"1035"}},{"name":"page","in":"query","required":false,"description":"Page number for pagination (default 1).","schema":{"type":"integer","minimum":1}},{"name":"sort_by","in":"query","required":false,"description":"Post ordering: 'top' or 'recent'.","schema":{"type":"string","enum":["top","recent"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Company","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/ad":{"get":{"operationId":"linkedin_ad","summary":"Ad","description":"Returns one LinkedIn ad from the Ad Library: the ad copy, creative images, the advertiser's name and logo, total impressions, and start date.\n\nUse it after ads/search, passing an ad's Ad Library URL to read that single ad in full.\n\n**100 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn ad","schema":{"type":"string","example":"https://www.linkedin.com/ad-library/detail/1515437353"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Ad","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/ads/search":{"get":{"operationId":"linkedin_ads_search","summary":"Ads › Search","description":"Returns ads from the LinkedIn Ad Library matching a company, keyword, country, or date range, with each ad's copy and the advertiser behind it.\n\nUse it to find what a competitor is running, then pass a result's ad URL to ad for the complete record.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"company","in":"query","required":false,"description":"The company name to search for. 'Microsoft' for example. Provide at least one of: `company`, `keyword`, `companyId`.","schema":{"type":"string","example":"microsoft"}},{"name":"keyword","in":"query","required":false,"description":"The keyword to search for. Provide at least one of: `company`, `keyword`, `companyId`.","schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"description":"The company id to search for. Provide at least one of: `company`, `keyword`, `companyId`.","schema":{"type":"string"}},{"name":"countries","in":"query","required":false,"description":"Comma separated list of countries. Example: US,CA,MX","schema":{"type":"string"}},{"name":"startDate","in":"query","required":false,"description":"Start date to search for. Format: YYYY-MM-DD","schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"description":"End date to search for. Format: YYYY-MM-DD","schema":{"type":"string"}},{"name":"paginationToken","in":"query","required":false,"description":"Pagination token to paginate through results","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Ads","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/linkedin/profile/posts/archive":{"get":{"operationId":"linkedin_profile_posts_archive","summary":"Profile › Posts › Archive","description":"Returns a LinkedIn member's deep post archive, read from their own feed rather than a search index, with the exact publish timestamp, media and the full engagement breakdown including share counts.\n\nIt is metered per post returned, so ask for the limit you need.\n\n**Metered: 100–10000 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"The member's LinkedIn profile URL, for example https://www.linkedin.com/in/williamhgates/.","schema":{"type":"string","example":"https://www.linkedin.com/in/williamhgates/"}},{"name":"limit","in":"query","required":false,"description":"How many posts to return, 1 to 100 (default 20). Pass 100 to walk the full archive: only a full page returns a `next_cursor`.","schema":{"type":"integer","minimum":1,"maximum":100,"example":100}},{"name":"pagination_token","in":"query","required":false,"description":"The `next_cursor` from the previous page. Omit it for the newest posts.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":10000},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/search/posts":{"get":{"operationId":"linkedin_search_posts","summary":"Search › Posts","description":"Returns public LinkedIn posts and Pulse articles matching a keyword, with each result's text, author, media, like and comment counts, and date.\n\nUse it for broad keyword monitoring; it reads public search results, so treat coverage as best effort rather than complete.\n\n**Metered: 20–960 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"query","in":"query","required":false,"description":"Keyword or phrase to search for. Optional when `from_member` or `from_company` is set: omit it to get that subject's posts unfiltered, and note that supplying a real content word narrows the results to posts matching it. Provide at least one of: `query`, `from_member`, `from_company`.","schema":{"type":"string","example":"ai agents"}},{"name":"from_member","in":"query","required":false,"description":"Filter to posts from one member, by their LinkedIn member urn — the bare `ACoAA…` value published as `author.ext.urn` by /v1/linkedin/profile. A profile URL, a public slug (`williamhgates`) or a `urn:li:fsd_profile:`-prefixed value is rejected, because the source cannot use any of them. Pass this on its own, with no `query`, to walk one member's back catalogue. Provide at least one of: `query`, `from_member`, `from_company`.","schema":{"type":"string"}},{"name":"from_company","in":"query","required":false,"description":"Filter to posts from a company, by numeric LinkedIn company id (for example `1035`). A company slug or URL is rejected; read the id from `author.id` on /v1/linkedin/company. Provide at least one of: `query`, `from_member`, `from_company`.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number of Google results. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"sort_by","in":"query","required":false,"description":"Result ordering: `relevance` (default) or `date_posted`. On a subject-only call (`from_member` or `from_company` with no `query`) the results are ordered by date and `relevance` is rejected, because there is no query for them to be relevant to.","schema":{"type":"string","enum":["date_posted","relevance"]}},{"name":"date_posted","in":"query","required":false,"description":"Date filter based on Google-indexed results. One of `past_24h`, `past_week`, `past_month` (underscores, not hyphens). Note the JOB lanes use `past_24_hours` for the same concept; the two vocabularies are not interchangeable.","schema":{"type":"string","enum":["past_24h","past_week","past_month"],"example":"past_week"}},{"name":"content_type","in":"query","required":false,"description":"Narrow to one kind of post.","schema":{"type":"string","enum":["videos","photos","jobs","live_videos","documents","collaborative_articles"]}},{"name":"limit","in":"query","required":false,"description":"Return up to this many posts in one call, 1 to 200. Repeating the identical call inside the 2-minute cache window is free. Requires `query`. Cannot be combined with `page` or `cursor`: the result always starts at the top and `pagination.next_cursor` is null. `pagination.has_more` says whether more posts were available when the call stopped, and `walk.stopped` says why it stopped (`limit`, `exhausted`, `deadline` or `sources_unavailable`).","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":{"min":20,"max":960},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/post/transcript":{"get":{"operationId":"linkedin_post_transcript","summary":"Post › Transcript","description":"Returns the spoken text of a video in a LinkedIn post. A post with no transcript answers 404 with reason no_captions, and a repost is read from the original post it shares.\n\nUse it to read or search what was said in a LinkedIn video; you are only charged when a transcript actually comes back.\n\n**200 credits** per call.","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the LinkedIn post to transcribe.","schema":{"type":"string","example":"https://www.linkedin.com/posts/gemini-35-flash-is-a-step-forward-for-google-ugcPost-7465082215316525056-MHBd/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranscriptOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/linkedin/profile/full":{"get":{"operationId":"linkedin_profile_full","summary":"Profile › Full","description":"Use it for a one-call company snapshot instead of calling company and company/posts and doing the engagement maths yourself.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["linkedin"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full LinkedIn company profile or page URL. One of the identity params is required.","schema":{"type":"string","example":"https://www.linkedin.com/company/microsoft"}},{"name":"posts","in":"query","required":false,"description":"How many of the fetched recent posts to return and compute the metrics over (1-100, default 25).","schema":{"type":"integer","example":25}},{"name":"cursor","in":"query","required":false,"description":"Pass a prior response's posts_cursor to read the next page of posts.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/pinterest/search":{"get":{"operationId":"pinterest_search","summary":"Search","description":"Returns Pinterest pins matching a keyword, each with its text, original image, pinner and pin date; include=engagement adds save, reaction, comment and share counts.\n\nUse it to discover pins on a topic; add include=engagement for each pin's saves, or call pin when you already have one pin URL.\n\n**Metered: 20–520 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["pinterest"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keyword or phrase to search Pinterest pins for.","schema":{"type":"string","example":"home decor ideas"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get the next page. Take it from `pagination.next_cursor` on the previous response.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response","schema":{"type":"boolean"}},{"name":"include","in":"query","required":false,"description":"Set to `engagement` (one token only) to fill `post.engagement.saves`, `.likes` (reactions), `.comments` and `.shares` on every row in this one call.","schema":{"type":"string","enum":["engagement"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N rows of the page (1 to 25) after the search has run. It is not a page size: `next_cursor` still advances past the full page, so rows beyond N on this page are not returned by the next page.","schema":{"type":"integer","minimum":1,"maximum":25}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":520},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/pinterest/pin":{"get":{"operationId":"pinterest_pin","summary":"Pin","description":"Returns one Pinterest pin: its text, original image, pinner, pin date, and its save, reaction, comment and share counts.\n\nUse it when you have a pin URL and want everything about that single pin rather than a list.\n\n**20 credits** per call.","tags":["pinterest"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Pinterest pin","schema":{"type":"string","example":"https://www.pinterest.com/pin/211174978421744/"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Pin","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/pinterest/url-stats":{"get":{"operationId":"pinterest_url_stats","summary":"Url Stats","description":"Returns how many times each of up to 10 external URLs has been saved to Pinterest through the Save Button.\n\nUse it to measure a page's pull on Pinterest, passing URLs exactly as used, since http vs https and a trailing slash count as different URLs.\n\n**20 credits** per call.","tags":["pinterest"],"parameters":[{"name":"urls","in":"query","required":true,"description":"Comma-separated list of 1-10 absolute http(s):// URLs, passed to Pinterest verbatim. Variants (https vs http, with/without trailing slash, with/without query string) are counted as different URLs.","schema":{"type":"string","example":"https://www.allrecipes.com/recipe/10813/best-chocolate-chip-cookies/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Url stats","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/pinterest/board":{"get":{"operationId":"pinterest_board","summary":"Board","description":"Returns the pins on a Pinterest board with text, image URL, author, and save, comment and share counts; include=engagement adds each pin's date and reaction count.\n\nUse it when you have a board URL: about 15 pins a page, cursor for the rest, include=engagement for pin dates. user/boards finds the boards.\n\n**Metered: 20–320 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["pinterest"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Pinterest board","schema":{"type":"string","example":"https://www.pinterest.com/lizmrodgers/moms-night/"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response","schema":{"type":"boolean"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get the next page of pins. Take it from `pagination.next_cursor` on the previous response.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `engagement` (one token only) to fill `post.published_at` and `post.engagement.likes` (plus any save, comment or share count the board row lacked) on every row in this one call.","schema":{"type":"string","enum":["engagement"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N pins of the page (1 to 15). It is not a page size: `next_cursor` still advances past the full page, so pins beyond N on this page are not returned by the next page.","schema":{"type":"integer","minimum":1,"maximum":15}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":320},"x-group":"Board","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/pinterest/user/boards":{"get":{"operationId":"pinterest_user_boards","summary":"User › Boards","description":"Returns the boards a Pinterest user has created, each with its title, description, pin count, and cover image.\n\nUse it to list someone's boards from their handle, then pass a board URL to board to get that board's pins.\n\n**20 credits** per call.","tags":["pinterest"],"parameters":[{"name":"handle","in":"query","required":true,"description":"The username of the user to get boards for. (e.g. broadstbullycom from https://www.pinterest.com/broadstbullycom/)","schema":{"type":"string","example":"pinterest"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/pinterest/trends":{"get":{"operationId":"pinterest_trends","summary":"Trends","description":"Returns the Pinterest Trends list for one country: ranked search terms with a relative search index, for growing, seasonal, monthly or yearly tables.\n\nUse it when you want what a market is searching for on Pinterest right now, with no keyword to start from.\n\n**200 credits** per call.","tags":["pinterest"],"parameters":[{"name":"country","in":"query","required":false,"description":"ISO country code, in any case: AR, AU, BR, CA, CO, DE, EG, ES, FR, GB, ID, IE, IN, IT, KR, MX, MY, NZ, PH, SA, TH, TR, US. Pinterest publishes no list for other countries, and one of them is a free 400. IE reads Pinterest's GB+IE list and AU and NZ read AU+NZ; GB alone has its own list. Defaults to US.","schema":{"type":"string","enum":["AR","AU","BR","CA","CO","DE","EG","ES","FR","GB","ID","IE","IN","IT","KR","MX","MY","NZ","PH","SA","TH","TR","US"],"example":"DE"}},{"name":"type","in":"query","required":false,"description":"Which Pinterest Trends table: growing (the default), seasonal, top_monthly or top_yearly.","schema":{"type":"string","enum":["growing","seasonal","top_monthly","top_yearly"],"example":"growing"}},{"name":"limit","in":"query","required":false,"description":"How many terms to return, from the top, 1 to 50. Defaults to 25. The price is the same at any depth.","schema":{"type":"integer","minimum":1,"maximum":50,"example":5}},{"name":"include","in":"query","required":false,"description":"Keep only terms containing one of these keywords, comma-separated (up to 10, e.g. nails,wedding).","schema":{"type":"string"}},{"name":"exclude","in":"query","required":false,"description":"Drop terms containing any of these keywords, comma-separated (up to 10, e.g. fall).","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Trends","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/reddit/subreddit":{"get":{"operationId":"reddit_subreddit","summary":"Subreddit","description":"Returns posts from a subreddit, each with title, body, score, comment count, author, permalink, and creation timestamp.\n\nUse it to read a community's feed, noting timeframe works only with sort=top, which is auto-selected when you omit sort; subreddit/search filters that same community by keyword.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"subreddit","in":"query","required":true,"description":"Subreddit name without the r/ prefix","schema":{"type":"string","example":"technology"}},{"name":"timeframe","in":"query","required":false,"description":"Timeframe to get posts from. Applied with sort=top (auto-selected when you omit sort).","schema":{"type":"string","enum":["all","day","week","month","year"]}},{"name":"sort","in":"query","required":false,"description":"Sort order","schema":{"type":"string","enum":["best","hot","new","top","rising"]}},{"name":"after","in":"query","required":false,"description":"After to get more posts. Get 'after' from previous response.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response. This also skips the enrichment pass, so `author.avatar_url`, `content.media_urls`, `flags.spoiler`, `post.url` and the `ext.*` fields are omitted along with the rest of the trimmed leaves.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":20,"x-group":"Subreddit","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/subreddit/details":{"get":{"operationId":"reddit_subreddit_details","summary":"Subreddit › Details","description":"Returns a subreddit's own details: subscriber count, active user count, description, creation date, rules, and icon URL.\n\nUse it to size up a community before pulling its posts; the name is case-sensitive here, so spell it exactly as Reddit does.\n\n**20 credits** per call.","tags":["reddit"],"parameters":[{"name":"subreddit","in":"query","required":false,"description":"Subreddit name without the r/ prefix. Case-sensitive: use the subreddit's canonical casing (e.g. `AskReddit`). Provide at least one of: `subreddit`, `url`.","schema":{"type":"string","example":"AskReddit"}},{"name":"url","in":"query","required":false,"description":"Subreddit URL. Provide at least one of: `subreddit`, `url`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Subreddit","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/search":{"get":{"operationId":"reddit_search","summary":"Search","description":"Returns posts matching a keyword from across Reddit, each with title, score, comment count, subreddit, permalink, and the body at ext.selftext.\n\nUse it to search all of Reddit at once. Bodies arrive free here, so include_body=true is rarely needed and refunds what it does not spend. subreddit/search searches inside one community.\n\n**Metered: 20–600 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search words or a phrase. Words match any, not all: vision pro also returns posts that mention only one of them. Wrap a phrase in double quotes to match it exactly (query=\"vision pro\"). Reddit operators such as subreddit:name work too.","schema":{"type":"string","example":"\"claude code\""}},{"name":"sort","in":"query","required":false,"description":"Sort by","schema":{"type":"string","enum":["relevance","new","top","comment_count"]}},{"name":"timeframe","in":"query","required":false,"description":"Only return posts from this window. Applied on sort=relevance, sort=top and sort=comment_count. It has no effect with sort=new, which is already ordered newest-first and returns recent posts regardless.","schema":{"type":"string","enum":["all","day","week","month","year"]}},{"name":"after","in":"query","required":false,"description":"Used to paginate to next page","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Set to true for a trimmed down version of the response. On this endpoint it also skips the second source that widens the page, so a trimmed page is both thinner and usually shorter. Measured 09/09/2026: default 29 rows, `trim=true` 25 rows. It does not drop `author.avatar_url` or `ext.*` — those leaves stay when the first source already carried them. Use it to skip the widening pass, not to strip fields.","schema":{"type":"boolean"}},{"name":"include_body","in":"query","required":false,"description":"Set to true to include each post's body (selftext) on the search page. Rarely needed now: bodies arrive on the rows themselves. Link posts have no body, so they are looked up and not charged for.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":{"min":20,"max":600},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/post":{"get":{"operationId":"reddit_post","summary":"Post","description":"Returns one post from its URL including the body text, plus score, comment count, share count, author, author avatar, thumbnail, and creation timestamp.\n\nUse it when you have a post URL and want that one post's body. Search rows carry their own bodies now, so you rarely need to fan out per post. post/comments returns the discussion.\n\n**20 credits** per call.","tags":["reddit"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Reddit post","schema":{"type":"string","example":"https://www.reddit.com/r/NoteTaking/comments/1o9s55r/i_tried_all_popular_ai_notetaking_apps_so_you/"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/post/comments":{"get":{"operationId":"reddit_post_comments","summary":"Post › Comments","description":"Returns the full comment tree for a post, each comment with author, body, score, direct-reply count, nesting depth, timestamp, and its nested replies.\n\nUse it when you want the whole discussion rather than only top-level comments. Read data.truncated: true means the thread is incomplete, so keep paging while a cursor comes back.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Reddit post to fetch comments for","schema":{"type":"string","example":"https://www.reddit.com/r/NoteTaking/comments/1o9s55r/i_tried_all_popular_ai_notetaking_apps_so_you/"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more comments, or replies.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Accepted, but not honoured on this endpoint: the source that serves it does not offer a trimmed shape, so the response is the same either way. Kept because removing an accepted parameter would break existing calls.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/subreddit/search":{"get":{"operationId":"reddit_subreddit_search","summary":"Subreddit › Search","description":"Returns posts matching a query inside one subreddit, each with title, score, comment count, and permalink. This source sends no post body, so ext.selftext is null without include_body.\n\nUse it to search one community. Bodies cost extra here, so prefer search with query=subreddit:name plus your terms: bodies for one credit, though it returns a different set of rows.\n\n**Metered: 20–520 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"subreddit","in":"query","required":true,"description":"Subreddit name (e.g. 'Fitness', not 'r/Fitness' or a full URL)","schema":{"type":"string","example":"technology"}},{"name":"query","in":"query","required":false,"description":"Search query to find matching content","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort order. For posts/media: relevance, hot, top, new, comments. For comments: relevance, top, new","schema":{"type":"string","enum":["relevance","hot","top","new","comments"]}},{"name":"timeframe","in":"query","required":false,"description":"Only return posts from this window. Applied on sort=relevance, sort=top and sort=comments. It has no effect with sort=new, which is already ordered newest-first and returns recent posts regardless.","schema":{"type":"string","enum":["all","year","month","week","day","hour"]}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more results. Get 'cursor' from previous response.","schema":{"type":"string"}},{"name":"include_body","in":"query","required":false,"description":"Set to true to include each post's body (selftext) on the search page. Link posts have no body, so they are looked up and not charged for.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":520},"x-group":"Subreddit","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/profile":{"get":{"operationId":"reddit_profile","summary":"Profile","description":"Returns one Reddit account: total karma, the post/comment/award karma split, cake day, bio, avatar, banner, trophy count and profile title.\n\nUse it to size or vet an account before reading its posts. author.followers is null on purpose: Reddit publishes no public follower count, so karma is the reach signal.\n\n**20 credits** per call.","tags":["reddit"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Reddit username without the u/ prefix. Case-insensitive.","schema":{"type":"string","example":"spez"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/profile/posts":{"get":{"operationId":"reddit_profile_posts","summary":"Profile › Posts","description":"Returns the posts one account has submitted, newest first, with the body at ext.selftext, score, comment count, upvote ratio, flair, media and ext.subreddit.\n\nUse it to read one person's submissions across communities. An account with no posts and one that does not exist both return an empty list, so call profile to tell them apart.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Reddit username without the u/ prefix. Case-insensitive.","schema":{"type":"string","example":"spez"}},{"name":"sort","in":"query","required":false,"description":"Sort order for the account's submissions. `top` defaults to the all-time window; pass `timeframe` to narrow it.","schema":{"type":"string","enum":["hot","new","top"]}},{"name":"timeframe","in":"query","required":false,"description":"Only return posts from this window. Applied on `sort=top`. Omitted `sort=top` is treated as `timeframe=all` so the documented call is not an empty page.","schema":{"type":"string","enum":["all","year","month","week","day","hour"]}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more results. Get 'cursor' from the previous response.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/profile/comments":{"get":{"operationId":"reddit_profile_comments","summary":"Profile › Comments","description":"Returns an account's own comment history, newest first, each with the text, score, permalink, parent_id, the post it sits under and ext.subreddit.\n\nUse it when you need a real comment history rather than a sample.\n\n**Metered: 40–4000 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["reddit"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Reddit username without the u/ prefix. Case-insensitive.","schema":{"type":"string","example":"spez"}},{"name":"limit","in":"query","required":false,"description":"How many comments to return, 1-100, default 25. This is a depth control, not a page size: a higher limit reaches further back into the account's history at the same speed.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"before","in":"query","required":false,"description":"Only return comments older than this date (YYYY-MM-DD). Use it to walk a long history in windows instead of raising limit.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":40,"max":4000},"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/search/comments":{"get":{"operationId":"reddit_search_comments","summary":"Search › Comments","description":"Returns comments matching a phrase from Reddit's comment index, each with its parent post inline: ext.post_title, ext.subreddit, ext.post_score and ext.post_url.\n\nUse it when the phrase lives in a reply rather than a title, and for author:username or subreddit:name sweeps. parent_id is null: the platform does not report thread position.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search phrase. Reddit's operators work here: `author:username` for one account's comments, `subreddit:name terms` to scope to a community, and quotes for an exact phrase.","schema":{"type":"string","example":"best project management software"}},{"name":"sort","in":"query","required":false,"description":"Sort order for the comment hits.","schema":{"type":"string","enum":["relevance","top","new"]}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more results. Get 'cursor' from the previous response.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/subreddits/search":{"get":{"operationId":"reddit_subreddits_search","summary":"Subreddits › Search","description":"Returns up to 25 communities matching a topic, each with the name at author.id, subscriber count, description and icon. include=details adds the creation date, weekly activity, rules and language.\n\nUse it to find which communities discuss a subject. Send include=details instead of one subreddit/details call per community, plus 1 per row filled, 26 at most.\n\n**Metered: 20–520 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"query","in":"query","required":true,"description":"Topic or keyword to find communities for.","schema":{"type":"string","example":"machine learning"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more results. Get 'cursor' from the previous response.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `details` (one token only) to fill `author.joined_at`, `author.ext.weekly_active_users`, `author.ext.weekly_contributions`, `author.ext.rules_text` and `author.ext.language` on every row in this one call (a row the details lookup's main source cannot answer gets only the creation date and the language, and is still billed).","schema":{"type":"string","enum":["details"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N communities of the page (1 to 25). It is not a page size: the cursor still advances past the whole page, so rows beyond N are not returned by the next page.","schema":{"type":"integer","minimum":1,"maximum":25}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":520},"x-group":"Subreddits","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/search/media":{"get":{"operationId":"reddit_search_media","summary":"Search › Media","description":"Returns up to 25 Reddit posts that carry an image, video or gallery, with the media at content.media_urls plus title, score, comment count and subreddit.\n\nUse it for visual posts on a topic without filtering a mixed page yourself. subreddit:name terms scopes it to one community; timeframe has no effect on sort=new.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search phrase. Reddit's operators work here: `subreddit:name terms` scopes the sweep to one community, and quotes force an exact phrase.","schema":{"type":"string","example":"mechanical keyboard build"}},{"name":"sort","in":"query","required":false,"description":"Sort by","schema":{"type":"string","enum":["relevance","new","top","comment_count"]}},{"name":"timeframe","in":"query","required":false,"description":"Only return posts from this window. Applied on sort=relevance, sort=top and sort=comment_count. It has no effect with sort=new, which is already ordered newest-first.","schema":{"type":"string","enum":["all","day","week","month","year"]}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more results. Get 'cursor' from the previous response.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/post/transcript":{"get":{"operationId":"reddit_post_transcript","summary":"Post › Transcript","description":"Returns the transcript of a Reddit video post, both the raw caption file and a plain-text version, when Reddit publishes captions for it.\n\nUse it for video posts; when Reddit exposes no captions the transcript comes back empty and flagged rather than as an error.\n\n**200 credits** per call.","tags":["reddit"],"parameters":[{"name":"url","in":"query","required":true,"description":"Reddit post URL or direct v.redd.it video URL.","schema":{"type":"string","example":"https://www.reddit.com/r/youseeingthisshit/comments/1oiu9xm/football_nostalgiasaints_punter_head_coach_cant/"}},{"name":"language","in":"query","required":false,"description":"2-letter language code. Defaults to `en`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranscriptOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/reddit/omni-search":{"get":{"operationId":"reddit_omni_search","summary":"Omni Search","description":"Returns threads from across Reddit for one keyword with their top comments inline at top_comments, plus a roll-up of which subreddits are talking, their weekly active users and tone.\n\nUse it for a customer-listening sweep in one call rather than running search then post/comments per thread; it is slow and relevance is loose.\n\n**Metered: 100–180 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["reddit"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keyword or phrase to sweep across Reddit.","schema":{"type":"string","example":"best mechanical keyboard"}},{"name":"threads","in":"query","required":false,"description":"How many top threads to expand comments for (1-8, default 8).","schema":{"type":"integer","example":5}},{"name":"sort","in":"query","required":false,"description":"Search sort order (relevance | new | top | comment_count).","schema":{"type":"string","enum":["relevance","new","top","comment_count"]}},{"name":"timeframe","in":"query","required":false,"description":"Time window for the search (all | day | week | month | year).","schema":{"type":"string","enum":["all","day","week","month","year"]}},{"name":"subreddit","in":"query","required":false,"description":"Scope the sweep to one subreddit (bare name, no r/ prefix).","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from a prior response's next_cursor to page deeper.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"CSV subset of subreddits,comments (default both). The comments block is returned as `threads[].top_comments`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":180},"x-group":"Omni search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/threads/profile":{"get":{"operationId":"threads_profile","summary":"Profile","description":"Returns a Threads account's public profile: bio, the external link set in that bio, follower count, profile picture URL, and verification status.\n\nUse it when you have a handle and want the account itself; user/posts returns what that account has posted.\n\n**20 credits** per call.","tags":["threads"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Threads username without the @ symbol","schema":{"type":"string","example":"zuck"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/threads/user/posts":{"get":{"operationId":"threads_user_posts","summary":"User › Posts","description":"Returns a Threads user's most recent posts, usually about 15. Send limit above 15 (up to 50) to collect more of the same feed, with view counts and display names filled in.\n\nUse it for a recent-activity window of about 15 posts. Set limit above 15 for deeper history on the same feed, or use search for a keyword lookup.\n\n**Metered: 20–3300 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["threads"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Threads username without the @ symbol","schema":{"type":"string","example":"zuck"}},{"name":"since","in":"query","required":false,"description":"Only posts published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older posts are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned posts sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.","schema":{"type":"string","example":"2026-09-01"}},{"name":"stop_at_id","in":"query","required":false,"description":"The id (`post.id`) or URL (`post.url`) of the newest post you already hold. The page stops just before it: that post and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned post never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Ask for a stripped record. This is a real shape change, not just less whitespace: a trimmed row carries only the id, text, shortcode, like count, timestamp and author, so media, reply count, share count, view count, topic tag, pinned flag and quoted post all come back null. Ignored when `limit` is above 15, because the deeper source has no trimmed mode.","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"How many posts to collect, 1 to 50. Leave it off, or send 15 or less, and nothing changes: you get the bundled window.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"include","in":"query","required":false,"description":"Send `engagement` to fill `engagement.views` and `post.author.display_name` on each post of the default window by looking it up on `/v1/threads/post` in the same call. Adds 4 to 12 seconds, never more than 15. One token only: `engagement`.","schema":{"type":"string","enum":["engagement"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":3300},"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/threads/post":{"get":{"operationId":"threads_post","summary":"Post","description":"Returns one Threads post's text, like, reply and repost counts, every carousel slide or video URL, author, creation time, and topic tag at post.ext.topic_tag.\n\nUse it when you have a post URL and want that single post rather than a whole feed. If it is a quote post, the quoted post arrives at post.ext.quoted_post.\n\n**20 credits** per call.","tags":["threads"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Threads post, for example https://www.threads.com/@zuck/post/DZpPDXbCeTt. Both threads.com and threads.net are accepted.","schema":{"type":"string","example":"https://www.threads.com/@zuck/post/DZpPDXbCeTt"}},{"name":"trim","in":"query","required":false,"description":"Ask for a stripped record. This is a real shape change, not just less whitespace: a trimmed row carries only the id, text, shortcode, like count, timestamp and author, so media, reply count, share count, view count, topic tag, pinned flag and quoted post all come back null.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/threads/search":{"get":{"operationId":"threads_search","summary":"Search","description":"Returns Threads posts matching a keyword, each with its text, like count, author, creation time, and the topic tag it was filed under at post.ext.topic_tag, plus a cursor for the next window.\n\nUse it to find posts by topic across Threads. Follow pagination.next_cursor to page deeper, or set limit (up to 100) to collect several windows in one call; start_date and end_date bound the period.\n\n**Metered: 20–680 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["threads"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find Threads posts","schema":{"type":"string","example":"artificial intelligence"}},{"name":"start_date","in":"query","required":false,"description":"Inclusive start of the search period (YYYY-MM-DD). Pagination never walks past it, and a relaxed query drops any post older than it. Threads treats the date pair as a ranking hint rather than a filter, so the window is enforced on our side: a post we cannot date is treated as outside it.","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Inclusive end of the search period (YYYY-MM-DD). Pagination starts here and walks back in time, and a relaxed query drops any post newer than it.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Ask for a stripped record. This is a real shape change, not just less whitespace: a trimmed row carries only the id, text, shortcode, like count, timestamp and author, so media, reply count, share count, view count, topic tag, pinned flag and quoted post all come back null.","schema":{"type":"boolean"}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from a prior response's pagination.next_cursor, passed back verbatim, to fetch the next (older) result window. It carries your date bounds, so paging cannot escape the period you asked for. A request that sends a cursor is never query-relaxed.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Collect AT LEAST this many unique posts in one call (1-100). This is a collection target, not a page size: the API walks whole result windows server-side until it has collected this many (or the query runs dry), so the response usually carries somewhat more than you asked for and never fewer unless the query ran out. Nothing you paid for is trimmed away. Omit for a single window. BUDGET FOR THE WALL CLOCK: the windows run one after another, at roughly 3.4 seconds each, so a high limit is a long request. Measured on production 07/09/2026, cache-cold: no limit 3.5s for 20 posts, limit=30 7.3s for 37, limit=50 10.2s for 55, limit=100 19.5s for 111. If your HTTP client defaults to a 10-second timeout, limit=50 and above will not fit inside it. Either raise the client timeout, or ask for a smaller limit and page with pagination.next_cursor, which costs the same credits for the same posts.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"expand","in":"query","required":false,"description":"Set to false to search the exact phrase only. Ignored on a request that carries a cursor.","schema":{"type":"boolean"}},{"name":"include","in":"query","required":false,"description":"Send `engagement` to fill `engagement.views` and `post.flags.pinned` on the first 20 posts by looking each one up on `/v1/threads/post` in the same call. Adds 3 to 12 seconds, never more than 12. One token only: `engagement`. Not accepted with a `limit` above 20; page with the cursor for more.","schema":{"type":"string","enum":["engagement"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}}],"x-credits":{"min":20,"max":680},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/threads/post/comments":{"get":{"operationId":"threads_post_comments","summary":"Post › Comments","description":"Returns the replies Threads bundles with a post, usually about 20. Send limit above 25 (up to 50) to collect more first-level replies from a second source.\n\nUse it to read the reaction under a post you already have the URL for. It is one window with no cursor. Set limit above 25 when the bundled window is not enough.\n\n**Metered: 20–200 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["threads"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Threads post whose replies you want, for example https://www.threads.com/@zuck/post/DZpPDXbCeTt. Both threads.com and threads.net are accepted.","schema":{"type":"string","example":"https://www.threads.com/@zuck/post/DZpPDXbCeTt"}},{"name":"trim","in":"query","required":false,"description":"Ask for a stripped record. This is a real shape change, not just less whitespace: a trimmed row carries only the id, text, shortcode, like count, timestamp and author, so media, reply count, share count, view count, topic tag, pinned flag and quoted post all come back null. Ignored when `limit` is above 25, because the deeper source has no trimmed mode.","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"How many replies to collect, 1 to 50. Leave it off, or send 25 or less, and nothing changes: you get the bundled window. Threads publishes only part of a large conversation without a login, so a post declaring a thousand replies will still return about 50.","schema":{"type":"integer","minimum":1,"maximum":50,"example":50}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":200},"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/threads/search/users":{"get":{"operationId":"threads_search_users","summary":"Search › Users","description":"Returns Threads accounts matching a query, with handle, display name, avatar and verification status. Follower count, bio and the private flag stay null unless you send include=profile.\n\nUse it to find accounts by name or topic; search looks for posts instead of people. Send include=profile when you need follower count and bio on the same rows, per account filled.\n\n**Metered: 20–260 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["threads"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find Threads users","schema":{"type":"string","example":"tech"}},{"name":"include","in":"query","required":false,"description":"Send `profile` to fill `author.followers`, `author.bio`, `author.private` and `external_url` on each account by looking it up on `/v1/threads/profile` in the same call. Adds 3 to 6 seconds, never more than 12. One token only: `profile`.","schema":{"type":"string","enum":["profile"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N accounts of the page, 1 to 12.","schema":{"type":"integer","minimum":1,"maximum":12}},{"name":"include_details","in":"query","required":false,"description":"Prefer `include=profile` in new code.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":260},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/profile":{"get":{"operationId":"tiktok_profile","summary":"Profile","description":"Returns a TikTok account's public profile: display name, bio, follower count on author.followers (or the rounded figure with followers_approximate), likes, verification, and user id.\n\nUse it when you have a handle and want a quick snapshot of an account before pulling its videos or followers.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":false,"description":"TikTok username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"charlidamelio"}},{"name":"user_id","in":"query","required":false,"description":"TikTok numeric user ID. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/profile/videos":{"get":{"operationId":"tiktok_profile_videos","summary":"Profile › Videos","description":"Returns a page of an account's recent public videos, each with caption, view, like, comment and share counts, and a thumbnail URL. Handle lookup covers login or age-walled profiles.\n\nUse it to list what one account has posted and page through it. Results come back in the source order, so sort_by does not reorder them. To find videos from many accounts by keyword, use search.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":false,"description":"TikTok username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"charlidamelio"}},{"name":"user_id","in":"query","required":false,"description":"TikTok user id. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only videos published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older videos are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned videos sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.","schema":{"type":"string","example":"2026-09-01"}},{"name":"stop_at_id","in":"query","required":false,"description":"The id (`post.id`) or URL (`post.url`) of the newest video you already hold. The page stops just before it: that video and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned video never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.","schema":{"type":"string"}},{"name":"sort_by","in":"query","required":false,"description":"Accepted for compatibility and ignored on this endpoint: neither `latest` nor `popular` reorders the page. Videos come back in the source's own order, described above. To rank a creator's videos by views or likes, page through with `max_cursor` and sort the collected rows yourself.","schema":{"type":"string","enum":["latest","popular"]}},{"name":"max_cursor","in":"query","required":false,"description":"Cursor to get more videos. Get 'max_cursor' from previous response.","schema":{"type":"string"}},{"name":"region","in":"query","required":false,"description":"Region (Country) you want the proxy in. Defaults to US.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; the response is already the canonical shape, so this flag has no effect.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/post":{"get":{"operationId":"tiktok_post","summary":"Post","description":"Returns one TikTok video in full: caption, engagement counts, author, sound, video metadata, and any on-screen text the creator typed with TikTok's text tool (post.ext.on_screen_texts).\n\nUse it when you already have a video URL and want that single video's numbers, rather than a list from profile/videos or search.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the TikTok video","schema":{"type":"string","example":"https://www.tiktok.com/@mrbeast/video/7654638524729216287"}},{"name":"region","in":"query","required":false,"description":"Two-letter country code for the proxy region (US, GB, FR, PH). The primary source does not take a region, so it is honoured only when a fallback source serves the request; a region-locked video (commonly from the Philippines) that fails on the primary is retried on the fallback with this value.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; the response is already the canonical shape, so this flag has no effect.","schema":{"type":"boolean"}},{"name":"download_media","in":"query","required":false,"description":"Set to true to also download the video/images and get back durable hosted media URLs under `data.post.ext.download_media_urls` (`[{ post_id, cdn_url, type, cached }]`). Use these for archiving; the raw `media_urls` are short-lived signed CDN links that expire. Adds a few seconds of latency while the media is fetched.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/post/comments":{"get":{"operationId":"tiktok_post_comments","summary":"Post › Comments","description":"Returns a page of comments on one TikTok video, each with the commenter's username, comment text, like count, reply count, and timestamp.\n\nUse it to read a video's comment section; to expand one thread, take a comment's id and call video/comment/replies.\n\n**Metered: 20–60 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the TikTok video to fetch comments for","schema":{"type":"string","example":"https://www.tiktok.com/@mrbeast/video/7654638524729216287"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more comments. Get 'cursor' from previous response.","schema":{"type":"integer"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; the response is already the canonical shape, so this flag has no effect.","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"description":"Optional. Without it, comments come in TikTok's own order (a relevance ranking, not newest first). `recent` returns them newest first by published_at; `top` returns them by like count. TikTok has no newest-first order of its own, so `recent` sorts the comments that were read: set scan_pages to read more of the thread.","schema":{"type":"string","enum":["top","recent"]}},{"name":"scan_pages","in":"query","required":false,"description":"Optional, 1 to 3, default 1. Reads that many pages, drops comments repeated across pages, and returns them all in the `sort` order (TikTok's own order when sort is absent).","schema":{"type":"integer","minimum":1,"maximum":3}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":60},"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/video/comment/replies":{"get":{"operationId":"tiktok_video_comment_replies","summary":"Video › Comment › Replies","description":"Returns the replies under a single TikTok comment, with each reply's text, author, likes, and timestamps.\n\nUse it after post/comments: pass the comment_id it returned together with the same video url to expand one thread.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"comment_id","in":"query","required":true,"description":"TikTok comment ID. This is the cid from the comments endpoint.","schema":{"type":"string","example":"7654640784985211670"}},{"name":"url","in":"query","required":true,"description":"TikTok video URL. This is the url from the comments endpoint.","schema":{"type":"string","example":"https://www.tiktok.com/@mrbeast/video/7654638524729216287"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more replies. Get 'cursor' from previous response.","schema":{"type":"integer"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/comment":{"get":{"operationId":"tiktok_comment","summary":"Comment","description":"Returns one TikTok comment with its current like count, reply count, pinned flag, author, and timestamp, found by link, by id, or by its text.\n\nUse it to re-check a single known comment without paging the whole section; use post/comments when you want the section itself.\n\n**Metered: 40–120 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["tiktok"],"parameters":[{"name":"comment_url","in":"query","required":false,"description":"A TikTok comment URL: `https://www.tiktok.com/@{handle}/video/{videoId}?comment_id={cid}`, the `m.tiktok.com/v/{id}.html?...&share_comment_id={cid}` share form, or a `vm.tiktok.com/{code}` / `tiktok.com/t/{code}` shortlink. The `cid`/`comment_id`/`share_comment_id` query value may be numeric or the base64 form TikTok's share sheet emits (`?cid=NzY1...`): both are accepted; base64 is decoded automatically. Mutually exclusive with `post_url`+`comment_id`. Provide at least one of: `comment_url`, `post_url`.","schema":{"type":"string","example":"https://www.tiktok.com/@mrbeast/video/7654638524729216287?comment_id=7654640784985211670"}},{"name":"post_url","in":"query","required":false,"description":"The post URL (`https://www.tiktok.com/@{handle}/video/{videoId}`). Combine with `comment_id`, or with `author_username`/`text_contains` for a search. Provide at least one of: `comment_url`, `post_url`.","schema":{"type":"string"}},{"name":"comment_id","in":"query","required":false,"description":"The target comment's numeric id (the `cid` from the comments endpoint). Requires `post_url`. Note that TikTok share links carry a base64-encoded `cid`: pass such a link as `comment_url` instead (decoded automatically), or base64-decode the value to its digits before passing it here.","schema":{"type":"string"}},{"name":"parent_comment_id","in":"query","required":false,"description":"The parent comment's numeric id: supply this when the target is a reply so it can be resolved directly via the native replies endpoint.","schema":{"type":"string"}},{"name":"author_username","in":"query","required":false,"description":"Return up to `max` comments authored by this username (no comment id needed). Mutually exclusive with `text_contains` and any comment id.","schema":{"type":"string"}},{"name":"text_contains","in":"query","required":false,"description":"Return up to `max` comments whose text contains this snippet (case-insensitive). Mutually exclusive with `author_username` and any comment id.","schema":{"type":"string"}},{"name":"deep_scan","in":"query","required":false,"description":"Widen the scan budget for deeply-buried comments (raises the page ceiling and deadline).","schema":{"type":"boolean"}},{"name":"position_hint","in":"query","required":false,"description":"Opaque token from a prior lookup's `lookup.position_hint`. Passing it back probes the comment's last-known location first, making a re-check of an already-found comment cheap.","schema":{"type":"string"}},{"name":"max","in":"query","required":false,"description":"For `author_username`/`text_contains` search: max matches to return (1-20, default 5).","schema":{"type":"integer"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":40,"max":120},"x-group":"Comment","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/search":{"get":{"operationId":"tiktok_search","summary":"Search","description":"Returns TikTok videos matching a keyword, each with caption, view and like counts, author details, a thumbnail, and post.ext.region (the country the video is registered to).\n\nUse it for a video keyword search you can page and sort. region= only sets the proxy; filter on post.ext.region for one country. limit=120 returns one page of up to 120. search/top is the Top tab.\n\n**Metered: 20–740 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find TikTok videos","schema":{"type":"string","example":"cooking recipes"}},{"name":"date_posted","in":"query","required":false,"description":"Time Frame","schema":{"type":"string","enum":["yesterday","this-week","this-month","last-3-months","last-6-months","all-time"]}},{"name":"sort_by","in":"query","required":false,"description":"Sort by","schema":{"type":"string","enum":["relevance","most-liked","date-posted"]}},{"name":"region","in":"query","required":false,"description":"Sets the proxy country (ISO 3166-1 alpha-2). It does not filter the page to that country. Each row already carries post.ext.region, the country the video is registered to; filter on that leaf when you need only one country.","schema":{"type":"string","example":"ES"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more videos. Get 'cursor' from previous response. Ignored when `limit` is set: that call is a single page.","schema":{"type":"integer"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; the response is already the canonical shape, so this flag has no effect.","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Bulk labeled page: up to 120 videos in one call, each with post.ext.region. The value rounds up to the next multiple of 30 (30, 60, 90 or 120). The source can repeat a video; repeats are removed, so a 120 page is often a little under 120 unique videos. Omit limit for the default page of about 30, which pages with cursor and carries the same post.ext.region. Does not filter by country; drop rows yourself on post.ext.region.","schema":{"type":"integer","minimum":1,"maximum":120,"example":120}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"country","in":"query","required":false,"description":"Comma-separated two-letter ISO 3166-1 codes, for example `US,GB`. Keep only videos TikTok registers to one of these countries (`post.ext.region`); a row with no country is discarded. This filters rows; it does not change where the search runs (that is `region`).","schema":{"type":"string"}},{"name":"exclude_country","in":"query","required":false,"description":"Comma-separated two-letter ISO 3166-1 codes, for example `IN`. Discard videos TikTok registers to any of these countries (`post.ext.region`); a row with no country is kept.","schema":{"type":"string"}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}}],"x-credits":{"min":20,"max":740},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/trending":{"get":{"operationId":"tiktok_trending","summary":"Trending","description":"Returns a page of popular TikTok videos with caption, view and like counts, author and thumbnail. Every row carries post.ext.region, the country the video is registered to.\n\nUse it with feed=local for videos mostly from one country (57% measured). The default feed is largely worldwide whatever region you pass, so filter on post.ext.region.\n\n**100 credits** per call.","tags":["tiktok"],"parameters":[{"name":"region","in":"query","required":true,"description":"ISO 3166-1 alpha-2 country code (e.g., US, GB, DE). On the default feed it sets the country the request is routed through and does not filter videos; with `feed=local` it sets the country the For You feed is built for. Either way, check `ext.region` on each row for the country a video is actually from.","schema":{"type":"string","example":"US"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; it has no effect with `feed=local`.","schema":{"type":"boolean"}},{"name":"feed","in":"query","required":false,"description":"`global` (default): the web trending feed routed through `region`, mostly worldwide content, about 13 videos in 3 to 12 seconds.","schema":{"type":"string","enum":["global","local"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Trending","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/search/hashtag":{"get":{"operationId":"tiktok_search_hashtag","summary":"Search › Hashtag","description":"Returns TikTok videos posted under a given hashtag, each with caption, view, like, comment and share counts, author details, and a thumbnail.\n\nUse it to track one tag such as a campaign or challenge; use search when you want a free text keyword rather than a tag.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"hashtag","in":"query","required":true,"description":"Hashtag to search for without the # symbol","schema":{"type":"string","example":"fyp"}},{"name":"region","in":"query","required":false,"description":"Region the proxy will be set to. Note: this isn't going to grab you all tiktoks from this region, you're just setting the proxy there.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more videos. Get 'cursor' from previous response.","schema":{"type":"integer"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; the response is already the canonical shape, so this flag has no effect.","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/search/top":{"get":{"operationId":"tiktok_search_top","summary":"Search › Top","description":"Returns the videos TikTok ranks highest for a keyword on its Top tab, each with caption, author, engagement counts, a music id, and post.ext.region (the country the video is registered to).\n\nUse it for TikTok's own relevance ranking. region= only sets the proxy; filter on post.ext.region for one country. search/users returns accounts, which this endpoint does not include.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase","schema":{"type":"string","example":"dance challenge"}},{"name":"publish_time","in":"query","required":false,"description":"Time Frame TikTok was posted","schema":{"type":"string","enum":["yesterday","this-week","this-month","last-3-months","last-6-months","all-time"]}},{"name":"sort_by","in":"query","required":false,"description":"Sort by","schema":{"type":"string","enum":["relevance","most-liked","date-posted"]}},{"name":"region","in":"query","required":false,"description":"Sets the proxy country (ISO 3166-1 alpha-2). It does not filter the page to that country. Each row already carries post.ext.region, the country the video is registered to; filter on that leaf when you need only one country.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more videos. Get 'cursor' from previous response.","schema":{"type":"integer"}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"country","in":"query","required":false,"description":"Comma-separated two-letter ISO 3166-1 codes, for example `US,GB`. Keep only videos TikTok registers to one of these countries (`post.ext.region`); a row with no country is discarded. This filters rows; it does not change where the search runs (that is `region`).","schema":{"type":"string"}},{"name":"exclude_country","in":"query","required":false,"description":"Comma-separated two-letter ISO 3166-1 codes, for example `IN`. Discard videos TikTok registers to any of these countries (`post.ext.region`); a row with no country is kept.","schema":{"type":"string"}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/search/users":{"get":{"operationId":"tiktok_search_users","summary":"Search › Users","description":"Returns TikTok accounts for a search term with username, name, avatar, followers, verification. include=profile adds bio, region, link and category.\n\nUse it to find accounts by name or topic. Add country=KR (or US, DE, …) when you need creators in one country. The video searches, search and search/top, give you posts rather than accounts.\n\n**Metered: 20–2620 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase to find TikTok users","schema":{"type":"string","example":"cooking"}},{"name":"cursor","in":"query","required":false,"description":"Cursor to get more users. Get 'cursor' from previous response.","schema":{"type":"integer"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; the response is already the canonical shape, so this flag has no effect.","schema":{"type":"boolean"}},{"name":"include","in":"query","required":false,"description":"Set to `profile` (one token only) to fill `author.bio`, `author.location` (the ISO region), `external_url` and `author.ext.business_category` on every row in this one call.","schema":{"type":"string","enum":["profile"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N rows of the page (1 to 30) after the search has run. On the global page it is not a page size: `next_cursor` still advances past the full page, so rows beyond N on this page are not returned by the next page.","schema":{"type":"integer","minimum":1,"maximum":30}},{"name":"country","in":"query","required":false,"description":"ISO 3166-1 alpha-2 account region to filter by (KR, US, DE, …). Omit it for the global default page. A code this endpoint does not accept is a free 400.","schema":{"type":"string","enum":["US","GB","CA","AU","NZ","IE","DE","FR","ES","IT","PT","NL","BE","CH","AT","SE","NO","DK","FI","IS","PL","CZ","SK","HU","RO","BG","GR","HR","RS","SI","UA","RU","TR","IL","AE","SA","QA","KW","EG","MA","ZA","NG","KE","GH","TZ","ET","BR","MX","AR","CO","CL","PE","VE","EC","UY","PY","BO","CR","PA","DO","JM","JP","KR","CN","TW","HK","MO","SG","MY","ID","TH","VN","PH","IN","PK","BD","LK","NP","MM","KH"],"example":"KR"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":2620},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/similar":{"get":{"operationId":"tiktok_similar","summary":"Similar","description":"Returns about 30 TikTok accounts similar to a given creator, each with username, display name, avatar, bio, verification, and follower, following, video and like counts.\n\nUse it to find lookalike creators for one you already know; it returns a single fixed list, so call it again on a result to go wider.\n\n**100 credits** per call.","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":true,"description":"TikTok username of the seed creator, without the @ symbol.","schema":{"type":"string","example":"gordonramsayofficial"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":100},"x-group":"Similar","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/user/audience":{"get":{"operationId":"tiktok_user_audience","summary":"User › Audience","description":"Returns where a creator's followers are: the top countries in their audience, with sampled follower counts and each country's share.\n\nUse it for audience geography only. Age and gender are not available publicly on TikTok or any other platform.\n\n**100 credits** per call.","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":true,"description":"TikTok username without the @ symbol","schema":{"type":"string","example":"charlidamelio"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/tiktok/user/followers":{"get":{"operationId":"tiktok_user_followers","summary":"User › Followers","description":"Returns a page of accounts that follow a TikTok user, each with username, display name, avatar, and its own follower count.\n\nUse it to list who follows an account and page through them; user/following returns the reverse, the accounts they follow.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":false,"description":"TikTok username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"stoolpresidente"}},{"name":"user_id","in":"query","required":false,"description":"User id. Use this for faster response times. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"min_time","in":"query","required":false,"description":"Used to paginate. Get 'min_time' from previous response.","schema":{"type":"integer"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; the response is already the canonical shape, so this flag has no effect.","schema":{"type":"boolean"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/user/following":{"get":{"operationId":"tiktok_user_following","summary":"User › Following","description":"Returns a page of accounts a TikTok user follows, each with username, display name, avatar, and its own follower count.\n\nUse it to list who an account follows and page through them; user/followers returns the reverse, the accounts that follow it.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":false,"description":"TikTok username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"stoolpresidente"}},{"name":"user_id","in":"query","required":false,"description":"TikTok user id. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"min_time","in":"query","required":false,"description":"Used to paginate. Get 'min_time' from previous response.","schema":{"type":"integer"}},{"name":"trim","in":"query","required":false,"description":"Accepted for compatibility; the response is already the canonical shape, so this flag has no effect.","schema":{"type":"boolean"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/user/live":{"get":{"operationId":"tiktok_user_live","summary":"User › Live","description":"Returns a TikTok account's live room in the platform's own shape: cover image, title, start time, status code, viewer and entry counts, stream ids, and the host's profile.\n\nUse it to read a creator's live room state, but check status and start time yourself, since a room may still be returned after the broadcast has ended.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":true,"description":"TikTok username without the @ symbol","schema":{"type":"string","example":"charlidamelio"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/tiktok/post/transcript":{"get":{"operationId":"tiktok_post_transcript","summary":"Post › Transcript","description":"Returns the spoken text of a TikTok video from its captions, with an option to fall back to AI transcription when no captions exist.\n\nUse it when you need what was said rather than the numbers; post gives you the video's caption and metrics but no transcript.\n\n**200 credits** per call.","tags":["tiktok"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the TikTok video","schema":{"type":"string","example":"https://www.tiktok.com/@stoolpresidente/video/7499229683859426602"}},{"name":"language","in":"query","required":false,"description":"Language of the transcript. 2 letter language code, ie 'en', 'es', 'fr', 'de', 'it', 'ja', 'ko', 'zh'","schema":{"type":"string"}},{"name":"use_ai_as_fallback","in":"query","required":false,"description":"Set to 'true' to fall back to AI transcription when the video has no captions.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranscriptOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/video/screen-text":{"get":{"operationId":"tiktok_video_screen_text","summary":"Video › Screen Text","description":"Returns the text shown on the video itself: native text stickers plus AI OCR of the cover frame, so burned-in editor captions are caught too.\n\nUse it for the on-screen overlay text; the caption lives on post and the spoken words on post/transcript.\n\n**100 credits** per call.","tags":["tiktok"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the TikTok video","schema":{"type":"string","example":"https://www.tiktok.com/@stoolpresidente/video/7499229683859426602"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/tiktok/song":{"get":{"operationId":"tiktok_song","summary":"Song","description":"Returns one TikTok sound's details: title, artist, duration, how many videos use it, and its cover image.\n\nUse it when you have a sound's clipId and want the sound itself; song/videos returns the videos made with it.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"clipId","in":"query","required":true,"description":"TikTok sound/song clip ID","schema":{"type":"string","example":"7439295283975702544"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Song","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/song/videos":{"get":{"operationId":"tiktok_song_videos","summary":"Song › Videos","description":"Returns videos that use a given TikTok sound, each with caption, author details, and engagement counts.\n\nUse it to see how a sound is being used and page through those videos; song returns only the sound's own details.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"clipId","in":"query","required":true,"description":"TikTok sound/song clip ID","schema":{"type":"string","example":"7439295283975702544"}},{"name":"cursor","in":"query","required":false,"description":"The cursor to get the next page of results.","schema":{"type":"integer"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Song","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/hashtags/popular":{"get":{"operationId":"tiktok_hashtags_popular","summary":"Hashtags › Popular","description":"Returns TikTok's trending-hashtag board for one of 27 markets over 7, 30 or 90 days: each hashtag's rank, window post and view counts, daily popularity curve, industry board and top creators.\n\nUse it for seed-free trend collection by market. One board is three hashtags; pass industry=all for the overall board plus all 15 industry boards in one call.\n\n**Metered: 120–1920 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["tiktok"],"parameters":[{"name":"countryCode","in":"query","required":false,"description":"Market to read the board for, as an ISO country code. One of the 27 markets TikTok publishes the board for. Defaults to US.","schema":{"type":"string","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"],"example":"DE"}},{"name":"period","in":"query","required":false,"description":"Window in days: 7, 30 or 90. Defaults to 7. Each window is a different board, not a longer list.","schema":{"type":"string","enum":["7","30","90"],"example":"7"}},{"name":"industry","in":"query","required":false,"description":"Which board to read. Omit for the overall board (3 hashtags). Pass an industry slug for that industry's board (3 hashtags), or `all` for the overall board plus all 15 industry boards in one call.","schema":{"type":"string","enum":["all","education","vehicle-and-transportation","baby-kids-and-maternity","beauty-and-personal-care","tech-and-electronics","travel","household-products","pets","home-improvement","apparel-and-accessories","news-and-entertainment","games","food-and-beverage","sports-and-outdoor","health"],"example":"all"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":120,"max":1920},"x-group":"Hashtags","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/videos/popular":{"get":{"operationId":"tiktok_videos_popular","summary":"Videos › Popular","description":"Returns TikTok's Top Videos board for the US, Japan, Vietnam, Thailand or Indonesia over 7 or 30 days: each video's rank, lifetime and window views, organic views, engagement rate and creator.\n\nUse it for the videos TikTok ranks highest in those five markets. Other markets have no board and return a free 400; use hashtags/popular there.\n\n**Metered: 520–900 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["tiktok"],"parameters":[{"name":"countryCode","in":"query","required":false,"description":"Market: US, JP, VN, TH or ID, the only markets TikTok publishes this board for. Defaults to US.","schema":{"type":"string","enum":["US","JP","VN","TH","ID"],"example":"US"}},{"name":"period","in":"query","required":false,"description":"Window in days: 7 or 30. Defaults to 7.","schema":{"type":"string","enum":["7","30"],"example":"7"}},{"name":"orderBy","in":"query","required":false,"description":"How TikTok ranks the board: views (the default), engagement, or six_second_views.","schema":{"type":"string","enum":["views","engagement","six_second_views"],"example":"views"}},{"name":"limit","in":"query","required":false,"description":"How many videos to return, 1-20, default 20.","schema":{"type":"integer","minimum":1,"maximum":20}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":520,"max":900},"x-group":"Videos","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/profile/region":{"get":{"operationId":"tiktok_profile_region","summary":"Profile › Region","description":"Returns the two letter country code for a public TikTok profile, for example US or MX.\n\nUse it when all you need is an account's country, for routing or de-duplicating by market; profile returns the full account.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":true,"description":"TikTok username without the @ symbol","schema":{"type":"string","example":"stoolpresidente"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/adlibrary/search":{"get":{"operationId":"tiktok_adlibrary_search","summary":"Adlibrary › Search","description":"Returns TikTok Ad Library ads matching a keyword or advertiser name, each with creative, title, advertiser, impressions and date; include=ad adds the brand, landing page and advertiser link.\n\nUse it to find ads by query or advertiser_name; pass an ad id from the results to adlibrary/ad for the full record.\n\n**Metered: 100–340 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"query","in":"query","required":false,"description":"Keyword or phrase to search the TikTok Ad Library. Provide at least one of: `query`, `advertiser_name`.","schema":{"type":"string"}},{"name":"advertiser_name","in":"query","required":false,"description":"Advertiser name as it appears in the TikTok Ad Library. Provide at least one of: `query`, `advertiser_name`.","schema":{"type":"string","example":"Gymshark"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `ad` (one token only) to fill the registered brand name, the landing page, the advertiser's TikTok profile link and avatar (`post.ext.ad.brand_name`, `post.ext.ad.landing_page`, `post.ext.ad.profile_web_link`, `post.author.avatar_url`), plus the objectives, countries and source where the library has them, on every ad in this one call.","schema":{"type":"string","enum":["ad"]}},{"name":"limit","in":"query","required":false,"description":"Take the top N ads of the page (1 to 12) after the search has run. It is not a page size: `next_cursor` still advances past the full page.","schema":{"type":"integer","minimum":1,"maximum":12}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":340},"x-group":"Adlibrary","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/adlibrary/ad":{"get":{"operationId":"tiktok_adlibrary_ad","summary":"Adlibrary › Ad","description":"Returns one TikTok Ad Library ad: creative video, title, advertiser account, landing page, brand name, and first-shown date.\n\nUse it when you already have an ad id or library URL; use adlibrary/search to find ads by keyword or advertiser name first.\n\n**100 credits** per call.","tags":["tiktok"],"parameters":[{"name":"ad_id","in":"query","required":false,"description":"TikTok Ad Library ad id, or a library.tiktok.com ads/detail URL. Provide at least one of: `ad_id`, `url`.","schema":{"type":"string","example":"1869335220395266"}},{"name":"url","in":"query","required":false,"description":"TikTok Ad Library ads/detail URL. Provide at least one of: `ad_id`, `url`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Adlibrary","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/search/suggestions":{"get":{"operationId":"tiktok_search_suggestions","summary":"Search › Suggestions","description":"Returns the autocomplete suggestions TikTok's own search box shows for a partial query, as a list of suggestion rows.\n\nUse it for keyword research, or to expand a seed term before running search or search/top.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"query","in":"query","required":true,"description":"Partial search query to autocomplete.","schema":{"type":"string","example":"dogs"}},{"name":"region","in":"query","required":false,"description":"ISO 3166-1 alpha-2 country code to localize suggestions.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/tiktok/collection/videos":{"get":{"operationId":"tiktok_collection_videos","summary":"Collection › Videos","description":"Returns the public videos inside a TikTok collection, each with caption, play like comment share and save counts, author, and a playable URL.\n\nUse it when you have a collection URL and want the videos saved there, paging with max_cursor.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the TikTok collection.","schema":{"type":"string","example":"https://www.tiktok.com/@kibblemaster808/collection/Want-to-go-7665668414573546258"}},{"name":"max_cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page of collection videos.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Collection","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/profile/playlists":{"get":{"operationId":"tiktok_profile_playlists","summary":"Profile › Playlists","description":"Returns the playlists a TikTok creator has published on their profile, each with its playlist id, its name, and the number of videos it holds.\n\nUse it to find a playlist id before calling playlist/videos. TikTok does not publish a view total for a playlist, so engagement stays null on every row.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":false,"description":"TikTok username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"chipotle"}},{"name":"user_id","in":"query","required":false,"description":"TikTok numeric user ID. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/playlist/videos":{"get":{"operationId":"tiktok_playlist_videos","summary":"Playlist › Videos","description":"Returns the videos inside one of a creator's profile playlists, in playlist order, each with engagement counts, caption, author, and a playable URL.\n\nUse it with a playlist id from profile/playlists. Send the cursor back unchanged, because it is the platform's item index and not a count of the rows you hold.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"playlist_id","in":"query","required":true,"description":"Playlist id from /v1/tiktok/profile/playlists (`post.id` on that response).","schema":{"type":"string","example":"7229371484127382314"}},{"name":"handle","in":"query","required":false,"description":"TikTok username of the playlist owner, without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"chipotle"}},{"name":"user_id","in":"query","required":false,"description":"TikTok numeric user ID of the playlist owner. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page of videos.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Playlist","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/user/liked":{"get":{"operationId":"tiktok_user_liked","summary":"User › Liked","description":"Returns the videos a TikTok account has liked, newest first, each carrying its own third party author, engagement counts, caption, and a playable URL.\n\nUse it for what an account likes, not for who liked a post: that direction does not exist on TikTok. Most accounts hide the list, and a hidden list is a refunded not found.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":false,"description":"TikTok username without the @ symbol. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"chipotle"}},{"name":"user_id","in":"query","required":false,"description":"TikTok numeric user ID. Use this for faster responses. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page of liked videos.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/location/posts":{"get":{"operationId":"tiktok_location_posts","summary":"Location › Posts","description":"Returns public TikTok videos tagged at a place, each with engagement counts, caption, author, and a playable URL.\n\nUse it with TikTok's own place id from a place page URL. An unknown place is a refunded not found, while a real place with nothing recent returns an empty list.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"location_id","in":"query","required":true,"description":"TikTok place id, as it appears in the place page URL.","schema":{"type":"string","example":"22535865202815278"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page of videos.","schema":{"type":"string"}},{"name":"region","in":"query","required":false,"description":"Two-letter country code for the proxy location. Defaults to US.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Location","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/effects":{"get":{"operationId":"tiktok_effects","summary":"Effects","description":"Returns TikTok camera effects by id, each with its name, its designer, the views of videos made with it, and how many such videos exist.\n\nUse it to look several effects up in one call, and match results by the returned id. Repeated ids collapse and unknown ids drop, so the response can be shorter.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"ids","in":"query","required":true,"description":"Comma-separated TikTok effect ids, up to 50 per request.","schema":{"type":"string","example":"1108584,1109028"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Effects","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/effect/videos":{"get":{"operationId":"tiktok_effect_videos","summary":"Effect › Videos","description":"Returns public TikTok videos created with a camera effect, each with engagement counts, caption, author, and a playable URL.\n\nUse it with an effect id from effects, and send the cursor back unchanged. TikTok picks its own page size here and ignores the one you ask for.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"effect_id","in":"query","required":true,"description":"TikTok effect id, as returned by /v1/tiktok/effects.","schema":{"type":"string","example":"1108584"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page of videos.","schema":{"type":"string"}},{"name":"region","in":"query","required":false,"description":"Two-letter country code for the proxy location. Defaults to US.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Effect","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/search/music":{"get":{"operationId":"tiktok_search_music","summary":"Search › Music","description":"Returns TikTok sounds matching a keyword, each with title, artist, duration, cover art, a preview audio URL, and how many videos use it.\n\nUse it to size a sound trend, or to join a TikTok sound to Apple Music, Spotify and Amazon through the store ids on ext.dsp_ids.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword, matched against sound titles and creators.","schema":{"type":"string","example":"espresso"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response to fetch the next page of sounds.","schema":{"type":"string"}},{"name":"sort_by","in":"query","required":false,"description":"Result ordering: relevance (default), most-used, most-recent, shortest or longest.","schema":{"type":"string","enum":["relevance","most-used","most-recent","shortest","longest"]}},{"name":"filter_by","in":"query","required":false,"description":"Which field the keyword is matched against: all (default), title or creators.","schema":{"type":"string","enum":["all","title","creators"]}},{"name":"region","in":"query","required":false,"description":"Two-letter country code for the proxy location. Defaults to US.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/hashtag":{"get":{"operationId":"tiktok_hashtag","summary":"Hashtag","description":"Returns TikTok's own record for a hashtag, with its display name, its description where one exists, the live total views under the tag, and how many videos carry it.\n\nUse it to size a tag before pulling its posts. Pass the tag name and the id lookup happens for you, or pass hashtag_id when you already hold it.\n\n**20 credits** per call.","tags":["tiktok"],"parameters":[{"name":"hashtag","in":"query","required":false,"description":"Hashtag name, with or without the leading # symbol. Provide at least one of: `hashtag`, `hashtag_id`.","schema":{"type":"string","example":"kpop"}},{"name":"hashtag_id","in":"query","required":false,"description":"TikTok numeric hashtag id. Skips the name lookup when you already have it. Provide at least one of: `hashtag`, `hashtag_id`.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Hashtag","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/ads/top":{"get":{"operationId":"tiktok_ads_top","summary":"Ads › Top","description":"Returns TikTok's Creative Center leaderboard of top-performing ads for a market and time window, each with click-through rate, board rank, like count, industry, objective, and the ad video.\n\nUse it to find ad creative that actually performed. It is one window with no cursor, so set limit for depth and change country, period, or order_by for a different board.\n\n**Metered: 200–2000 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["tiktok"],"parameters":[{"name":"country","in":"query","required":false,"description":"Creative Center market to read the board for. Defaults to US. This is the market the ads ran in, not the language they are in.","schema":{"type":"string","enum":["US","CA","MX","BR","GB","DE","FR","IT","ES","NL","PL","SE","TR","SA","AE","AU","JP","KR","ID","TH","VN","MY","PH","SG"],"example":"US"}},{"name":"period","in":"query","required":false,"description":"Lookback window in days: 7, 30 or 180. Defaults to 30. A longer window is a different board, not more rows.","schema":{"type":"string","enum":["7","30","180"],"example":"30"}},{"name":"order_by","in":"query","required":false,"description":"How TikTok ranks the board: for_you (TikTok's own blend, the default), ctr, impression, like, cvr, play_2s_rate or play_6s_rate.","schema":{"type":"string","enum":["for_you","impression","ctr","play_2s_rate","play_6s_rate","cvr","like"],"example":"ctr"}},{"name":"ad_format","in":"query","required":false,"description":"Restrict to Spark ads (ads boosted from an organic post) or Non-Spark ads. Defaults to all.","schema":{"type":"string","enum":["All ad types","Spark ads","Non-Spark ads"]}},{"name":"ad_language","in":"query","required":false,"description":"Filter by the language of the ad copy.","schema":{"type":"string","enum":["en","ja","zh","vi","th","pt","id"]}},{"name":"like_tier","in":"query","required":false,"description":"TikTok's engagement percentile band, 1 (top) to 5. Use it to read further down the ranking without raising limit.","schema":{"type":"string","enum":["1","2","3","4","5"]}},{"name":"industry","in":"query","required":false,"description":"Creative Center sub-category label, for example 'Skincare' or 'Cosmetics'. Use a sub-category, not a top-level group: the board returns nothing for the broad groups such as 'Financial Services' or 'Education'. Omit for all industries.","schema":{"type":"string"}},{"name":"keyword","in":"query","required":false,"description":"Search the board by brand or product keyword.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many ads to return, 1-100, default 20.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":200,"max":2000},"x-group":"Ads","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/tiktok/profile/full":{"get":{"operationId":"tiktok_profile_full","summary":"Profile › Full","description":"Use it instead of profile when you want the account, its recent posts, and the engagement maths in one call rather than three.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["tiktok"],"parameters":[{"name":"handle","in":"query","required":false,"description":"TikTok username or handle, with or without a leading @. One of the identity params is required. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string","example":"mrbeast"}},{"name":"user_id","in":"query","required":false,"description":"Numeric TikTok user id. Use it instead of the handle when you already have the stable id, which survives a rename. One of the identity params is required. Provide at least one of: `handle`, `user_id`.","schema":{"type":"string"}},{"name":"posts","in":"query","required":false,"description":"How many of the fetched recent posts to return and compute the metrics over (1-100, default 25).","schema":{"type":"integer","example":25}},{"name":"cursor","in":"query","required":false,"description":"Pass a prior response's posts_cursor to read the next page of posts.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/twitter/profile":{"get":{"operationId":"twitter_profile","summary":"Profile","description":"Returns an X (Twitter) account's public profile: follower count, following count, tweet count, bio, profile and banner image URLs, and verification status.\n\nUse it when you have a handle and want a quick account snapshot before pulling its tweets.\n\n**20 credits** per call.","tags":["twitter"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Twitter username without the @ symbol","schema":{"type":"string","example":"elonmusk"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/user/tweets":{"get":{"operationId":"twitter_user_tweets","summary":"User › Tweets","description":"Returns an account's most recent tweets in descending order, with full text, like, retweet, reply, bookmark and view counts, media, and creation time. Around 20 tweets per page.\n\nUse it to read a timeline: pages come newest first, retweets and self-threads included, and you can page deeper by sending pagination.next_cursor back as cursor.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Twitter username without the @ symbol","schema":{"type":"string","example":"elonmusk"}},{"name":"since","in":"query","required":false,"description":"Only tweets published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older tweets are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned tweets sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.","schema":{"type":"string","example":"2026-09-01"}},{"name":"stop_at_id","in":"query","required":false,"description":"The id (`post.id`) or URL (`post.url`) of the newest tweet you already hold. The page stops just before it: that tweet and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned tweet never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.","schema":{"type":"string"}},{"name":"trim","in":"query","required":false,"description":"Accepted for backwards compatibility and ignored. It shrank the raw payload, which the canonical response never exposed, so it changed nothing you can see","schema":{"type":"boolean"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response's pagination.next_cursor to fetch the next page","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/tweet":{"get":{"operationId":"twitter_tweet","summary":"Tweet","description":"Returns one tweet in full: its text, like, retweet, reply and quote counts, media attachments, author info, and creation timestamp.\n\nUse it when you have a tweet URL and need its complete record, including the quote count that the user timeline does not carry.\n\n**20 credits** per call.","tags":["twitter"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the tweet. The numeric status id is what identifies it; the handle in the path is not checked","schema":{"type":"string","example":"https://x.com/NASA/status/2073078061499617543"}},{"name":"trim","in":"query","required":false,"description":"Accepted for backwards compatibility and ignored. It shrank the raw payload, which the canonical response never exposed, so it changed nothing you can see and cost the author details","schema":{"type":"boolean"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Tweet","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/community":{"get":{"operationId":"twitter_community","summary":"Community","description":"Returns an X (Twitter) community's details: name, description, member count, rules, and creation date.\n\nUse it when you have a community URL and want the group itself; community/tweets returns what has been posted inside it.\n\n**20 credits** per call.","tags":["twitter"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Twitter/X community, in the form https://x.com/i/communities/{id}","schema":{"type":"string","example":"https://x.com/i/communities/1926186499399139650"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Community","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/community/tweets":{"get":{"operationId":"twitter_community_tweets","summary":"Community › Tweets","description":"Returns recent tweets posted inside an X (Twitter) community, each with its text, engagement counts, and author info.\n\nUse it to read a community's activity; it returns a single page, while community returns the group's own details.\n\n**20 credits** per call.","tags":["twitter"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the Twitter/X community, in the form https://x.com/i/communities/{id}","schema":{"type":"string","example":"https://x.com/i/communities/1926186499399139650"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Community","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/tweet/transcript":{"get":{"operationId":"twitter_tweet_transcript","summary":"Tweet › Transcript","description":"Returns the transcript of a video attached to a tweet, including auto-generated captions.\n\nUse it when a tweet carries video and you need the spoken words; tweet returns the media attachment but not its speech.\n\n**200 credits** per call.","tags":["twitter"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the tweet containing a video","schema":{"type":"string","example":"https://x.com/TheoVon/status/1916982720317821050"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Tweet","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranscriptOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/ai-search":{"get":{"operationId":"twitter_ai_search","summary":"Ai Search","description":"Returns a written answer to a plain-English question about X (Twitter), the X posts cited as sources, and how many searches the model ran.\n\nUse it for open questions such as what an account has said about a topic this week. A thin answer means thin retrieval, not an empty corpus, so confirm coverage with search/tweets.\n\n**100 credits** per call.","tags":["twitter"],"parameters":[{"name":"query","in":"query","required":true,"description":"Natural-language prompt describing what you want to learn from X. The model autonomously searches X using the x_search tool with any handle / date filters you provide.","schema":{"type":"string","example":"What is @elonmusk saying about xAI this week?"}},{"name":"from_handles","in":"query","required":false,"description":"Comma-separated X handles (max 10). Restricts the search to posts from these accounts only. Mutually exclusive with exclude_handles.","schema":{"type":"string"}},{"name":"exclude_handles","in":"query","required":false,"description":"Comma-separated X handles (max 10) to exclude from search results. Mutually exclusive with from_handles.","schema":{"type":"string"}},{"name":"from_date","in":"query","required":false,"description":"ISO 8601 start date (YYYY-MM-DD). Limits the search window to posts on or after this date.","schema":{"type":"string"}},{"name":"to_date","in":"query","required":false,"description":"ISO 8601 end date (YYYY-MM-DD). Limits the search window to posts on or before this date.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Ai search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/twitter/search/tweets":{"get":{"operationId":"twitter_search_tweets","summary":"Search › Tweets","description":"Returns tweets matching a keyword or phrase, each with the full text, like, retweet, reply, bookmark and view counts, media attachments, author info, and creation time.\n\nUse it to track a topic or brand across X. Operators like from:, quoted phrases, filter:images, and since:/until: work inside query; sort picks latest (default) or top, the cursor pages deeper.\n\n**Metered: 20–100 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"query","in":"query","required":true,"description":"Keyword or phrase to search tweets for. This endpoint has no date parameters: the date window is an operator inside this string, since:YYYY-MM-DD and until:YYYY-MM-DD. Other X operators work here too, for example from:handle, quoted phrases, min_faves:20, filter:images, and filter:videos. Quote a multi-word phrase when you want relevance rather than engagement ranking from sort=top","schema":{"type":"string","example":"nike running shoes"}},{"name":"sort","in":"query","required":false,"description":"Result ranking: latest (default) for the newest matches first, top for the most popular matches. top ranks by engagement, not relevance, so an unquoted multi-term query can return popular posts that match none of your terms. Quote the phrase or add an operator to tighten it","schema":{"type":"string","enum":["latest","top"]}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response's pagination.next_cursor to fetch the next page","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}}],"x-credits":{"min":20,"max":100},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/tweet/replies":{"get":{"operationId":"twitter_tweet_replies","summary":"Tweet › Replies","description":"Returns the replies to a tweet, each with the reply text, author info, like and reply counts, and creation time. The tweet itself is not in the list.\n\nUse it with a tweet URL to read the conversation under it; the cursor walks deeper threads, and a tweet with no replies returns an empty list.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the tweet to fetch replies for","schema":{"type":"string","example":"https://x.com/News24/status/2093257170653483101"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response's pagination.next_cursor to fetch more replies","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Tweet","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/user/media":{"get":{"operationId":"twitter_user_media","summary":"User › Media","description":"Returns the tweets on an account's Media tab, only those carrying a photo or video, with media URLs, engagement counts, and creation time. View and bookmark counts are null here.\n\nUse it to pull an account's visual output without the text-only tweets user/tweets includes; the cursor pages deeper into the media grid.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Twitter username without the @ symbol","schema":{"type":"string","example":"News24"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response's pagination.next_cursor to fetch the next page","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/user/followers":{"get":{"operationId":"twitter_user_followers","summary":"User › Followers","description":"Returns the accounts following an X (Twitter) user, each with the handle, display name, bio, follower and tweet counts, privacy flag, and join date.\n\nUse it to sample an account's audience. Page size is set by the source, around 70 accounts, and the cursor pages deeper; verification status is not readable here and returns null.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Twitter username without the @ symbol","schema":{"type":"string","example":"News24"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response's pagination.next_cursor to fetch the next page","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/user/following":{"get":{"operationId":"twitter_user_following","summary":"User › Following","description":"Returns the accounts an X (Twitter) user follows, each with the handle, display name, bio, follower and tweet counts, privacy flag, and join date.\n\nUse it to map who an account pays attention to. Page size is set by the source and the cursor pages deeper; verification status is not readable here and returns null.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"handle","in":"query","required":true,"description":"Twitter username without the @ symbol","schema":{"type":"string","example":"News24"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response's pagination.next_cursor to fetch the next page","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"User","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/tweet/retweeters":{"get":{"operationId":"twitter_tweet_retweeters","summary":"Tweet › Retweeters","description":"Returns the accounts that retweeted a tweet, each with the handle, display name, bio, follower and tweet counts, privacy flag, and join date.\n\nUse it with a tweet URL to see who amplified it. Page size is set by the source and the cursor pages deeper; verification status is not readable here and returns null.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the tweet whose retweeters you want","schema":{"type":"string","example":"https://x.com/News24/status/2093257170653483101"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response's pagination.next_cursor to fetch the next page","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Tweet","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/search/users":{"get":{"operationId":"twitter_search_users","summary":"Search › Users","description":"Returns X (Twitter) accounts matching a name, handle or keyword, with handle, display name, bio, avatar, follower, following and tweet counts, location, verification, join date, and a private flag.\n\nUse it to resolve a handle you half know before calling profile or user/tweets. There is no spelling correction, so verify the returned handle. About 20 accounts a page, and the cursor pages deeper.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"query","in":"query","required":true,"description":"Name, handle, or keyword to search accounts for","schema":{"type":"string","example":"news24"}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response's pagination.next_cursor to fetch the next page","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfilePage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/twitter/profile/full":{"get":{"operationId":"twitter_profile_full","summary":"Profile › Full","description":"Use it instead of calling profile and user/tweets yourself.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["twitter"],"parameters":[{"name":"handle","in":"query","required":true,"description":"X (Twitter) username or handle, with or without a leading @. One of the identity params is required.","schema":{"type":"string","example":"mrbeast"}},{"name":"posts","in":"query","required":false,"description":"How many of the fetched recent posts to return and compute the metrics over (1-100, default 25).","schema":{"type":"integer","example":25}},{"name":"cursor","in":"query","required":false,"description":"Pass a prior response's posts_cursor to read the next page of posts.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/youtube/channel":{"get":{"operationId":"youtube_channel","summary":"Channel","description":"Returns a YouTube channel's public profile: subscriber count on author.followers (rounded above 1,000), video and view totals, description, banner and avatar URLs, and author.ext.public_email.\n\nUse it when you have a handle, channel id, or channel URL and want an account snapshot before pulling its videos.\n\n**20 credits** per call.","tags":["youtube"],"parameters":[{"name":"channelId","in":"query","required":false,"description":"YouTube channel ID. Can pass a channelId, handle or url. Provide at least one of: `channelId`, `handle`, `url`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"YouTube channel handle without the @ symbol. Provide at least one of: `channelId`, `handle`, `url`.","schema":{"type":"string","example":"MrBeast"}},{"name":"url","in":"query","required":false,"description":"YouTube channel URL. Can pass a channelId, handle or url. Provide at least one of: `channelId`, `handle`, `url`.","schema":{"type":"string"}},{"name":"hl","in":"query","required":false,"description":"Preferred response language for localized text (ISO 639-1, e.g. 'en', 'es', 'fr').","schema":{"type":"string"}},{"name":"forUsername","in":"query","required":false,"description":"Legacy YouTube username (pre-handle) to look up.","schema":{"type":"string"}},{"name":"contact_email","in":"query","required":false,"description":"Optional. When 1, also returns author.ext.contact_email: when the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim from the bio. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. author.ext.public_email is unchanged. No extra credits.","schema":{"type":"string","enum":["1"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Channel","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/channel/about":{"get":{"operationId":"youtube_channel_about","summary":"Channel › About","description":"Returns the address behind a channel's View email address control on author.ext.public_email, its listed country, and the profile: id, handle, name, avatar, bio, URL, subscribers, join date, views.\n\nUse it for outreach when GET /v1/youtube/channel returned no email: that lane reads only the public description, this one reads the About tab control. Premium priced, so shortlist first.\n\n**500 credits** per call.","tags":["youtube"],"parameters":[{"name":"channelId","in":"query","required":false,"description":"YouTube channel ID. Can pass a channelId, handle or url. Provide at least one of: `channelId`, `handle`, `url`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"YouTube channel handle without the @ symbol. Provide at least one of: `channelId`, `handle`, `url`.","schema":{"type":"string","example":"mkbhd"}},{"name":"url","in":"query","required":false,"description":"YouTube channel URL. Can pass a channelId, handle or url. Provide at least one of: `channelId`, `handle`, `url`.","schema":{"type":"string"}},{"name":"contact_email","in":"query","required":false,"description":"Optional. When 1, also returns author.ext.contact_email: when the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim from the bio. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. author.ext.public_email is unchanged. No extra credits.","schema":{"type":"string","enum":["1"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":500,"x-group":"Channel","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProfileOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/channel/videos":{"get":{"operationId":"youtube_channel_videos","summary":"Channel › Videos","description":"Returns recent videos published by a channel, each with title, view count, duration, thumbnail, and publish date; pass includeExtras=true to add like and comment counts.\n\nUse it for a channel's regular uploads; channel/shorts covers Shorts, channel/lives covers streams, channel/community-posts covers text posts.\n\n**Metered: 20–40 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"channelId","in":"query","required":false,"description":"YouTube channel ID. Provide at least one of: `channelId`, `handle`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"YouTube channel handle without the @ symbol. Provide at least one of: `channelId`, `handle`.","schema":{"type":"string","example":"MrBeast"}},{"name":"since","in":"query","required":false,"description":"Only videos published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older videos are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned videos sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.","schema":{"type":"string","example":"2026-09-01"}},{"name":"stop_at_id","in":"query","required":false,"description":"The id (`post.id`) or URL (`post.url`) of the newest video you already hold. The page stops just before it: that video and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned video never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort by latest or popular","schema":{"type":"string","enum":["latest","popular"]}},{"name":"continuationToken","in":"query","required":false,"description":"Continuation token to get more videos. Get 'continuationToken' from previous response.","schema":{"type":"string"}},{"name":"includeExtras","in":"query","required":false,"description":"Set to `true` to add the like count and comment count (`post.engagement.likes` / `.comments`) and the video description (`post.ext.description`). For the full per-video detail use /v1/youtube/video. Slows the response slightly.","schema":{"type":"string"}},{"name":"is_paid_promotions","in":"query","required":false,"description":"Set to 'true' to search YouTube's public paid product placement / sponsorship / endorsement surface: returns normal videos where the creator disclosed a paid promotion.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `channel` (one token only) to add the channel's subscriber count to every row (`post.ext.author_followers`, YouTube's own figure, rounded to three significant figures above 1,000) plus `post.author.display_name`, `.avatar_url` and `author.id` where missing. Adds well under a second (never more than 8).","schema":{"type":"string","enum":["channel"]}},{"name":"exact_dates","in":"query","required":false,"description":"Exact publish dates are on by default and free. Set to `false` to skip the lookup: those rows then carry the supplier's estimate (a day-granular or coarser label truncated to midnight UTC), marked by `post.ext.published_precision` and `post.ext.published_label`.","schema":{"type":"string","enum":["true","false"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":40},"x-group":"Channel","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/video":{"get":{"operationId":"youtube_video","summary":"Video","description":"Returns full details for one video: title, view, like and comment counts, description, tags, duration, channel info, and publish date.\n\nUse it when you have a video URL and need its complete record; the list endpoints return lighter entries without the description or tags.\n\n**20 credits** per call.","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube video","schema":{"type":"string","example":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{"name":"language","in":"query","required":false,"description":"Preferred response language (mapped to Accept-Language header; not guaranteed due to YouTube localization behavior). 2 letter language code, ie 'en', 'es', 'fr' etc.","schema":{"type":"string"}},{"name":"hl","in":"query","required":false,"description":"Preferred response language for localized text (ISO 639-1, e.g. 'en', 'es', 'fr').","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/video/sponsors":{"get":{"operationId":"youtube_video_sponsors","summary":"Video › Sponsors","description":"Returns whether a video carries a paid-promotion disclosure plus the brands likely sponsoring it, each with supporting evidence and a confidence score.\n\nUse it to spot sponsored videos and who paid; sponsors are inferred from the description, links, promo codes, and transcript, not stated by YouTube.\n\n**200 credits** per call.","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube video or short","schema":{"type":"string","example":"https://www.youtube.com/watch?v=AVO0ifle-OU"}},{"name":"language","in":"query","required":false,"description":"2 letter language code used for transcript lookup, ie 'en', 'es', 'fr' etc.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":200,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/youtube/video/comments":{"get":{"operationId":"youtube_video_comments","summary":"Video › Comments","description":"Returns comments on a video, each with the author name, comment text, like count, reply count, and publish timestamp.\n\nUse it for a video's top-level comments, then pass the reply token it returns to video/comment/replies to open a single thread.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube video to fetch comments for","schema":{"type":"string","example":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{"name":"continuationToken","in":"query","required":false,"description":"Continuation token to get more comments. Get 'continuationToken' from previous response.","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"Order of comments: 'top' (default, YouTube's relevance ranking) or 'newest' (exact newest-first on `comment.published_at`; each next page continues strictly older with no overlap: the lane for date-window and recency pulls).","schema":{"type":"string","enum":["top","newest"]}},{"name":"searchTerm","in":"query","required":false,"description":"Filter comments to those containing this search term.","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"Text format for comment bodies: 'html' (default) or 'plainText'.","schema":{"type":"string","enum":["html","plainText"]}},{"name":"max_results","in":"query","required":false,"description":"Comments per page, 1-100. The default page is already 100, so set this only to shrink a page; out-of-range values are rejected with a free 400 rather than degrading the response.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"channel_id","in":"query","required":false,"description":"YouTube channel id to fetch channel-level community comments for (instead of a video's comments).","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":20,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/video/comment/replies":{"get":{"operationId":"youtube_video_comment_replies","summary":"Video › Comment › Replies","description":"Returns the replies under one comment, each with the reply text, author details, like count, and publish date.\n\nUse it after video/comments: pass the reply token that endpoint returned, and keep paging until no replies remain to get the whole thread.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"continuationToken","in":"query","required":true,"description":"Where to start. Three values work: a top-level comment id (e.g. the `comment.id` of any row from /v1/youtube/video/comments), that row's `comment.ext.replies_token`, or the `pagination.next_cursor` from a previous replies response. A token that is none of these is rejected.","schema":{"type":"string","example":"Ugzge340dBgB75hWBm54AaABAg"}},{"name":"format","in":"query","required":false,"description":"Text format for reply bodies: 'html' (default) or 'plainText'.","schema":{"type":"string","enum":["html","plainText"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"description":"Universal pagination cursor. Send `pagination.next_cursor` from the previous response back verbatim: the API maps it to this endpoint's native `continuationToken` (cursor style). You never construct, decode, or look up a cursor. Omit it for page 1.","schema":{"type":"string"}}],"x-credits":20,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CommentPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/search":{"get":{"operationId":"youtube_search","summary":"Search","description":"Returns YouTube search results for a keyword: videos, channels, playlists, shorts, and live streams, each with title, thumbnail, views, and channel.\n\nUse it for a general keyword search across every content kind; search/advanced returns videos only but adds date, license, and country filters.\n\n**Metered: 20–300 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search keyword or phrase.","schema":{"type":"string","example":"javascript tutorial"}},{"name":"uploadDate","in":"query","required":false,"description":"Upload date filter. Reliable on its own (no `type`). With `type=shorts`, windows narrower than `this_year` are rejected with a 400 because YouTube returns an empty set for them; `this_year` is accepted but measured to return ~5x fewer unique Shorts across a paginated walk (the platform re-serves the same items under an advancing `continuationToken`), so the recommended pattern for Shorts recency is no `uploadDate` at all plus `includeExtras=true` and a client-side filter on `post.published_at`. With other `type` values the platform currently ignores the date filter and may mix content kinds; filter client-side there too. For an EXACT date window rather than these coarse buckets, use `/v1/youtube/search/advanced`, whose `published_after`/`published_before` take RFC-3339 bounds and are genuinely applied.","schema":{"type":"string","enum":["today","this_week","this_month","this_year"]}},{"name":"sortBy","in":"query","required":false,"description":"Sort order: relevance or popular. `popular` cannot be combined with `type=shorts` (rejected with a 400. YouTube serves that combination unreliably); it also caps the page at ~20 results. It is also NOT a strict view-count sort: `popular` is a popularity-weighted ranking, and results do not come back in descending view order. Measured on 4 of 4 test keywords: a `new york` search returned 9.5M, then 502.9M, then 66K views in that order. If you need a view-faithful ordering, use `/v1/youtube/search/advanced` with `order=viewCount` and `includeExtras=true`: its ranking leads with the true top results, and the returned `engagement.views` lets you sort the page exactly client-side.","schema":{"type":"string","enum":["relevance","popular"]}},{"name":"type","in":"query","required":false,"description":"Type of content to return. NOTE on Shorts results (`type=shorts`, and the Shorts an untyped search mixes in): the Shorts shelf item carries NO channel object source (0 of 98 items across 3 keywords on 10/08/2026, 25 of 25 without one on 26/09/2026, raw source; `includeExtras=true` does not add it). By default the free per-video lookup that supplies the exact date also fills `author.id` and `post.author.display_name` on those rows, at no extra credit. `post.author.username` (the @handle) and `post.author.avatar_url` stay null on them: send `include=engagement,channel` to fill both and the subscriber count. With `exact_dates=false` no lookup runs and the whole author stays null on Shorts. Video results are unaffected (20/20 carry the full author). `/v1/youtube/search/advanced` also carries `channel_id` on every result, though it has no Shorts filter.","schema":{"type":"string","enum":["videos","shorts","channels","playlists"],"example":"videos"}},{"name":"duration","in":"query","required":false,"description":"Video duration filter. Known issue: currently not applied by the platform and it can degrade the `type` filter; prefer filtering client-side on `post.content.duration_seconds`.","schema":{"type":"string","enum":["under_3_min","between_3_and_20_min","over_20_min"]}},{"name":"region","in":"query","required":false,"description":"2-letter country code of the country to put the proxy in.","schema":{"type":"string"}},{"name":"continuationToken","in":"query","required":false,"description":"Continuation token to get more results. Get `continuationToken` from a previous response.","schema":{"type":"string"}},{"name":"includeExtras","in":"query","required":false,"description":"Set to `true` to add the like count and comment count (`post.engagement.likes` / `.comments`) and the video description (`post.ext.description`) to each video result. Left off, those three are null. Dates do not need it: `post.published_at` is exact by default either way (see `exact_dates`). For Shorts results it additionally supplies `post.content.duration_seconds`, which those items never carry otherwise. It does NOT add channel identity to Shorts results (see `type`) and it never adds a subscriber count. For both, send `include=engagement,channel` instead: the video join supplies every row's channel id, and the channel join adds the subscriber count, in this same call. For full per-video details use `/v1/youtube/video`.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `engagement`, `channel`, or both (`engagement,channel`) to fill more of every row in this one call. `engagement` fills `post.engagement.views`, `.likes` and `.comments`, `post.content.duration_seconds`, `author.id` and `post.author.display_name` where the row lacks them, and replaces a date derived from a label such as \"4 months ago\" with the exact publish time (removing `post.ext.published_precision`). `channel` puts the channel's subscriber count on `post.ext.author_followers` (YouTube's own figure, which it rounds to three significant figures above 1,000) and fills the channel's `post.author.display_name`, `.avatar_url` and `.username` where missing. Send both to cover rows that arrive without a channel id: the video join supplies it and the channel join then uses it. Channel and playlist result rows are not videos: the video join skips them. Each join adds 0.2 to 0.7 seconds on a fresh page (one lookup per 50 ids, never more than 8 seconds).","schema":{"type":"string"}},{"name":"exact_dates","in":"query","required":false,"description":"Exact publish dates are on by default and free. Set to `false` to skip the lookup: those rows then carry the supplier's estimate (a day-granular or coarser label truncated to midnight UTC), marked by `post.ext.published_precision` and `post.ext.published_label`.","schema":{"type":"string","enum":["true","false"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}}],"x-credits":{"min":20,"max":300},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/channel/shorts":{"get":{"operationId":"youtube_channel_shorts","summary":"Channel › Shorts","description":"Returns the Shorts published by a channel, each with title, view count, like count, and thumbnail.\n\nUse it when you want only a channel's Shorts; channel/videos returns its regular uploads instead.\n\n**Metered: 20–40 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"channelId","in":"query","required":false,"description":"Can pass channelId or handle. Provide at least one of: `channelId`, `handle`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"YouTube channel handle without the @ symbol. Provide at least one of: `channelId`, `handle`.","schema":{"type":"string","example":"MrBeast"}},{"name":"since","in":"query","required":false,"description":"Only shorts published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older shorts are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned shorts sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.","schema":{"type":"string","example":"2026-09-01"}},{"name":"stop_at_id","in":"query","required":false,"description":"The id (`post.id`) or URL (`post.url`) of the newest short you already hold. The page stops just before it: that short and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned short never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort by newest (descending publish date) or popular (descending view count). Both orderings are genuinely applied, unlike `/v1/youtube/search`'s `popular`, which is a popularity-weighted ranking rather than a view sort.","schema":{"type":"string","enum":["newest","popular"]}},{"name":"continuationToken","in":"query","required":false,"description":"Continuation token to get more videos. Get 'continuationToken' from previous response.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `channel` (one token only) to add the channel's subscriber count to every row (`post.ext.author_followers`, YouTube's own figure, rounded to three significant figures above 1,000) plus `post.author.display_name`, `.avatar_url` and `author.id` where missing. Adds well under a second (never more than 8).","schema":{"type":"string","enum":["channel"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":40},"x-group":"Channel","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/community-post":{"get":{"operationId":"youtube_community_post","summary":"Community Post","description":"Returns one YouTube community post: its text, like count, comment count, attached images, and author info.\n\nUse it when you have a single community post URL; channel/community-posts lists them for a whole channel.\n\n**20 credits** per call.","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube community post","schema":{"type":"string","example":"https://www.youtube.com/post/Ugkxvj2KoApYAXoqLWnKVr6zZe5JjeHrQeP8"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Community post","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/playlist":{"get":{"operationId":"youtube_playlist","summary":"Playlist","description":"Returns the videos in a playlist in playlist order: video id, title, thumbnail, channel and publish date. include=engagement adds views, likes, comments and duration.\n\nUse it when you have a playlist id. Same rows as playlist/items from the same source; this lane has a second source behind it, so prefer it when availability matters.\n\n**Metered: 20–220 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"playlist_id","in":"query","required":true,"description":"YouTube playlist ID","schema":{"type":"string","example":"PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from a previous response: fetches the next page.","schema":{"type":"string"}},{"name":"channel_id","in":"query","required":false,"description":"YouTube channel id: pages that channel's uploads instead of a playlist.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `engagement`, `channel`, or both (`engagement,channel`) to fill more of every row in this one call. `engagement` fills `post.engagement.views`, `.likes` and `.comments`, `post.content.duration_seconds`, `author.id` and `post.author.display_name` where the row lacks them, and replaces a date derived from a label such as \"4 months ago\" with the exact publish time (removing `post.ext.published_precision`). `channel` puts the channel's subscriber count on `post.ext.author_followers` (YouTube's own figure, which it rounds to three significant figures above 1,000) and fills the channel's `post.author.display_name`, `.avatar_url` and `.username` where missing. Send both to cover rows that arrive without a channel id: the video join supplies it and the channel join then uses it. Each join adds 0.2 to 0.7 seconds on a fresh page (one lookup per 50 ids, never more than 8 seconds).","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":220},"x-group":"Playlist","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/search/hashtag":{"get":{"operationId":"youtube_search_hashtag","summary":"Search › Hashtag","description":"Returns videos posted under a hashtag, each with view count, channel info, and publish date.\n\nUse it to read a hashtag feed rather than a keyword query; set type to shorts to limit the results to Shorts.\n\n**Metered: 20–220 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"hashtag","in":"query","required":true,"description":"Hashtag to search for without the # symbol","schema":{"type":"string","example":"shorts"}},{"name":"continuationToken","in":"query","required":false,"description":"Continuation token to get more videos. Get 'continuationToken' from previous response.","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"Search for all types of content or only shorts","schema":{"type":"string","enum":["all","shorts"]}},{"name":"include","in":"query","required":false,"description":"Set to `engagement`, `channel`, or both (`engagement,channel`) to fill more of every row in this one call. `engagement` fills `post.engagement.views`, `.likes` and `.comments`, `post.content.duration_seconds`, `author.id` and `post.author.display_name` where the row lacks them, and replaces a date derived from a label such as \"4 months ago\" with the exact publish time (removing `post.ext.published_precision`). `channel` puts the channel's subscriber count on `post.ext.author_followers` (YouTube's own figure, which it rounds to three significant figures above 1,000) and fills the channel's `post.author.display_name`, `.avatar_url` and `.username` where missing. Send both to cover rows that arrive without a channel id: the video join supplies it and the channel join then uses it. Each join adds 0.2 to 0.7 seconds on a fresh page (one lookup per 50 ids, never more than 8 seconds).","schema":{"type":"string"}},{"name":"exact_dates","in":"query","required":false,"description":"Exact publish dates are on by default and free. Set to `false` to skip the lookup: those rows then carry the supplier's estimate (a day-granular or coarser label truncated to midnight UTC), marked by `post.ext.published_precision` and `post.ext.published_label`.","schema":{"type":"string","enum":["true","false"]}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":220},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/shorts/trending":{"get":{"operationId":"youtube_shorts_trending","summary":"Shorts › Trending","description":"Returns the Shorts trending on YouTube right now, each with view count, like count, channel info, and thumbnail.\n\nUse it for a snapshot of what is trending in Shorts; videos/trending covers regular videos and can be narrowed by country.\n\n**Metered: 100–300 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.","tags":["youtube"],"parameters":[{"name":"include","in":"query","required":false,"description":"Set to `channel` (one token only) to add each row's channel stats in this one call. `channel` puts the channel's subscriber count on `post.ext.author_followers` (YouTube's own figure, which it rounds to three significant figures above 1,000) and fills the channel's `post.author.display_name`, `.avatar_url` and `.username` where missing. Each join adds 0.2 to 0.7 seconds on a fresh page (one lookup per 50 ids, never more than 8 seconds).","schema":{"type":"string","enum":["channel"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":100,"max":300},"x-group":"Shorts","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/video/transcript":{"get":{"operationId":"youtube_video_transcript","summary":"Video › Transcript","description":"Returns the spoken transcript of a video as timestamped segments, each with text, start time and duration, plus language, word count, and speech rate.\n\nUse it for a single video URL; when the video has no captions the reply is a 404 naming the reason, which is expected rather than a failure.\n\n**60 credits** per call.","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube video","schema":{"type":"string","example":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{"name":"language","in":"query","required":false,"description":"2 letter language code, ie 'en', 'es', 'fr' etc. If no caption track matches the language you specify, the request returns 404 RESOURCE_NOT_FOUND (reason `no_captions`).","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":60,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranscriptOne"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/channel/playlists":{"get":{"operationId":"youtube_channel_playlists","summary":"Channel › Playlists","description":"Returns the playlists on a channel's Playlists tab, each with playlist id, title, thumbnail, video count, channel info, and playlist URL.\n\nUse it to discover a channel's playlists, then pass a returned playlist id to playlist or playlist/items to read the videos inside one.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"channelId","in":"query","required":false,"description":"YouTube channel ID. Provide at least one of: `channelId`, `handle`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"YouTube channel handle (with or without @). Provide at least one of: `channelId`, `handle`.","schema":{"type":"string","example":"mkbhd"}},{"name":"continuationToken","in":"query","required":false,"description":"Continuation token from a previous response: fetches the next page.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Channel","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/channel/lives":{"get":{"operationId":"youtube_channel_lives","summary":"Channel › Lives","description":"Returns the live and past streams on a channel's Live tab, each with title, URL, thumbnail, view count, publish time, and duration.\n\nUse it to track a channel's streaming output; channel/videos returns regular uploads and leaves the Live tab out.\n\n**Metered: 20–140 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"channelId","in":"query","required":false,"description":"YouTube channel ID. Provide at least one of: `channelId`, `handle`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"YouTube channel handle (with or without @). Provide at least one of: `channelId`, `handle`.","schema":{"type":"string","example":"IShowSpeed"}},{"name":"continuationToken","in":"query","required":false,"description":"Continuation token from a previous response: fetches the next page.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `engagement`, `channel`, or both (`engagement,channel`) to fill more of every row in this one call. `engagement` fills `post.engagement.views`, `.likes` and `.comments`, `post.content.duration_seconds`, `author.id` and `post.author.display_name` where the row lacks them, and replaces a date derived from a label such as \"4 months ago\" with the exact publish time (removing `post.ext.published_precision`). Each join adds 0.2 to 0.7 seconds on a fresh page (one lookup per 50 ids, never more than 8 seconds).","schema":{"type":"string"}},{"name":"exact_dates","in":"query","required":false,"description":"Exact publish dates are on by default and free. Set to `false` to skip the lookup: those rows then carry the supplier's estimate (a day-granular or coarser label truncated to midnight UTC), marked by `post.ext.published_precision` and `post.ext.published_label`.","schema":{"type":"string","enum":["true","false"]}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":140},"x-group":"Channel","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/channel/community-posts":{"get":{"operationId":"youtube_channel_community_posts","summary":"Channel › Community Posts","description":"Returns the posts on a channel's Posts tab, each with post id, URL, text, images, attached video, like count, publish time, and channel info.\n\nUse it to read a channel's text and image posts in bulk; community-post fetches one post when you already have its URL.\n\n**20 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"channelId","in":"query","required":false,"description":"YouTube channel ID. Provide at least one of: `channelId`, `handle`.","schema":{"type":"string"}},{"name":"handle","in":"query","required":false,"description":"YouTube channel handle (with or without @). Provide at least one of: `channelId`, `handle`.","schema":{"type":"string","example":"MrBeast"}},{"name":"continuationToken","in":"query","required":false,"description":"Continuation token from a previous response: fetches the next page.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Channel","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/videos/trending":{"get":{"operationId":"youtube_videos_trending","summary":"Videos › Trending","description":"Returns the trending videos for a country and category, each with title, thumbnail, duration, view, like and comment counts, channel, and publish time.\n\nUse it to see what is popular in a given country right now; shorts/trending covers Shorts and takes no filters.\n\n**Metered: 20–120 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"region","in":"query","required":false,"description":"ISO 3166-1 alpha-2 country code (e.g. US, GB, KR).","schema":{"type":"string","example":"US"}},{"name":"category","in":"query","required":false,"description":"YouTube video category id (e.g. 10 = Music, 24 = Entertainment).","schema":{"type":"string","example":"10"}},{"name":"language","in":"query","required":false,"description":"Localization language (ISO 639-1) for titles/metadata.","schema":{"type":"string"}},{"name":"max_results","in":"query","required":false,"description":"Maximum number of videos to return (1-50).","schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from a previous response: fetches the next page.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `channel` (one token only) to add each row's channel stats in this one call. `channel` puts the channel's subscriber count on `post.ext.author_followers` (YouTube's own figure, which it rounds to three significant figures above 1,000) and fills the channel's `post.author.display_name`, `.avatar_url` and `.username` where missing. Each join adds 0.2 to 0.7 seconds on a fresh page (one lookup per 50 ids, never more than 8 seconds).","schema":{"type":"string","enum":["channel"]}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":120},"x-group":"Videos","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/playlist/items":{"get":{"operationId":"youtube_playlist_items","summary":"Playlist › Items","description":"Returns the videos of a playlist in playlist order, each with video id, title, thumbnail, the video's own channel, its publish date, and its position and insertion time on post.ext.\n\nUse it when you have a playlist id; add include=engagement for counts and durations. Same rows as playlist, which has a second source behind it.\n\n**Metered: 20–220 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"playlist_id","in":"query","required":true,"description":"YouTube playlist id (the value after `list=` in a playlist URL).","schema":{"type":"string","example":"PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from a previous response: fetches the next page.","schema":{"type":"string"}},{"name":"channel_id","in":"query","required":false,"description":"YouTube channel id: pages that channel's uploads instead of a playlist.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `engagement`, `channel`, or both (`engagement,channel`) to fill more of every row in this one call. `engagement` fills `post.engagement.views`, `.likes` and `.comments`, `post.content.duration_seconds`, `author.id` and `post.author.display_name` where the row lacks them, and replaces a date derived from a label such as \"4 months ago\" with the exact publish time (removing `post.ext.published_precision`). `channel` puts the channel's subscriber count on `post.ext.author_followers` (YouTube's own figure, which it rounds to three significant figures above 1,000) and fills the channel's `post.author.display_name`, `.avatar_url` and `.username` where missing. Send both to cover rows that arrive without a channel id: the video join supplies it and the channel join then uses it. Each join adds 0.2 to 0.7 seconds on a fresh page (one lookup per 50 ids, never more than 8 seconds).","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":220},"x-group":"Playlist","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/search/advanced":{"get":{"operationId":"youtube_search_advanced","summary":"Search › Advanced","description":"Returns video search results with the full filter set: sort order, length, live status, license, category, country, language, and publish date window.\n\nUse it when a plain keyword search is too blunt; results are always videos, so use search when you also want channels or playlists back.\n\n**Metered: 20–220 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"query","in":"query","required":true,"description":"Search query.","schema":{"type":"string","example":"lofi hip hop"}},{"name":"order","in":"query","required":false,"description":"Sort order: date, rating, relevance (default), title, videoCount, viewCount. `order=date` is exact (measured: zero inversions against the timestamps). `order=viewCount` is YouTube's popularity-weighted ranking: the top result is the true maximum but mid-list order is approximate, so for exact ranking add `includeExtras=true` and sort the page on `engagement.views` client-side. Both are far more faithful than `/v1/youtube/search`'s `sortBy=popular`, which is not view-ordered at all.","schema":{"type":"string"}},{"name":"duration","in":"query","required":false,"description":"Video length: short (<4m), medium (4-20m), long (>20m), any. Genuinely applied (unlike `/v1/youtube/search`'s `duration`, which the platform ignores). `short` plus a client-side `post.content.duration_seconds <= 180` filter is the documented Shorts approximation: see the endpoint description for why it is an approximation and not a Shorts filter.","schema":{"type":"string","example":"long"}},{"name":"event_type","in":"query","required":false,"description":"Broadcast type: live, upcoming, completed.","schema":{"type":"string"}},{"name":"license","in":"query","required":false,"description":"License filter: creativeCommon, youtube, any.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"YouTube video category id (e.g. 10 = Music).","schema":{"type":"string"}},{"name":"region","in":"query","required":false,"description":"ISO 3166-1 alpha-2 country code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Preferred result language (ISO 639-1).","schema":{"type":"string"}},{"name":"published_after","in":"query","required":false,"description":"RFC-3339 datetime lower bound (e.g. 2026-01-01T00:00:00Z). Exact and genuinely applied. This is the endpoint to use for date-window work.","schema":{"type":"string"}},{"name":"published_before","in":"query","required":false,"description":"RFC-3339 datetime upper bound. Exact and genuinely applied.","schema":{"type":"string"}},{"name":"channel_id","in":"query","required":false,"description":"Restrict results to a single channel id.","schema":{"type":"string"}},{"name":"max_results","in":"query","required":false,"description":"Maximum number of videos to return (1-50). Honored exactly: a page of 50 returns 50 (live-verified).","schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from a previous response: fetches the next page.","schema":{"type":"string"}},{"name":"safe_search","in":"query","required":false,"description":"Safe-search filter: none, moderate, strict.","schema":{"type":"string"}},{"name":"video_caption","in":"query","required":false,"description":"Caption filter: any, closedCaption, none.","schema":{"type":"string"}},{"name":"video_definition","in":"query","required":false,"description":"Quality filter: any, high, standard.","schema":{"type":"string"}},{"name":"video_dimension","in":"query","required":false,"description":"Dimension filter: 2d, 3d, any.","schema":{"type":"string"}},{"name":"video_embeddable","in":"query","required":false,"description":"Restrict to embeddable videos: true, any.","schema":{"type":"string"}},{"name":"video_type","in":"query","required":false,"description":"Type filter: any, episode, movie.","schema":{"type":"string"}},{"name":"topic_id","in":"query","required":false,"description":"Restrict to a Freebase topic id (e.g. /m/04rlf for music).","schema":{"type":"string"}},{"name":"location","in":"query","required":false,"description":"Latitude,longitude center for a geo search (e.g. 37.42307,-122.08427). Must be used together with location_radius.","schema":{"type":"string"}},{"name":"location_radius","in":"query","required":false,"description":"Radius around location with a unit suffix (e.g. 50km, 10mi). Must be used together with location.","schema":{"type":"string"}},{"name":"includeExtras","in":"query","required":false,"description":"Set to `true` to add the view, like and comment counts (`post.engagement.views` / `.likes` / `.comments`) and the video length (`post.content.duration_seconds`) to every result. Left off, those four are null. YouTube's search index returns snippets only, so the counts come from a second lookup.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Set to `channel` (one token only) to add each row's channel stats in this one call. `channel` puts the channel's subscriber count on `post.ext.author_followers` (YouTube's own figure, which it rounds to three significant figures above 1,000) and fills the channel's `post.author.display_name`, `.avatar_url` and `.username` where missing. Each join adds 0.2 to 0.7 seconds on a fresh page (one lookup per 50 ids, never more than 8 seconds).","schema":{"type":"string","enum":["channel"]}},{"name":"min_views","in":"query","required":false,"description":"Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor.","schema":{"type":"integer","minimum":0}},{"name":"max_age_days","in":"query","required":false,"description":"Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"sort_rows","in":"query","required":false,"description":"`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.","schema":{"type":"string","enum":["views"]}},{"name":"max_pages","in":"query","required":false,"description":"1 to 5 (default 1). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed as one call to this endpoint; the whole walk counts once against your rate limit.","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":{"min":20,"max":220},"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PostPage"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"stable"}},"/v1/youtube/search/suggestions":{"get":{"operationId":"youtube_search_suggestions","summary":"Search › Suggestions","description":"Returns the autocomplete suggestions YouTube's own search box shows for a partial query, as a plain list of strings.\n\nUse it for keyword research, or to expand a seed term before running search or search/advanced.\n\n**20 credits** per call.","tags":["youtube"],"parameters":[{"name":"query","in":"query","required":true,"description":"Partial search query to autocomplete.","schema":{"type":"string","example":"lofi"}},{"name":"region","in":"query","required":false,"description":"ISO 3166-1 alpha-2 country code to localize suggestions.","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Search","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/youtube/video/audio":{"get":{"operationId":"youtube_video_audio","summary":"Video › Audio","description":"Returns the downloadable audio streams for a video, each with a direct media URL, mime type, bitrate, audio quality, sample rate, channels, and duration.\n\nUse it to grab a video's audio on its own; the URLs are time-limited, so fetch them straight away rather than storing them.\n\n**100 credits** per call.","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube video.","schema":{"type":"string","example":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/youtube/video/files":{"get":{"operationId":"youtube_video_files","summary":"Video › Files","description":"Returns the downloadable video streams for a video, each with a direct media URL, mime type, resolution, quality label, frame rate, bitrate, and duration.\n\nUse it when you need the video file itself; video/audio returns audio-only streams and video/thumbnails returns still images.\n\n**100 credits** per call.","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube video.","schema":{"type":"string","example":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/youtube/video/subtitles":{"get":{"operationId":"youtube_video_subtitles","summary":"Video › Subtitles","description":"Returns the caption track files for a video, each with a language code and name, file format, and a direct download URL, including auto-generated tracks.\n\nUse it when you want subtitle files to download; video/transcript gives you the words themselves, already split into timed segments.\n\n**20 credits** per call.","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube video.","schema":{"type":"string","example":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{"name":"format","in":"query","required":false,"description":"Subtitle file format filter (e.g. srt, vtt, ttml, json3, srv1).","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/youtube/video/thumbnails":{"get":{"operationId":"youtube_video_thumbnails","summary":"Video › Thumbnails","description":"Returns a video's thumbnail images at every available size, each with a direct image URL, width, height, aspect ratio, and image format.\n\nUse it when you need a video's artwork on its own, for example to pick the largest image for your own listing or preview.\n\n**20 credits** per call.","tags":["youtube"],"parameters":[{"name":"url","in":"query","required":true,"description":"Full URL of the YouTube video.","schema":{"type":"string","example":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":20,"x-group":"Video","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/youtube/profile/full":{"get":{"operationId":"youtube_profile_full","summary":"Profile › Full","description":"Use it instead of calling channel and channel/videos yourself; if the videos cannot be fetched you still get the profile with those metrics empty.\n\n**100 credits** per call.\n\nPaginates by `cursor`: see [Pagination](/docs/pagination).","tags":["youtube"],"parameters":[{"name":"handle","in":"query","required":false,"description":"YouTube username or handle, with or without a leading @. One of the identity params is required. Provide at least one of: `handle`, `channelId`, `url`.","schema":{"type":"string","example":"mrbeast"}},{"name":"channelId","in":"query","required":false,"description":"YouTube channel id, the 24-character string starting with UC. One of the identity params is required. Provide at least one of: `handle`, `channelId`, `url`.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"Full YouTube profile or page URL. One of the identity params is required. Provide at least one of: `handle`, `channelId`, `url`.","schema":{"type":"string"}},{"name":"posts","in":"query","required":false,"description":"How many of the fetched recent posts to return and compute the metrics over (1-100, default 25).","schema":{"type":"integer","example":25}},{"name":"cursor","in":"query","required":false,"description":"Pass a prior response's posts_cursor to read the next page of posts.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"dry_run","in":"query","required":false,"description":"Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.","schema":{"type":"string","enum":["1"]}}],"x-credits":100,"x-group":"Profile","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope2"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ConventionsData"}}}]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"x-stability":"beta"}},"/v1/credits":{"get":{"operationId":"credits","summary":"Credits","description":"The calling key owner's balance and this period's usage. Free.","tags":["account"],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"credits_used":{"type":"integer","example":0},"credits_remaining":{"type":"integer","example":9480},"plan":{"type":"object","properties":{"tier":{"type":"string","enum":["free","pro"],"example":"pro"},"credits_per_month":{"type":"integer","example":10000},"resets_at":{"type":"string","format":"date-time","example":"2026-10-01T00:00:00.000Z"}}},"usage":{"type":"object","properties":{"window_start":{"type":"string","format":"date-time","example":"2026-09-01T00:00:00.000Z"},"used":{"type":"integer","example":520},"used_export":{"type":"integer","example":300},"used_api":{"type":"integer","example":220}}},"pack_credits":{"type":"integer","example":0,"description":"Purchased pack credits. They never expire."},"free_calls":{"type":"object","properties":{"remaining":{"type":"integer","example":7},"total":{"type":"integer","example":10}}},"key":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","example":"Production"}}},"request_id":{"type":"string","example":"req_1a2b3c4d5e6f"}}}}}},"401":{"$ref":"#/components/responses/Error"}}}},"/v1/endpoints":{"get":{"operationId":"endpoints","summary":"Endpoints","description":"This catalogue, with per-endpoint prices. Free, and needs no key.","tags":["account"],"security":[],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"}}}},"/v1/openapi.json":{"get":{"operationId":"openapi","summary":"OpenAPI","description":"The OpenAPI 3.1 spec for every endpoint, for generating clients and agent tools. Free, and needs no key.","tags":["account"],"security":[],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your key from the dashboard. It starts with `isk_`."}},"schemas":{"Envelope":{"type":"object","required":["success","platform","endpoint","data","credits_used","credits_remaining","request_id","cached","idempotent_replay","charge_reason","free_call"],"properties":{"success":{"type":"boolean","const":true},"platform":{"type":"string","example":"instagram"},"endpoint":{"type":"string","example":"/v1/instagram/profile"},"data":{"type":"object","additionalProperties":true,"description":"The result. Its shape depends on the endpoint; see Unified schema."},"pagination":{"type":"object","description":"List endpoints only. Send `next_cursor` back as `cursor` while `has_more` is true.","properties":{"next_cursor":{"type":["string","null"],"example":"is2.eyJwIjoyfQ"},"has_more":{"type":"boolean","example":true},"page_size":{"type":"integer","example":20},"stopped_at":{"type":"string","description":"Present when a walk stopped early at a boundary you set, such as `since` or `stop_at_id`."}}},"credits_used":{"type":"integer","example":20,"description":"Credits this call cost."},"credits_remaining":{"type":"integer","example":9980,"description":"Your balance after this call."},"request_id":{"type":"string","example":"req_1a2b3c4d5e6f","description":"Quote it when you contact support."},"cached":{"type":"boolean","example":false},"idempotent_replay":{"type":"boolean","example":false},"charge_reason":{"type":"string","enum":["miss","shared_cache","replay","no_result"],"example":"miss","description":"Why the call cost what it did. See Credits."},"free_call":{"type":"boolean","example":false,"description":"One of your free calls covered this charge."}}},"Error":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["type","message"],"additionalProperties":false},"request_id":{"type":"string"},"credits_used":{"type":"integer","minimum":0,"maximum":9007199254740991},"credits_remaining":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["success","error","request_id","credits_used","credits_remaining"],"additionalProperties":false},"JsonValue":{"description":"Any JSON value."},"Author":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"description":"An identifier, always a string. Never parse it as a number: several platforms use ids above 2^53."},{"type":"null"}]},"username":{"type":["string","null"]},"display_name":{"type":["string","null"]},"avatar_url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}]},"verified":{"type":["boolean","null"]}},"required":["id","username","display_name","avatar_url","verified"],"additionalProperties":false},"Profile":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"An identifier, always a string. Never parse it as a number: several platforms use ids above 2^53."},"username":{"type":["string","null"]},"display_name":{"type":["string","null"]},"avatar_url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}]},"bio":{"type":["string","null"]},"verified":{"type":["boolean","null"]},"followers":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"followers_approximate":{"type":["boolean","null"]},"following":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"posts_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"likes_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}]},"location":{"type":["string","null"]},"external_url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}]},"private":{"type":["boolean","null"]},"joined_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO-8601 timestamp in UTC, ending in Z."},{"type":"null"}]},"last_post_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO-8601 timestamp in UTC, ending in Z."},{"type":"null"}]},"ext":{"anyOf":[{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:_[a-z0-9]+)*$"},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"}},{"type":"null"}],"description":"Platform-specific fields, snake_case. The key list per platform is in the docs."}},"required":["id","username","display_name","avatar_url","bio","verified","followers","followers_approximate","following","posts_count","likes_count","url","location","external_url","private","joined_at","last_post_at","ext"],"additionalProperties":false},"Post":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"An identifier, always a string. Never parse it as a number: several platforms use ids above 2^53."},"url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}]},"kind":{"anyOf":[{"type":"string","minLength":1,"description":"The format of the post. Format words only, never a platform name. short = short-form vertical video (a reel, a TikTok, a YouTube Short).","x-extensible-enum":["text","image","carousel","video","short","live","article","link"]},{"type":"null"}]},"content":{"type":"object","properties":{"text":{"type":["string","null"]},"media_urls":{"anyOf":[{"type":"array","items":{"type":"string","minLength":1,"format":"uri"}},{"type":"null"}]},"thumbnail_url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}]},"duration_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["text","media_urls","thumbnail_url","duration_seconds"],"additionalProperties":false},"author":{"$ref":"#/components/schemas/Author"},"engagement":{"type":"object","properties":{"views":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"likes":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"comments":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"shares":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"saves":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."}},"required":["views","likes","comments","shares","saves"],"additionalProperties":false},"flags":{"type":"object","properties":{"nsfw":{"type":["boolean","null"]},"spoiler":{"type":["boolean","null"]},"pinned":{"type":["boolean","null"]},"deleted":{"type":"boolean"},"likes_hidden":{"type":["boolean","null"]},"comments_hidden":{"type":["boolean","null"]},"shares_hidden":{"type":["boolean","null"]},"views_hidden":{"type":["boolean","null"]},"saves_hidden":{"type":["boolean","null"]}},"required":["nsfw","spoiler","pinned","deleted","likes_hidden","comments_hidden","shares_hidden","views_hidden","saves_hidden"],"additionalProperties":false},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO-8601 timestamp in UTC, ending in Z."},{"type":"null"}]},"language":{"anyOf":[{"type":"string","minLength":2,"description":"The content's language as the platform states it, e.g. en, pt-BR. Detected languages come later (§7.1)."},{"type":"null"}]},"ext":{"anyOf":[{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:_[a-z0-9]+)*$"},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"}},{"type":"null"}],"description":"Platform-specific fields, snake_case. The key list per platform is in the docs."}},"required":["id","url","kind","content","author","engagement","flags","published_at","language","ext"],"additionalProperties":false},"Comment":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"An identifier, always a string. Never parse it as a number: several platforms use ids above 2^53."},"url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}]},"parent_id":{"anyOf":[{"type":"string","minLength":1,"description":"An identifier, always a string. Never parse it as a number: several platforms use ids above 2^53."},{"type":"null"}]},"post_id":{"anyOf":[{"type":"string","minLength":1,"description":"An identifier, always a string. Never parse it as a number: several platforms use ids above 2^53."},{"type":"null"}]},"text":{"type":["string","null"]},"author":{"$ref":"#/components/schemas/Author"},"engagement":{"type":"object","properties":{"likes":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"replies":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."}},"required":["likes","replies"],"additionalProperties":false},"flags":{"type":"object","properties":{"pinned":{"type":["boolean","null"]},"deleted":{"type":"boolean"}},"required":["pinned","deleted"],"additionalProperties":false},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO-8601 timestamp in UTC, ending in Z."},{"type":"null"}]},"language":{"anyOf":[{"type":"string","minLength":2,"description":"The content's language as the platform states it, e.g. en, pt-BR. Detected languages come later (§7.1)."},{"type":"null"}]},"replies":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Comment"}},{"type":"null"}]},"ext":{"anyOf":[{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:_[a-z0-9]+)*$"},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"}},{"type":"null"}],"description":"Platform-specific fields, snake_case. The key list per platform is in the docs."}},"required":["id","url","parent_id","post_id","text","author","engagement","flags","published_at","language","replies","ext"],"additionalProperties":false},"Transcript":{"type":"object","properties":{"language":{"anyOf":[{"type":"string","minLength":2,"description":"The content's language as the platform states it, e.g. en, pt-BR. Detected languages come later (§7.1)."},{"type":"null"}]},"text":{"type":["string","null"]},"segments":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"duration_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["text","start_seconds","duration_seconds"],"additionalProperties":false}},{"type":"null"}]}},"required":["language","text","segments"],"additionalProperties":false},"PostOne":{"type":"object","properties":{"post":{"$ref":"#/components/schemas/Post"}},"required":["post"],"additionalProperties":false},"PostPage":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"post":{"$ref":"#/components/schemas/Post"}},"required":["post"],"additionalProperties":false}},"total":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"truncated":{"type":["boolean","null"]},"ext":{"anyOf":[{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:_[a-z0-9]+)*$"},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"}},{"type":"null"}],"description":"Platform-specific fields, snake_case. The key list per platform is in the docs."}},"required":["items","total","truncated"],"additionalProperties":false},"ProfileOne":{"type":"object","properties":{"author":{"$ref":"#/components/schemas/Profile"}},"required":["author"],"additionalProperties":false},"ProfilePage":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"author":{"$ref":"#/components/schemas/Profile"}},"required":["author"],"additionalProperties":false}},"total":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"truncated":{"type":["boolean","null"]},"ext":{"anyOf":[{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:_[a-z0-9]+)*$"},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"}},{"type":"null"}],"description":"Platform-specific fields, snake_case. The key list per platform is in the docs."}},"required":["items","total","truncated"],"additionalProperties":false},"CommentOne":{"type":"object","properties":{"comment":{"$ref":"#/components/schemas/Comment"}},"required":["comment"],"additionalProperties":false},"CommentPage":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"comment":{"$ref":"#/components/schemas/Comment"}},"required":["comment"],"additionalProperties":false}},"total":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A count. null when the platform does not expose it; 0 only when it is really zero."},"truncated":{"type":["boolean","null"]},"ext":{"anyOf":[{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:_[a-z0-9]+)*$"},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"}},{"type":"null"}],"description":"Platform-specific fields, snake_case. The key list per platform is in the docs."}},"required":["items","total","truncated"],"additionalProperties":false},"TranscriptOne":{"type":"object","properties":{"transcript":{"$ref":"#/components/schemas/Transcript"}},"required":["transcript"],"additionalProperties":false},"ConventionsData":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:_[a-z0-9]+)*$"},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"x-stability":"beta"},"Pagination":{"type":"object","properties":{"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"page_size":{"type":"integer","minimum":0,"maximum":9007199254740991},"stopped_at":{"anyOf":[{"type":"string","enum":["since","known_id","end"]},{"type":"null"}]}},"required":["next_cursor","has_more","page_size"],"additionalProperties":false},"Envelope2":{"type":"object","properties":{"success":{"type":"boolean","const":true},"platform":{"type":"string"},"endpoint":{"type":"string"},"schema_version":{"type":"string","const":"2"},"data":{},"pagination":{"$ref":"#/components/schemas/Pagination"},"unavailable":{"type":"array","items":{"type":"string"}},"credits_used":{"type":"integer","minimum":0,"maximum":9007199254740991},"credits_remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"request_id":{"type":"string"},"cached":{"type":"boolean"},"idempotent_replay":{"type":"boolean"},"charge_reason":{"type":"string"},"free_call":{"type":"boolean"}},"required":["success","platform","endpoint","schema_version","data","unavailable","credits_used","credits_remaining","request_id","cached","idempotent_replay","charge_reason","free_call"],"additionalProperties":false}},"responses":{"Ok":{"description":"Success. See [Response schema](/docs/response-schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"},"example":{"success":true,"platform":"instagram","endpoint":"/v1/instagram/profile/posts","data":{"items":["…"],"dropped":0},"pagination":{"next_cursor":"is2.eyJwIjoyfQ","has_more":true,"page_size":12},"credits_used":20,"credits_remaining":9980,"request_id":"req_1a2b3c4d5e6f","cached":false,"idempotent_replay":false,"charge_reason":"miss","free_call":false}}}},"Error":{"description":"See [Error handling](/docs/errors).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"type":"INSUFFICIENT_CREDITS","message":"This call needs up to 340 credits and 120 remain. Top up at https://www.insightsocial.app/pricing"},"request_id":"req_1a2b3c4d5e6f","credits_used":0,"credits_remaining":120}}}}}}}