Twitch API endpoint
Returns mixed category and channel matches for a query -- live channels include current viewer count and stream title. Sourced from Twitch's own search-typeahead surface (a capped suggestion list, not a fully paginated results page).
/twitch/searchQuery parameters:
query (required) — search text (category/game name or channel name).limit (optional) — number of results to return. Defaults to 10,
clamped to a maximum of 30.Notable response behavior:
/search results page —
results are capped to a small, ranked suggestion list rather than
paginated. It still returns complete, real category and channel data.results entry has type set to either category or channel,
with only the matching field (category or channel) populated.channel entry's viewers_count, stream_title, and game_name
are only populated when is_live is true.query returns 400 before any upstream request is made.| Field | Filled in, of 7 checked |
|---|---|
| type | 7 |
| text | 7 |
| category | 1 |
| channel | 6 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | Yes | Search text (category/game name or channel name) | valorant | |
| limit | integer | No | Number of results to return (default 10, max 30) | 10 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/twitch/search?query=valorant&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "valorant",
"count": 10,
"results": [
{
"type": "category",
"text": "VALORANT",
"category": {
"id": "516575",
"slug": "valorant",
"box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/516575-60x80.jpg"
}
},
{
"type": "channel",
"text": "VALORANT_Pacific",
"channel": {
"id": "610457628",
"login": "valorant_pacific",
"is_live": true,
"viewers_count": 3433,
"stream_title": "FS vs QTD / TS vs XIP - VCT Pacific - Stage 2 - Play Ins - Day 2",
"game_name": "VALORANT",
"profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/abba2816-c2e0-44b2-9841-49ad1660465b-profile_image-50x50.png"
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/twitch.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | twitch.SearchResponse | No | ||||
| data.count | integer | No | 10 | |||
| data.query | string | No | ||||
| data.results | array | No | ||||
| data.results[].category | twitch.SearchCategory | No | ||||
| data.results[].category.box_art_url | string | No | ||||
| data.results[].category.id | string | No | ||||
| data.results[].category.slug | string | No | valorant | |||
| data.results[].channel | twitch.SearchChannel | No | ||||
| data.results[].channel.game_name | string | No | ||||
| data.results[].channel.id | string | No | ||||
| data.results[].channel.is_live | boolean | No | true | |||
| data.results[].channel.is_verified | boolean | No | ||||
| data.results[].channel.login | string | No | ||||
| data.results[].channel.profile_image_url | string | No | ||||
| data.results[].channel.stream_title | string | No | ||||
| data.results[].channel.viewers_count | integer | No | 3361 | |||
| data.results[].text | string | No | ||||
| data.results[].type | string | No | channel | "category" or "channel" | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/twitch/search?query=valorant&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"