{"data":{"api":"v1","authentication":{"description":"Every endpoint (except this one) requires your API key.","methods":[{"example":"https://dev.omar-thing.site/api/v1/profile?username=tiktok&key=YOUR_API_KEY","name":"key","type":"query"},{"example":"https://dev.omar-thing.site/api/v1/profile?username=tiktok&api_key=YOUR_API_KEY","name":"api_key","type":"query"},{"example":"X-API-Key: YOUR_API_KEY","name":"X-API-Key","type":"header"}]},"base_url":"https://dev.omar-thing.site/api/v1","count":34,"endpoints":[{"auth_required":true,"category":"Profiles & Users","description":"Fetch a TikTok user's basic profile by username.","example_request":"https://dev.omar-thing.site/api/v1/profile?username=tiktok&format=clean&key=YOUR_API_KEY","example_response":{"data":{"itemList":[],"stats":{"diggCount":0,"followerCount":94400000,"followingCount":3,"friendCount":4,"heart":458800000,"heartCount":458800000,"videoCount":1437},"statsV2":{"diggCount":"0","followerCount":"94351351","followingCount":"3","friendCount":"4","heart":"458782738","heartCount":"458782738","videoCount":"1437"},"user":{"UserStoryStatus":1,"avatarLarger":"https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ba67b11de451691939223e9d978e613a~tplv-tiktokx-cropcenter:1080:1080.jpeg?x-expires=1781157600&x-signature=...","avatarMedium":"https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ba67b11de451691939223e9d978e613a~tplv-tiktokx-cropcenter:720:720.jpeg?x-expires=1781157600&x-signature=...","avatarThumb":"https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ba67b11de451691939223e9d978e613a~tplv-tiktokx-cropcenter:100:100.jpeg?x-expires=1781157600&x-signature=...","bioLink":{"link":"linktr.ee/tiktok","risk":0},"canExpPlaylist":true,"commentSetting":0,"commerceUserInfo":{"category":"Media & Entertainment","categoryButton":false,"commerceUser":true},"createTime":1425144149,"downloadSetting":0,"duetSetting":0,"eventList":[{"desc":"","duration":"0","enable_update":false,"has_subscribed":false,"id":"7647753210504937503","is_paid_event":false,"is_promoting":false,"promote_video_count":0,"start_time":"1781049600","status":0,"subscriber_count":"0","ticket_amount":"0","title":"Get Blue LIVE with Matt Damon","type":0,"under_review_desc":"","write_acl":{"delete_block":null,"update_block":null}}],"followingVisibility":1,"ftc":false,"id":"107955","isADVirtual":false,"isEmbedBanned":false,"isOrganization":1,"language":"en","nickNameModifyTime":1638559600,"nickname":"TikTok","nowInvitationCardUrl":"","openFavorite":false,"privateAccount":false,"profileEmbedPermission":1,"profileTab":{"showMusicTab":false,"showPlayListTab":true,"showQuestionTab":true},"recommendReason":"","relation":0,"roomId":"","secUid":"MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM","secret":false,"shortDramaCreator":{},"shortId":"","signature":"One TikTok can make a big impact","stitchSetting":0,"suggestAccountBind":false,"ttSeller":false,"uniqueId":"tiktok","uniqueIdModifyTime":0,"verified":true}},"note":"Default (raw) response \u2014 TikTok's complete userInfo object. `itemList` (the user's videos) is omitted here for brevity. Add ?format=clean for a small, friendly subset.","status":"success"},"method":"GET","name":"profile","parameters":[{"description":"TikTok username, @handle, or profile URL. (Provide one of username / sec_uid / user_id.)","example":"tiktok","name":"username","required":false,"type":"string"},{"description":"The account's secUid (alternative to username).","name":"sec_uid","placeholder":"the account's secUid (MS4wLjABAAAA\u2026)","prefill":false,"required":false,"type":"string"},{"description":"The account's numeric user id (alternative to username).","name":"user_id","placeholder":"numeric user id","prefill":false,"required":false,"type":"string"},{"description":"Omit for the full raw object (default). Use `clean` for a trimmed smart subset (name, country, stats, \u2026).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/profile","returns":"By default, the complete raw `userInfo` object as TikTok exposes it (`user`, `stats`, `statsV2`, `itemList`, \u2026). With `format=clean`, a trimmed object (username, country, followers, etc.).","url":"https://dev.omar-thing.site/api/v1/profile"},{"auth_required":true,"category":"Profiles & Users","description":"List a TikTok user's followers.","example_request":"https://dev.omar-thing.site/api/v1/followers?username=tiktok&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":50,"followers":[{"...":"many more raw user fields","aweme_count":4,"create_time":1778669630,"custom_verify":"","follower_count":54,"following_count":107,"nickname":"djongsam","region":"CM","sec_uid":"MS4wLjABAAAA-gBGRztDk9ZLvZf_fm9bSKtsDHHQ...","signature":"","total_favorited":35,"uid":"7639327790094091284","unique_id":"daviddjongsam"},{"...":"49 more items"}],"has_more":true,"next_cursor":"eyJtYXhfY3Vyc29yIjoxNzgwOTg0Nzk0LCJtaW5f...","username":"tiktok"},"note":"Default (raw) response \u2014 full TikTok user objects (trimmed with \u2026 ; each item has many more fields). Add ?format=clean for a small subset.","status":"success"},"method":"GET","name":"followers","parameters":[{"description":"TikTok username, @handle, or profile URL.","example":"tiktok","name":"username","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response for the next.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for the full raw objects (default). Use `clean` for a trimmed smart subset of each account.","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/followers","returns":"`username`, `next_cursor`, `has_more`, `count`, and a `followers` array. Raw TikTok objects by default; trimmed objects with `format=clean`.","url":"https://dev.omar-thing.site/api/v1/followers"},{"auth_required":true,"category":"Profiles & Users","description":"List the accounts a TikTok user follows.","example_request":"https://dev.omar-thing.site/api/v1/following?username=tiktok&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":50,"following":[{"...":"many more raw user fields","aweme_count":340,"create_time":1500000000,"custom_verify":"Popular creator","follower_count":9800000,"following_count":12,"nickname":"Nike","region":"US","sec_uid":"MS4wLjABAAAAv7iSs0k47hWp-S3WNv0lkfH...","signature":"Just Do It","total_favorited":120000000,"uid":"6531990500230431234","unique_id":"nike"},{"...":"49 more items"}],"has_more":true,"next_cursor":"eyJtYXhfY3Vyc29yIjoxNzgwOTg0Nzk0LCJtaW5f...","username":"tiktok"},"note":"Default (raw) response \u2014 full TikTok user objects (trimmed with \u2026 ; each item has many more fields). Add ?format=clean for a small subset.","status":"success"},"method":"GET","name":"following","parameters":[{"description":"TikTok username, @handle, or profile URL.","example":"tiktok","name":"username","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response for the next.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for the full raw objects (default). Use `clean` for a trimmed smart subset of each account.","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/following","returns":"`username`, `next_cursor`, `has_more`, `count`, and a `following` array. Raw TikTok objects by default; trimmed objects with `format=clean`.","url":"https://dev.omar-thing.site/api/v1/following"},{"auth_required":true,"category":"Profiles & Users","description":"Get a TikTok account's current region (country) by its numeric user id.","example_request":"https://dev.omar-thing.site/api/v1/current_region?user_id=107955&key=YOUR_API_KEY","example_response":{"data":{"region":"JP","region_name":"Japan","user_id":"107955"},"status":"success"},"method":"GET","name":"current_region","parameters":[{"description":"The numeric TikTok user id (from /profile \u2192 data.user.id).","example":"107955","name":"user_id","required":true,"type":"string"}],"path":"/api/v1/current_region","returns":"`user_id`, the account's current `region` (ISO code, e.g. JP) and its full `region_name` (e.g. Japan).","url":"https://dev.omar-thing.site/api/v1/current_region"},{"auth_required":true,"category":"Search","description":"Search TikTok for users/accounts (one page per call, cursor-paginated).","example_request":"https://dev.omar-thing.site/api/v1/search_users?query=messi&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":15,"has_more":true,"next_cursor":"15","query":"messi","results":[{"avatar":"https://...","followers":68142884,"nickname":"fcbarcelona","profile_url":"https://www.tiktok.com/@fcbarcelona","sec_uid":"MS4w...","user_id":"67...","username":"fcbarcelona","verified":true},{"...":"more (format=clean shown)"}]},"status":"success"},"method":"GET","name":"search_users","parameters":[{"description":"What to search for.","example":"messi","name":"query","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for raw account objects (default). `clean` for a trimmed subset (username, nickname, followers, verified, avatar).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/search_users","returns":"`query`, `next_cursor`, `has_more`, `count`, and a `results` array of account objects (raw by default, trimmed with format=clean).","url":"https://dev.omar-thing.site/api/v1/search_users"},{"auth_required":true,"category":"Search","description":"Search TikTok for videos (one page per call, cursor-paginated).","example_request":"https://dev.omar-thing.site/api/v1/search_videos?query=messi%20goal&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":15,"has_more":true,"next_cursor":"15","query":"messi goal","results":[{"...":"more (format=clean shown; raw aweme by default)","desc":"Best Messi solo goals \u2620\ufe0f","id":"76...","music":{"title":"original sound"},"no_watermark":"https://...","stats":{"comments":1029,"likes":98639,"views":659441}}]},"status":"success"},"method":"GET","name":"search_videos","parameters":[{"description":"What to search for.","example":"messi goal","name":"query","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for raw video objects (default). `clean` for a trimmed subset (id, desc, stats, music, urls).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/search_videos","returns":"`query`, `next_cursor`, `has_more`, `count`, and a `results` array of aweme (video) objects \u2014 raw by default, trimmed with format=clean.","url":"https://dev.omar-thing.site/api/v1/search_videos"},{"auth_required":true,"category":"Search","description":"Search TikTok for photo/slideshow posts (one page per call, cursor-paginated).","example_request":"https://dev.omar-thing.site/api/v1/search_photos?query=japan&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":15,"has_more":true,"next_cursor":"15|17...","query":"japan","results":[{"...":"more (format=clean shown; raw aweme by default)","author":{"nickname":"Someone","username":"someone"},"aweme_id":"74...","desc":"Tokyo trip \ud83c\uddef\ud83c\uddf5","image_count":6,"images":["https://..."],"stats":{"comments":44,"likes":1203}}]},"status":"success"},"method":"GET","name":"search_photos","parameters":[{"description":"What to search for.","example":"japan","name":"query","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for raw photo objects (default). `clean` for a trimmed subset (id, desc, images, author, stats).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/search_photos","returns":"`query`, `next_cursor`, `has_more`, `count`, and a `results` array of aweme (photo) objects \u2014 raw by default, trimmed with format=clean.","url":"https://dev.omar-thing.site/api/v1/search_photos"},{"auth_required":true,"category":"Search","description":"Search TikTok for hashtags (one page per call, cursor-paginated).","example_request":"https://dev.omar-thing.site/api/v1/search_hashtags?query=fifa&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":15,"has_more":true,"next_cursor":"15","query":"fifa","results":[{"description":"","hashtag_id":"15...","name":"fifa","user_count":10665795,"view_count":256277531482},{"...":"more (format=clean shown)"}]},"status":"success"},"method":"GET","name":"search_hashtags","parameters":[{"description":"What to search for.","example":"fifa","name":"query","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for raw challenge objects (default). `clean` for a trimmed subset (name, views, posts, description).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/search_hashtags","returns":"`query`, `next_cursor`, `has_more`, `count`, and a `results` array of hashtag/challenge objects \u2014 raw by default, trimmed with format=clean.","url":"https://dev.omar-thing.site/api/v1/search_hashtags"},{"auth_required":true,"category":"Search","description":"Search TikTok for places/POIs (venues, landmarks, restaurants). Results are localized to the `country` you pass (ISO-2). One page per call, cursor-paginated.","example_request":"https://dev.omar-thing.site/api/v1/search_places?query=coffee&country=JP&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":15,"country":"AE","has_more":true,"next_cursor":"15","query":"burj khalifa","results":[{"address":"1 Sheikh Mohammed bin Rashid Blvd - Downtown Dubai - UAE","city":"Sector 3","country":"AE","lat":"25.197197","lng":"55.274377","name":"Burj Khalifa","place_id":"225...","rating":"","reviews":0,"type":"Tower","video_count":4949253},{"...":"more (format=clean shown)"}]},"status":"success"},"method":"GET","name":"search_places","parameters":[{"description":"Place name or keyword.","example":"coffee","name":"query","required":true,"type":"string"},{"description":"ISO-2 country code that localizes the results (e.g. US, SA, AE, GB, EG). Default US. This is what decides which country's places come back \u2014 not your location or the keyword.","example":"JP","name":"country","required":false,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for raw POI objects (default). `clean` for a trimmed subset (name, address, country, lat/lng, video_count, rating).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/search_places","returns":"`query`, `country`, `next_cursor`, `has_more`, `count`, and a `results` array of place/POI objects \u2014 raw by default, trimmed with format=clean (name, type, address, country, city, lat, lng, video_count, rating, reviews).","url":"https://dev.omar-thing.site/api/v1/search_places"},{"auth_required":true,"category":"Content","description":"List the videos a TikTok user has posted (one raw page per call, cursor-paginated).","example_request":"https://dev.omar-thing.site/api/v1/posts?username=tiktok&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":20,"has_more":true,"next_cursor":"1777572709000","posts":[{"...":"many more raw fields","aweme_id":"7649091368656194847","aweme_type":0,"create_time":1736900000,"desc":"#FilmTok just made first contact \ud83d\udc7d","music":{"author":"tiktok","title":"original sound"},"statistics":{"comment_count":1800,"digg_count":230000,"play_count":5400000,"share_count":9100},"video":{"...":"more video fields","cover":{"url_list":["https://p16-sign.../cover.jpeg"]},"play_addr":{"url_list":["https://v16-webapp.../video.mp4"]}}},{"...":"19 more items"}],"username":"tiktok"},"note":"Default (raw) response \u2014 full TikTok video objects (trimmed with \u2026 ; each item has many more fields). Add ?format=clean for a small subset.","status":"success"},"method":"GET","name":"posts","parameters":[{"description":"TikTok username, @handle, or profile URL.","example":"tiktok","name":"username","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response for the next.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for the full raw objects (default). Use `clean` for a trimmed subset (id, desc, urls, music, stats).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/posts","returns":"`username`, `source` (`web` or `mobile`), `next_cursor`, `has_more`, `count`, and a `posts` array. Raw TikTok video objects by default (web or mobile shape, per `source`); trimmed objects with `format=clean`.","url":"https://dev.omar-thing.site/api/v1/posts"},{"auth_required":true,"category":"Content","description":"Fetch the comments on a TikTok video (id or URL).","example_request":"https://dev.omar-thing.site/api/v1/comments?video=7548650127926365458&filter=newest&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"aweme_id":"7548650127926365458","comments":[{"...":"many more raw comment fields","aweme_id":"7548650127926365458","cid":"7566731335827702549","create_time":1761766955,"digg_count":4583,"reply_comment":null,"reply_comment_total":9,"status":1,"text":"Amazing video!","text_extra":[],"user":{"...":"many more raw user fields","nickname":"N","sec_uid":"MS4wLjABAAAA4A4ZyGB3ddhyB3brX9IJ-na0...","uid":"7325430789506794498","unique_id":"itueo"}},{"...":"more items"}],"count":20,"has_more":true,"next_cursor":"20"},"note":"Default (raw) response \u2014 full TikTok comment objects (trimmed with \u2026 ; each item has many more fields). Add ?format=clean for a small subset with nested replies.","status":"success"},"method":"GET","name":"comments","parameters":[{"description":"Video id, or any TikTok video/photo URL (incl. short vt./vm. links).","example":"7548650127926365458","name":"video","placeholder":"video URL or video id","prefill":false,"required":true,"type":"string"},{"description":"`top` (default, most relevant), `newest` (most recent first), `creator` (only the video author's comments), or `images` (comments that include images).","example":"newest","name":"filter","required":false,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response for the next.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for the full raw objects (default). Use `clean` for a trimmed subset (comment, user, likes, replies, \u2026).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/comments","returns":"`aweme_id`, `next_cursor`, `has_more`, `count`, and a `comments` array. Raw TikTok objects by default; trimmed objects (with nested `replies`) when `format=clean`.","url":"https://dev.omar-thing.site/api/v1/comments"},{"auth_required":true,"category":"Content","description":"Fetch a TikTok user's active stories.","example_request":"https://dev.omar-thing.site/api/v1/stories?username=tiktok&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":1,"has_more":false,"next_cursor":"0","stories":[{"...":"many more raw story fields","aweme_id":"7548650000000000001","create_time":1750000000,"music":{"author":"tiktok","title":"original sound"},"statistics":{"comment_count":340,"digg_count":12000,"play_count":850000},"story_metadata":{"expired_at":1750086400},"video":{"...":"more video fields","cover":{"url_list":["https://p16-sign.tiktokcdn-us.com/.../cover.jpeg"]},"duration":15000,"play_addr":{"url_list":["https://v19-webapp.tiktok.com/.../video.mp4"]}}},{"...":"more items"}],"username":"tiktok"},"note":"Default (raw) response \u2014 full TikTok story objects (trimmed with \u2026 ; each item has many more fields). The stories array is empty when the user has no active stories. Add ?format=clean for a small subset.","status":"success"},"method":"GET","name":"stories","parameters":[{"description":"TikTok username, @handle, or profile URL.","example":"tiktok","name":"username","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response for the next.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for the full raw objects (default). Use `clean` for a trimmed subset (media url, cover, stats, music, \u2026).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/stories","returns":"`username`, `next_cursor`, `has_more`, `count`, and a `stories` array. Raw TikTok objects by default; trimmed objects with `format=clean`.","url":"https://dev.omar-thing.site/api/v1/stories"},{"auth_required":true,"category":"Content","description":"List the videos a TikTok user has reposted (one raw page per call, cursor-paginated).","example_request":"https://dev.omar-thing.site/api/v1/reposts?username=tiktok&cursor=0&with_repost_date=1&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":19,"has_more":true,"next_cursor":"20","reposts":[{"...":"many more raw fields","author":{"...":"more author fields","nickname":"Creator","uid":"6700000000000000000","unique_id":"creator"},"aweme_id":"7460000000000000000","aweme_type":0,"create_time":1736900000,"desc":"Reposted video caption #fyp","statistics":{"comment_count":1200,"digg_count":84000,"play_count":1200000,"share_count":5400},"video":{"...":"more video fields","cover":{"url_list":["https://p16-sign.../cover.jpeg"]},"play_addr":{"url_list":["https://v16-webapp.../video.mp4"]}}},{"...":"18 more items"}],"username":"tiktok"},"note":"Default (raw) response \u2014 full TikTok video objects (trimmed with \u2026 ; each item has many more fields). Add ?format=clean for a small subset.","status":"success"},"method":"GET","name":"reposts","parameters":[{"description":"TikTok username, @handle, or profile URL.","example":"tiktok","name":"username","required":true,"type":"string"},{"description":"Page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response for the next.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Set to 1 to also return `repost_date` (unix) per item \u2014 the moment the user reposted it, which the plain list does not carry. Costs one extra upstream call per page; items TikTok has no record for come back without the field.","example":"1","name":"with_repost_date","required":false,"type":"string"},{"description":"Omit for the full raw objects (default). Use `clean` for a trimmed subset (id, desc, urls, author, stats).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/reposts","returns":"`username`, `source` (`web` or `mobile`), `next_cursor`, `has_more`, `count`, and a `reposts` array. Raw TikTok video objects by default (their field names differ per `source`); trimmed objects with `format=clean`.","url":"https://dev.omar-thing.site/api/v1/reposts"},{"auth_required":true,"category":"Content","description":"Get a TikTok user's highlights \u2014 all collections and the stories inside each.","example_request":"https://dev.omar-thing.site/api/v1/highlights?username=tiktok&format=clean&key=YOUR_API_KEY","example_response":{"data":{"collections":[{"collection_id":"7300000000000000000","cover":"https://p16-sign.../cover.jpeg","stories":[{"...":"many more raw fields","aweme_id":"7460000000000000000","create_time":1736900000,"desc":"","statistics":{"digg_count":320,"play_count":5000},"video":{"...":"more video fields","play_addr":{"url_list":["https://v16-webapp.../v.mp4"]}}},{"...":"7 more stories"}],"title":"Travel","total_stories":8},{"...":"1 more collection"}],"sec_uid":"MS4wLjABAAAA...","total_collections":2,"total_stories":14,"username":"someuser"},"note":"Default (raw) response \u2014 each story is a full TikTok aweme object (trimmed with \u2026 here). Add ?format=clean for a small subset.","status":"success"},"method":"GET","name":"highlights","parameters":[{"description":"TikTok username, @handle, or profile URL.","example":"tiktok","name":"username","required":true,"type":"string"},{"description":"Omit for the full raw story objects (default). Use `clean` for a trimmed subset (urls, cover, music, stats).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/highlights","returns":"`username`, `sec_uid`, `total_collections`, `total_stories`, and a `collections` array; each collection has `collection_id`, `title`, `cover`, and a `stories` array (raw objects, or trimmed with `format=clean`).","url":"https://dev.omar-thing.site/api/v1/highlights"},{"auth_required":true,"category":"Content","description":"Sound/music details + the videos that use it (one raw page per call, cursor-paginated). Pass a TikTok music id.","example_request":"https://dev.omar-thing.site/api/v1/music?id=7352471823478459168&cursor=0&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":14,"has_more":true,"music":{"...":"more (raw music_info by default)","author":"delaudios","music_id":"7352471823478459168","play_url":"https://sf16-ies-music.tiktokcdn.com/obj/.../x.mp3","title":"original sound - delaudioss","user_count":3334984},"next_cursor":"12","videos":[{"...":"raw video object","aweme_id":"76499...","desc":"\u2026"}]},"status":"success"},"method":"GET","name":"music","parameters":[{"description":"TikTok sound/music id (e.g. from a video's music object).","example":"7352471823478459168","name":"id","required":true,"type":"string"},{"description":"Video page cursor. Omit (or 0) for the first page; pass the `next_cursor` from the previous response for the next.","example":"0","name":"cursor","required":false,"type":"string"},{"description":"Omit for raw objects (default). Use `clean` for a trimmed sound subset + trimmed video objects.","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/music","returns":"`music` (raw `music_info`, or trimmed with format=clean), `next_cursor`, `has_more`, `count`, and a `videos` array of the aweme objects using the sound.","url":"https://dev.omar-thing.site/api/v1/music"},{"auth_required":true,"category":"Content","description":"Full info for a TikTok video by id or URL (raw aweme_detail, or clean subset).","example_request":"https://dev.omar-thing.site/api/v1/video_info?video=7626095794604576016&format=clean&key=YOUR_API_KEY","example_response":{"data":{"author":{"instagram":null,"nickname":"Creator","region":"US","sec_uid":"MS4wLjAB...","signature":"bio text","user_id":"6700000000000000000","username":"creator","verified":false,"youtube":null},"countries":{"content_country":"US","current_country":"US"},"create_date":"2025-01-15T03:33:20+00:00","create_time":1736900000,"desc":"video caption #fyp","flags":{"allow_comment":true,"allow_download":true,"allow_duet":true,"allow_stitch":true,"is_ad":false,"is_deleted":false,"is_paid":false,"is_private":false,"is_top":false,"under_review":false},"hashtags":["fyp"],"mentions":["6700000000000000001"],"music":{"author":"creator","duration_s":15,"id":"7460000000000000000","is_original":true,"title":"original sound","url":"https://sf16.../music.mp3"},"region":"US","share_url":"https://www.tiktok.com/@creator/video/7626095794604576016","stats":{"comments":1200,"downloads":900,"likes":84000,"reposts":12,"saves":3100,"shares":5400,"views":1200000},"video":{"cover":"https://p16-sign.../cover.jpeg","duration_ms":15400,"dynamic_cover":"https://p16-sign.../dynamic.webp","has_watermark":true,"height":1024,"origin_cover":"https://p16-sign.../origin.jpeg","ratio":"540p","width":576},"video_id":"7626095794604576016"},"note":"Default (raw) response \u2014 the full TikTok aweme_detail object. Add ?format=clean for the organized subset shown here.","status":"success"},"method":"GET","name":"video_info","parameters":[{"description":"Video id, or any TikTok video/photo URL (short links OK).","encode":false,"example":"7626095794604576016","name":"video","required":true,"type":"string"},{"description":"Omit for the full raw `aweme_detail` (default). Use `clean` for a trimmed subset (desc, author, stats, music, hashtags, and country signals).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/video_info","returns":"Raw `aweme_detail` by default; with `format=clean`: `video_id`, `desc`, `share_url`, `hashtags`, `mentions`, `countries`, plus `video` (dimensions/covers), `music`, `author` (identity/links), `stats`, and `flags` (download/duet/stitch/comment + ad/private/etc).","url":"https://dev.omar-thing.site/api/v1/video_info"},{"auth_required":true,"category":"Content","description":"Get a TikTok video's CDN download URLs per quality (+ no-watermark) by id or URL.","example_request":"https://dev.omar-thing.site/api/v1/video_download?video=7626095794604576016&key=YOUR_API_KEY","example_response":{"data":{"author":"creator","best_url":"https://v16-webapp.../1080p.mp4","cover":"https://p16-sign.../cover.jpeg","desc":"video caption #fyp","download_url":"https://v16-webapp.../download.mp4","duration_ms":15400,"image_count":0,"images":[],"music_url":"https://sf16.../music.mp3","no_watermark_url":"https://v16-webapp.../nowm.mp4","play_url":"https://v16-webapp.../play.mp4","qualities":[{"bitrate":2500000,"gear":"adapt_lowest_1080_1","height":1920,"quality_type":1,"size_bytes":4820000,"url":"https://v16-webapp.../1080p.mp4","width":1080},{"...":"lower qualities"}],"type":"video","video_id":"7626095794604576016"},"note":"`type` is 'video' or 'slideshow'. A video fills best_url/qualities; a photo post fills images[] instead (video fields are empty).","status":"success"},"method":"GET","name":"video_download","parameters":[{"description":"Video id, or any TikTok video/photo URL (short links OK).","encode":false,"example":"7626095794604576016","name":"video","required":true,"type":"string"}],"path":"/api/v1/video_download","returns":"`type` ('video' or 'slideshow'), `video_id`, `desc`, `author`, `cover`, `music_url`. For videos: `best_url`, `no_watermark_url`, `play_url`, `download_url`, and `qualities` (gear, bitrate, w/h, size_bytes, url) best-first. For photo posts: `image_count` + `images` (no-watermark, with w/h); the video fields are empty.","url":"https://dev.omar-thing.site/api/v1/video_download"},{"auth_required":true,"category":"Live","description":"Get a user's live room_id by username (null if they're not live right now).","example_request":"https://dev.omar-thing.site/api/v1/room_id?username=tiktok&key=YOUR_API_KEY","example_response":{"data":{"is_live":true,"room_id":"7649810043075971853","username":"someuser"},"status":"success"},"method":"GET","name":"room_id","parameters":[{"description":"TikTok username, @handle, or profile URL.","example":"tiktok","name":"username","required":true,"type":"string"}],"path":"/api/v1/room_id","returns":"`username`, `is_live` (bool), and `room_id` (string when live, else null).","url":"https://dev.omar-thing.site/api/v1/room_id"},{"auth_required":true,"category":"Live","description":"Check if a TikTok user is live and get the stream CDN URLs (HLS + FLV) per quality.","example_request":"https://dev.omar-thing.site/api/v1/live?username=tiktok&room_id=7649810043075971853&key=YOUR_API_KEY","example_response":{"data":{"live_info":{"age_restricted":false,"cover_url":"https://p16-sign.../cover.jpeg","owner_user_id":"6700000000000000000","room_id":"7460000000000000000","status":"LIVE","third_party":false,"title":"come hang out","viewers":1284},"streams":[{"bitrate":1500000,"codec":"h264","flv_url":"https://pull-flv-...tiktokcdn.com/.../stream.flv","hls_url":"https://pull-hls-...tiktokcdn.com/.../stream.m3u8","quality":"ORIGIN","resolution":"720x1280"},{"bitrate":900000,"codec":"h264","flv_url":"...","hls_url":"...","quality":"HD","resolution":"540x960"},{"...":"more qualities (sd, ld, ao)"}],"user_info":{"avatar":"https://p16-sign.../avatar.jpeg","nickname":"Some User","sec_uid":"MS4wLjABAAAA...","user_id":"6700000000000000000","username":"someuser"},"username":"someuser"},"note":"When the user isn't live, live_info.status is OFFLINE and streams is [].","status":"success"},"method":"GET","name":"live","parameters":[{"description":"TikTok username, @handle, or profile URL. (Use this OR room_id.)","example":"tiktok","name":"username","required":false,"type":"string"},{"description":"TikTok live room id (e.g. from /room_id). (Use this OR username.)","example":"7649810043075971853","name":"room_id","required":false,"type":"string"}],"path":"/api/v1/live","returns":"`username`, `live_info` (status LIVE/OFFLINE, room_id, title, viewers, cover_url, age_restricted, third_party), `user_info`, and a `streams` array \u2014 each with `quality`, `hls_url`, `flv_url`, `resolution`, `bitrate`, `codec`.","url":"https://dev.omar-thing.site/api/v1/live"},{"auth_required":true,"category":"Live","description":"Get a user's most recent live room by username \u2014 live now OR already ended \u2014 with its stats, duration, and top_fans (top gifters + how much each spent).","example_request":"https://dev.omar-thing.site/api/v1/last_live?username=tiktok&key=YOUR_API_KEY","example_response":{"data":{"cover_url":"https://p16-sign.../cover.jpeg","duration_seconds":1349,"ended_at":1782642596,"is_live_now":false,"owner":{"avatar":"https://p16-sign.../avatar.jpeg","bio":"...","followers":7760045,"following":1231,"nickname":"Some User","sec_uid":"MS4wLjABAAAA...","user_id":"6923684579661169666","username":"someuser","verified":false},"pk_battle":null,"room_id":"7656385784412457744","room_status":4,"share_url":"https://m.tiktok.com/share/live/7656385784412457744/","started_at":1782641247,"stats":{"new_followers":4752,"replay_viewers":98227,"shares":0,"total_entered":131152,"viewers_now":7},"title":"","top_fans":[{"avatar":"https://p16-sign.../avatar.jpeg","nickname":"Top Fan","sec_uid":"MS4wLjABAAAA...","spent":7004,"user_id":"6...","username":"topfan"}],"username":"someuser"},"status":"success"},"method":"GET","name":"last_live","parameters":[{"description":"TikTok username, @handle, or profile URL.","example":"tiktok","name":"username","required":true,"type":"string"}],"path":"/api/v1/last_live","returns":"`username`, `is_live_now` (bool), `room_status` (2=live now, 4=ended), `room_id`, `title`, `started_at`/`ended_at`/`duration_seconds`, `cover_url`, `share_url`, `stats` (viewers_now, total_entered, replay_viewers, new_followers, shares), `owner` (identity + followers + bio), `pk_battle` (rival anchor id or null), and `top_fans` \u2014 an array of {spent, username, nickname, user_id, sec_uid, avatar}.","url":"https://dev.omar-thing.site/api/v1/last_live"},{"auth_required":true,"category":"Live","description":"Top viewers currently in a live stream (the online-audience ranking, by contribution). Pass a room_id from /top_live or /live_room.","example_request":"https://dev.omar-thing.site/api/v1/live_audience?room_id=7649767224147725070&anchor_id=6956309222439830533&format=clean&key=YOUR_API_KEY","example_response":{"data":{"count":99,"viewers":[{"avatar":"https://...","followers":968,"nickname":"Kandiee","rank":1,"score":"9K+","user_id":"67...","username":"kandieekane74"},{"...":"more (this shows format=clean; raw by default)"}]},"status":"success"},"method":"GET","name":"live_audience","parameters":[{"description":"TikTok live room id (get one from /room_id by username).","example":"7649767224147725070","name":"room_id","required":true,"type":"string"},{"description":"The streamer's user id (improves accuracy; optional).","example":"6956309222439830533","name":"anchor_id","required":false,"type":"string"},{"description":"Omit for the raw ranks (default). Use `clean` for a trimmed top-viewers list (rank, username, score, followers).","example":"clean","name":"format","required":false,"type":"string"}],"path":"/api/v1/live_audience","returns":"`count` and `viewers` \u2014 the raw rank objects by default, or trimmed {rank, username, nickname, user_id, score, followers, avatar} with format=clean.","url":"https://dev.omar-thing.site/api/v1/live_audience"},{"auth_required":true,"category":"Live","description":"Live chat & events of a LIVE room (comments, gifts, joins, likes). Pass a room_id (get one from /room_id by username). Poll with next_cursor to follow along.","example_request":"https://dev.omar-thing.site/api/v1/live_chat?room_id=7649810043075971853&cursor=0&key=YOUR_API_KEY","example_response":{"data":{"count":2,"messages":[{"nickname":"naruto cm","text":"juegapy","type":"comment","user_id":"73...","username":"wilson.cohene"},{"nickname":"Elisa","text":"hola!","type":"comment","user_id":"71...","username":"elisaromero70"}],"next_cursor":"1781119573790_7649850316300579799_1_1_...","room_id":"7649810043075971853"},"status":"success"},"method":"GET","name":"live_chat","parameters":[{"description":"TikTok live room id (get one from /room_id by username).","example":"7649810043075971853","name":"room_id","required":true,"type":"string"},{"description":"Omit (or 0) for the latest batch; pass the previous response's `next_cursor` to get newer events. Poll every ~1-2s to follow the chat live.","example":"0","name":"cursor","required":false,"type":"string"}],"path":"/api/v1/live_chat","returns":"`room_id`, `next_cursor`, `count`, and a `messages` array of comments. Each has `type` (\"comment\"), `username`, `nickname`, `user_id`, and `text` (what they typed).","url":"https://dev.omar-thing.site/api/v1/live_chat"},{"auth_required":true,"category":"Live","description":"LIVE chat pushed to you over one open SSE connection instead of polling. Same events as /live_chat (comments, joins, likes, gifts). Optional alternative \u2014 /live_chat polling still works. Duplicate events are removed automatically. Auto-closes after 10 min (or 15000 events), then asks you to reconnect. Each API key may hold up to 3 live streams at once (chat+gifts).","example_request":"https://dev.omar-thing.site/api/v1/live_chat_stream?room_id=7649810043075971853&key=YOUR_API_KEY","method":"GET","name":"live_chat_stream","parameters":[{"description":"TikTok live room id (get one from /room_id by username).","example":"7649810043075971853","name":"room_id","required":true,"type":"string"}],"path":"/api/v1/live_chat_stream","returns":"An `text/event-stream` (SSE). Events: `open` (limits info once at start), `message` (one comment \u2014 `username`, `nickname`, `user_id`, `text`), `limit` (stream hit the 10-min cap; reconnect), `error` (room offline). Connect with EventSource; no cursor needed \u2014 the server tracks it. Plain JSON polling? use /live_chat instead.","url":"https://dev.omar-thing.site/api/v1/live_chat_stream"},{"auth_required":true,"category":"Live","description":"Gifts being sent in a LIVE room right now (sender, gift name, coins, combo). Pass a room_id (get one from /room_id by username). Poll with next_cursor.","example_request":"https://dev.omar-thing.site/api/v1/live_gifts?room_id=7649810043075971853&cursor=0&key=YOUR_API_KEY","example_response":{"data":{"count":2,"gifts":[{"count":1,"diamonds":6,"gift":"Divine Fingers","gift_id":118812,"nickname":"MA","text":"MA: gifted the host 1 Divine Fingers","user_id":"70...","username":"ma_qahtaney","value":6},{"count":7,"diamonds":1,"gift":"Rose","gift_id":5655,"nickname":"\u2661","text":"\u2661: gifted the host 7 Rose","user_id":"70...","username":"woow_84","value":7}],"next_cursor":"1781120933723_7649856157456119073_1_1_...","room_id":"7649810043075971853"},"status":"success"},"method":"GET","name":"live_gifts","parameters":[{"description":"TikTok live room id (get one from /room_id by username).","example":"7649810043075971853","name":"room_id","required":true,"type":"string"},{"description":"Omit (or 0) for the latest batch; pass the previous response's `next_cursor` for newer gifts. Poll every ~1-2s.","example":"0","name":"cursor","required":false,"type":"string"}],"path":"/api/v1/live_gifts","returns":"`room_id`, `next_cursor`, `count`, and a `gifts` array. Each gift has `username`, `nickname`, `user_id`, `gift` (name), `gift_id`, `diamonds` (coin cost each), `count` (combo), `value` (diamonds\u00d7count), and `text` (a ready 'X gifted the host N Gift' line).","url":"https://dev.omar-thing.site/api/v1/live_gifts"},{"auth_required":true,"category":"Live","description":"LIVE gifts pushed to you over one open SSE connection instead of polling. Same gifts as /live_gifts (sender, gift, coins, combo). Optional alternative \u2014 /live_gifts polling still works. Duplicate gifts are removed automatically. Auto-closes after 10 min (or 15000 events), then asks you to reconnect. Each API key may hold up to 3 live streams at once (chat+gifts).","example_request":"https://dev.omar-thing.site/api/v1/live_gifts_stream?room_id=7649810043075971853&key=YOUR_API_KEY","method":"GET","name":"live_gifts_stream","parameters":[{"description":"TikTok live room id (get one from /room_id by username).","example":"7649810043075971853","name":"room_id","required":true,"type":"string"}],"path":"/api/v1/live_gifts_stream","returns":"An `text/event-stream` (SSE). Events: `open` (limits info once), `message` (one gift \u2014 same shape as /live_gifts items: username, gift, diamonds, count, value, text), `limit` (hit the 10-min cap; reconnect), `error` (room offline). Connect with EventSource; no cursor needed. Plain JSON polling? use /live_gifts instead.","url":"https://dev.omar-thing.site/api/v1/live_gifts_stream"},{"auth_required":true,"category":"Account Lookup","description":"Reveal a TikTok account's linked login methods/platforms.","example_request":"https://dev.omar-thing.site/api/v1/account_info?username=tiktok&key=YOUR_API_KEY","example_response":{"data":{"has_email":"Yes","has_mobile":"Yes","has_oauth":"No","has_passkey":"No","has_password":"Yes","platform":"TikTok","username":"tiktok"},"status":"success"},"method":"GET","name":"account_info","parameters":[{"description":"TikTok username or @handle.","example":"tiktok","name":"username","required":true,"type":"string"}],"path":"/api/v1/account_info","returns":"`username`, `platform`, and `has_email`/`has_mobile`/`has_oauth`/`has_passkey`/`has_password` (Yes/No).","url":"https://dev.omar-thing.site/api/v1/account_info"},{"auth_required":true,"category":"Account Actions","description":"Bulk-delete the caller's own most recent reposts using their TikTok session.","example_request":"https://dev.omar-thing.site/api/v1/del_reposts?session_id=%3Cyour_sessionid%3E&count=100&key=YOUR_API_KEY","example_response":{"data":{"deleted":100,"failed":2,"user_id":"6700000000000000000"},"status":"success"},"method":"GET","name":"del_reposts","parameters":[{"description":"Your own TikTok `sessionid` (from your account cookies). The action runs on THIS account.","example":"<your_sessionid>","name":"session_id","required":true,"type":"string"},{"description":"How many of the most recent reposts to delete (e.g. 50, 100, 1000).","example":100,"name":"count","required":true,"type":"integer"}],"path":"/api/v1/del_reposts","returns":"`user_id`, `deleted` (how many were removed), and `failed`.","url":"https://dev.omar-thing.site/api/v1/del_reposts"},{"auth_required":true,"category":"Account Actions","description":"Bulk-remove accounts the caller follows (via block) using their TikTok session.","example_request":"https://dev.omar-thing.site/api/v1/del_following?session_id=%3Cyour_sessionid%3E&count=100&key=YOUR_API_KEY","example_response":{"data":{"failed":1,"removed":100,"user_id":"6700000000000000000"},"status":"success"},"method":"GET","name":"del_following","parameters":[{"description":"Your own TikTok `sessionid` (from your account cookies). The action runs on THIS account.","example":"<your_sessionid>","name":"session_id","required":true,"type":"string"},{"description":"How many followed accounts to remove (e.g. 50, 100, 1000). Removal uses block, which also blocks each account.","example":100,"name":"count","required":true,"type":"integer"}],"path":"/api/v1/del_following","returns":"`user_id`, `removed` (how many were removed/blocked), and `failed`.","url":"https://dev.omar-thing.site/api/v1/del_following"},{"auth_required":true,"category":"Utilities","description":"Expand a TikTok share/short link and extract the user, video, and share info.","example_request":"https://dev.omar-thing.site/api/v1/resolve_url?url=https://vt.tiktok.com/ZSxxxxxxx/&key=YOUR_API_KEY","example_response":{"data":{"device_type":"iOS","landing_url":"https://www.tiktok.com/@user/video/7460000000000000000?...","sharer_language":"en","sharer_region":"US","timestamp":"2026-01-15T12:34:56+00:00","user_id":"6700000000000000000","video_id":"7460000000000000000"},"status":"success"},"method":"GET","name":"resolve_url","parameters":[{"description":"A TikTok share/short link (vt.tiktok.com, vm.tiktok.com, or /t/\u2026).","encode":false,"example":"https://vt.tiktok.com/ZSxxxxxxx/","name":"url","placeholder":"a TikTok share link (https://vt.tiktok.com/\u2026)","prefill":false,"required":true,"type":"string"}],"path":"/api/v1/resolve_url","returns":"`user_id`, `video_id`, `timestamp`, `device_type`, `sharer_language`, `sharer_region`, and the resolved `landing_url`.","url":"https://dev.omar-thing.site/api/v1/resolve_url"},{"auth_required":true,"category":"Other","description":"Manage the TikTok accounts your key tracks for auto-recording. GET lists them (with live status); POST {username} adds one (up to your limit); DELETE {username} stops tracking one.","example_request":"https://dev.omar-thing.site/api/v1/recorder_accounts?username=purrglitter&live=1&key=YOUR_API_KEY&key=YOUR_API_KEY","method":"GET/POST/DELETE","name":"recorder_accounts","parameters":[{"description":"TikTok username/@handle/URL. Required for POST and DELETE.","example":"purrglitter","name":"username","required":false,"type":"string"},{"description":"GET only: 0 to skip the live check (faster; is_live=null).","example":"1","name":"live","required":false,"type":"integer"},{"description":"Your API key (query ?key=, ?api_key=, or header X-API-Key).","example":"YOUR_API_KEY","name":"key","required":true,"type":"string"}],"path":"/api/v1/recorder_accounts","returns":"GET: `max_accounts`, `count`, `accounts[]` (username, nickname, avatar, is_live, added_at). POST: the added `account`. DELETE: `removed`.","url":"https://dev.omar-thing.site/api/v1/recorder_accounts"},{"auth_required":true,"category":"Other","description":"Keep a recording permanently (bookmark) so retention never deletes it, or clear the bookmark. `value` defaults to true.","example_request":"https://dev.omar-thing.site/api/v1/recorder_bookmark?id=42&value=true&key=YOUR_API_KEY&key=YOUR_API_KEY","method":"POST","name":"recorder_bookmark","parameters":[{"description":"The recording id (from /recorder/recordings).","example":"42","name":"id","required":true,"type":"integer"},{"description":"true to bookmark (default), false to un-bookmark.","example":"true","name":"value","required":false,"type":"boolean"},{"description":"Your API key.","example":"YOUR_API_KEY","name":"key","required":true,"type":"string"}],"path":"/api/v1/recorder_bookmark","returns":"`id` and the new `bookmarked` state.","url":"https://dev.omar-thing.site/api/v1/recorder_bookmark"},{"auth_required":true,"category":"Other","description":"Get a temporary signed URL to play one of your recordings (video + thumbnail). Links expire after an hour.","example_request":"https://dev.omar-thing.site/api/v1/recorder_play?id=42&key=YOUR_API_KEY&key=YOUR_API_KEY","method":"GET","name":"recorder_play","parameters":[{"description":"The recording id (from /recorder/recordings).","example":"42","name":"id","required":true,"type":"integer"},{"description":"Your API key (query ?key=, ?api_key=, or header X-API-Key).","example":"YOUR_API_KEY","name":"key","required":true,"type":"string"}],"path":"/api/v1/recorder_play","returns":"`video_url`, `download_url` (same file, but saves instead of playing), `thumb_url` (may be null), `expires_in`, plus the recording's `filename`, `duration_sec`, `size_bytes`.","url":"https://dev.omar-thing.site/api/v1/recorder_play"},{"auth_required":true,"category":"Other","description":"List the live recordings captured for the accounts your key tracks, newest first. Optionally filter by a tracked username.","example_request":"https://dev.omar-thing.site/api/v1/recorder_recordings?username=purrglitter&limit=50&offset=0&key=YOUR_API_KEY&key=YOUR_API_KEY","method":"GET","name":"recorder_recordings","parameters":[{"description":"Limit to one tracked username. Omit for all.","example":"purrglitter","name":"username","required":false,"type":"string"},{"description":"Max rows to return (1-500). Omit for all.","example":"50","name":"limit","required":false,"type":"integer"},{"description":"Rows to skip (for pagination). Default 0.","example":"0","name":"offset","required":false,"type":"integer"},{"description":"Your API key (query ?key=, ?api_key=, or header X-API-Key).","example":"YOUR_API_KEY","name":"key","required":true,"type":"string"}],"path":"/api/v1/recorder_recordings","returns":"`count` (returned), `total` (all matching), `limit`, `offset`, and `recordings` \u2014 each with a signed `thumb_url`, `expires_at`, `room_id`, and `part`/`part_count` (segments of one broadcast, same room_id, split on a CDN drop \u2014 group by room_id, order by `part`). `events_url` (when present) is the synced chat + gift track: JSONL, one event per line, each with `t` = ms from the start of the video.","url":"https://dev.omar-thing.site/api/v1/recorder_recordings"},{"auth_required":true,"category":"Your Key","description":"Check your own key status: plan, remaining quota, and expiry. Does not count against your rate limit.","example_request":"https://dev.omar-thing.site/api/v1/usage?key=YOUR_API_KEY&key=YOUR_API_KEY","example_response":{"data":{"allowed_endpoints":"*","days_remaining":31,"expires_at":"2026-07-09T17:45:35+00:00","limits":{"per_day":10000,"per_minute":40},"plan":"Basic","status":"active","usage":{"day":{"remaining":9873,"resets_in":43200,"used":127},"minute":{"remaining":37,"resets_in":45,"used":3}}},"status":"success"},"method":"GET","name":"usage","parameters":[{"description":"Your API key (query ?key=, ?api_key=, or header X-API-Key).","example":"YOUR_API_KEY","name":"key","required":true,"type":"string"}],"path":"/api/v1/usage","returns":"`plan`, `status`, `expires_at`, `days_remaining`, `limits`, and `usage` (per-minute and per-day used/remaining + reset seconds).","url":"https://dev.omar-thing.site/api/v1/usage"}],"guide":{"errors":{"common_codes":{"ENDPOINT_NOT_ALLOWED":"403 \u2014 your plan doesn't include this endpoint","FETCH_FAILED":"424 \u2014 upstream fetch from TikTok failed, retry","INVALID_KEY":"403 \u2014 the key does not exist","KEY_DISABLED":"403 \u2014 the key was disabled","KEY_EXPIRED":"403 \u2014 the key/subscription expired","MISSING_KEY":"401 \u2014 no API key was provided","NOT_FOUND":"404 \u2014 the requested TikTok resource wasn't found","RATE_LIMIT_EXCEEDED":"429 \u2014 slow down (see Retry-After)"},"description":"Errors use the envelope above with an HTTP status and a stable `code`."},"formats":{"clean":"?format=clean \u2014 trimmed smart fields (and nested replies for comments)","description":"Data endpoints return TikTok's full RAW objects by default \u2014 nothing is removed. Add ?format=clean for a smaller, friendly subset of the most useful fields.","raw":"default \u2014 complete objects exactly as TikTok returns them"},"pagination":{"description":"List endpoints (followers, following, comments, stories) return ONE page per call. To get the next page, send the `next_cursor` you got back as `cursor`. Stop when `has_more` is false.","fields":{"count":"number of items in this page","has_more":"boolean \u2014 true if more pages remain","next_cursor":"string \u2014 pass it back as ?cursor= for the next page"}},"rate_limits":{"check_your_usage":"https://dev.omar-thing.site/api/v1/usage?key=YOUR_API_KEY","description":"Each plan has a per-minute and per-day limit. Exceeding it returns HTTP 429 with a Retry-After header (seconds)."}},"response_format":{"description":"Every response is JSON with this envelope. `request_id` is unique per call (also in the X-Request-ID header) \u2014 quote it when reporting an issue.","error":{"code":"<ERROR_CODE>","message":"<reason>","request_id":"<id>","status":"error"},"success":{"data":"<endpoint-specific object>","request_id":"<id>","status":"success"}}},"request_id":"6962257d1fbc49b4a63a413c338f1bd9","status":"success"}
