TikTok comments
Fetch a best-effort paginated slice of public rendered comments from a TikTok video page.
POST
/v1/tiktok/comments Request Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cursor | body | string | No | Zero-based pagination cursor returned as next_cursor from the previous response. |
| max_comments | body | integer | No | Maximum number of public comments to collect from the rendered page. |
| url | body | string | No | Full public TikTok video URL. |
| username | body | string | No | TikTok username, with or without the leading @. |
| video_id | body | string | No | TikTok numeric video id. Use with username when url is not provided. |
Response Structure
Async kickoff response
Polled run result response
Sync response
Declared output schema
Code Examples
Async + polling
RUN=$(curl -s -X POST "https://api.browsable.app/v1/tiktok/comments" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cursor":"30","max_comments":50,"url":"https://www.tiktok.com/@tiktok/video/7641647587056962846","username":"tiktok","video_id":"7641647587056962846"}')
RUN_ID=$(echo "$RUN" | jq -r '.run_id')
POLL_DELAY=3
while true; do
RESULT=$(curl -s -H "Authorization: Bearer YOUR_API_KEY" "https://api.browsable.app/v1/runs/$RUN_ID")
STATUS=$(echo "$RESULT" | jq -r '.run_status')
if [[ "$STATUS" =~ ^(succeeded|failed|errored|cancelled|canceled|expired)$ ]]; then
echo "$RESULT"
break
fi
sleep "$(awk "BEGIN { print $POLL_DELAY * (0.9 + ($RANDOM % 21) / 100) }")"
POLL_DELAY=$((POLL_DELAY < 30 ? POLL_DELAY * 2 : 30))
[ "$POLL_DELAY" -gt 30 ] && POLL_DELAY=30
doneSync
curl -X POST "https://api.browsable.app/v1/tiktok/comments" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cursor":"30","max_comments":50,"url":"https://www.tiktok.com/@tiktok/video/7641647587056962846","username":"tiktok","video_id":"7641647587056962846","_run":{"async":false}}'