TikTok API endpoint
Returns one page of a place's reviews (`reviews`, full review objects: author, content, rating, tags, `server_param`) together with the score summary (`review_summary`: score and score range), the review tags (`review_tags`) and the paging token (`cursor`/`has_more`). The route uses the review-landing tab scene (`scene=7`) that the app's own review interface sends; without that scene the upstream rejects the request with `status_code 5`, which is why this family was previously unusable. `poi_id` is the place id from the place search/detail endpoints.
/tiktok/mobile/place/reviewsThe scene parameter is the unlock. The app's own review interface
(com.ss.android.ugc.aweme.poi.reviews.PoiReviewsApi) sends scene = POI_REVIEW_LANDING_2TAB (7); the
route rejects requests without it with status_code 5 "Invalid parameters". This endpoint always sends
scene=7, so callers only supply poi_id and paging/sort.
Query parameters:
poi_id: required. Place id from the place search/detail endpoints.cursor: optional. Paging token from the previous response. Default: 0.count: optional. Reviews per page, bounded at 30. Default: 20.sort_type: optional. 1 = default, 2 = recent. Default: 1.Measured 2026-10-24, poi_id=42203861086875992 (Nam Coffee):
HTTP 200, 31.9 KB, status_code 0, poi_name "Nam Coffee", 2 reviews, review_summary with the score range,
4 review_tags, cursor 20, has_more 0. Omitting scene (or sending the previously guessed parameter names)
returns status_code 5, which is why the family previously looked unusable.
Example request:
GET /api/v1/tiktok/mobile/place/reviews?poi_id=42203861086875992&count=20&sort_type=1
Example response (truncated):
{
"code": 200,
"msg": "OK",
"data": {
"reviews": [
{
"review_id": "7489...",
"content": "great coffee and friendly staff",
"author": {"nickname": "..."},
"review_source": 1
}
],
"review_summary": {"score": 4.1, "review_score_range": 5},
"review_tags": [{"en_name": "Coffee", "review_count": 3}],
"poi_name": "Nam Coffee",
"cursor": 20,
"has_more": false,
"status_code": 0
}
}
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| poi_id | string | Yes | Place id from the place search/detail endpoints | 42203861086875992 | |
| cursor | integer | No | Paging token from the previous response | ||
| count | integer | No | Reviews per page (max 30) | ||
| sort_type | integer | No | Sort order: 1 = default, 2 = recent Allowed values: 1, 2. |
curl -X GET "https://api.crawlora.net/api/v1/tiktok/mobile/place/reviews?poi_id=42203861086875992&count=10&sort_type=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"reviews": [
{
"review_id": "7489...",
"content": "great coffee and friendly staff",
"author": {
"nickname": "..."
},
"review_source": 1
}
],
"review_summary": {
"score": 4.1,
"review_score_range": 5
},
"review_tags": [
{
"en_name": "Coffee",
"review_count": 3
}
],
"poi_name": "Nam Coffee",
"cursor": 20,
"has_more": false,
"status_code": 0
}
}Request schema
No body schema
Response schema
#/definitions/tiktokmobile.placeReviewsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tiktokmobile.PlaceReviewsResponse | No | ||||
| data.collect_info | unknown | No | ||||
| data.cursor | integer | No | ||||
| data.extra | unknown | No | ||||
| data.folded_cursor | integer | No | ||||
| data.folded_has_more | boolean | No | ||||
| data.has_more | boolean | No | ||||
| data.is_hide_review_summary | boolean | No | ||||
| data.landing_tab | integer | No | ||||
| data.log_pb | unknown | No | ||||
| data.poi_id | string | No | ||||
| data.poi_name | string | No | ||||
| data.post_review_description | string | No | ||||
| data.post_review_sub_description | string | No | ||||
| data.review_summary | unknown | No | ||||
| data.review_tags | array | No | ||||
| data.reviews | array | No | ||||
| data.status_code | integer | No | ||||
| data.status_msg | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Invalid input | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/tiktok/mobile/place/reviews?poi_id=42203861086875992&count=10&sort_type=1" \
-H "x-api-key: $CRAWLORA_API_KEY"