curl --request GET \
--url https://external-api.streamforge.com/creator-requests/{request_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://external-api.streamforge.com/creator-requests/{request_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://external-api.streamforge.com/creator-requests/{request_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://external-api.streamforge.com/creator-requests/{request_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://external-api.streamforge.com/creator-requests/{request_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://external-api.streamforge.com/creator-requests/{request_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://external-api.streamforge.com/creator-requests/{request_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"payload": {
"request_id": "cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"status": "not_found",
"stage": "done",
"progress": 100,
"message": "Creator not found on this platform",
"platform": "youtube",
"handle": "examplecreator",
"profile_id": null,
"parts": {
"profile": "not_found",
"audience": "unavailable"
},
"audience_reason": null,
"poll_after_seconds": null,
"status_url": "/creator-requests/cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"result": null
},
"meta": {
"received_at": "2026-10-13T12:00:20.000Z",
"credits_charged": 0
}
}{
"payload": {
"request_id": "cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"status": "processing",
"stage": "analyzing_audience",
"progress": 70,
"message": "Analyzing the audience",
"platform": "twitch",
"handle": "streamer123",
"profile_id": "484563826",
"parts": {
"profile": "ready",
"audience": "pending"
},
"audience_reason": null,
"poll_after_seconds": 3,
"status_url": "/creator-requests/cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"result": {
"profile": {
"platform": "twitch",
"profile_id": "484563826",
"name": "streamer123",
"display_name": "Streamer 123",
"url": "https://twitch.tv/streamer123"
},
"audience": null,
"audience_updated_at": null
}
},
"meta": {
"received_at": "2026-10-13T12:00:10.000Z",
"credits_charged": 1
}
}{
"error": {
"status": 123,
"message": "<string>",
"code": "<string>"
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"end_user_limit": {
"cap": 123,
"remaining": 123,
"resets_at": "2023-11-07T05:31:56Z"
},
"active_request": {
"request_id": "<string>",
"status_url": "<string>"
}
}
}{
"error": {
"status": 401,
"message": "API key is required"
},
"meta": {
"request_id": "5e7c0137-1ed3-4b4b-8e5f-3d9cf00f7ac4"
}
}{
"error": {
"status": 403,
"message": "Invalid API key"
},
"meta": {
"request_id": "5e7c0137-1ed3-4b4b-8e5f-3d9cf00f7ac4"
}
}{
"error": {
"message": "Creator request not found",
"status": 404,
"code": "creator_request_not_found"
},
"meta": {
"request_id": "5e7c0137-1ed3-4b4b-8e5f-3d9cf00f7ac4"
}
}{
"error": {
"status": 429,
"message": "Rate limit exceeded"
},
"meta": {
"request_id": "5e7c0137-1ed3-4b4b-8e5f-3d9cf00f7ac4"
}
}{
"error": {
"status": 123,
"message": "<string>",
"code": "<string>"
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"end_user_limit": {
"cap": 123,
"remaining": 123,
"resets_at": "2023-11-07T05:31:56Z"
},
"active_request": {
"request_id": "<string>",
"status_url": "<string>"
}
}
}Get a creator request
Read a request made with POST /creator-requests. The body is the same as that endpoint’s.
While the request is in progress the answer is 202 with Retry-After and Location; wait, then read
it again. Once the request has finished the answer is 200, and later reads return the same outcome.
See POST /creator-requests for what each status and each parts.audience value means.
result.profile is filled in as soon as the profile can be served, which can be while the audience
analysis is still in progress.
Reading a request costs no credits. Each read does count towards your per-minute rate limit, so
wait poll_after_seconds between reads.
A request can be read only with the API key that created it; with any other key the answer is 404. A
request stays readable for 7 days.
Available with a Streamforge API key only.
curl --request GET \
--url https://external-api.streamforge.com/creator-requests/{request_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://external-api.streamforge.com/creator-requests/{request_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://external-api.streamforge.com/creator-requests/{request_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://external-api.streamforge.com/creator-requests/{request_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://external-api.streamforge.com/creator-requests/{request_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://external-api.streamforge.com/creator-requests/{request_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://external-api.streamforge.com/creator-requests/{request_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"payload": {
"request_id": "cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"status": "not_found",
"stage": "done",
"progress": 100,
"message": "Creator not found on this platform",
"platform": "youtube",
"handle": "examplecreator",
"profile_id": null,
"parts": {
"profile": "not_found",
"audience": "unavailable"
},
"audience_reason": null,
"poll_after_seconds": null,
"status_url": "/creator-requests/cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"result": null
},
"meta": {
"received_at": "2026-10-13T12:00:20.000Z",
"credits_charged": 0
}
}{
"payload": {
"request_id": "cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"status": "processing",
"stage": "analyzing_audience",
"progress": 70,
"message": "Analyzing the audience",
"platform": "twitch",
"handle": "streamer123",
"profile_id": "484563826",
"parts": {
"profile": "ready",
"audience": "pending"
},
"audience_reason": null,
"poll_after_seconds": 3,
"status_url": "/creator-requests/cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"result": {
"profile": {
"platform": "twitch",
"profile_id": "484563826",
"name": "streamer123",
"display_name": "Streamer 123",
"url": "https://twitch.tv/streamer123"
},
"audience": null,
"audience_updated_at": null
}
},
"meta": {
"received_at": "2026-10-13T12:00:10.000Z",
"credits_charged": 1
}
}{
"error": {
"status": 123,
"message": "<string>",
"code": "<string>"
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"end_user_limit": {
"cap": 123,
"remaining": 123,
"resets_at": "2023-11-07T05:31:56Z"
},
"active_request": {
"request_id": "<string>",
"status_url": "<string>"
}
}
}{
"error": {
"status": 401,
"message": "API key is required"
},
"meta": {
"request_id": "5e7c0137-1ed3-4b4b-8e5f-3d9cf00f7ac4"
}
}{
"error": {
"status": 403,
"message": "Invalid API key"
},
"meta": {
"request_id": "5e7c0137-1ed3-4b4b-8e5f-3d9cf00f7ac4"
}
}{
"error": {
"message": "Creator request not found",
"status": 404,
"code": "creator_request_not_found"
},
"meta": {
"request_id": "5e7c0137-1ed3-4b4b-8e5f-3d9cf00f7ac4"
}
}{
"error": {
"status": 429,
"message": "Rate limit exceeded"
},
"meta": {
"request_id": "5e7c0137-1ed3-4b4b-8e5f-3d9cf00f7ac4"
}
}{
"error": {
"status": 123,
"message": "<string>",
"code": "<string>"
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"end_user_limit": {
"cap": 123,
"remaining": 123,
"resets_at": "2023-11-07T05:31:56Z"
},
"active_request": {
"request_id": "<string>",
"status_url": "<string>"
}
}
}Authorizations
Your API key. Include it in the x-api-key header for all requests.
Headers
Only for API keys that carry a per-end-user allowance, which must send it on every call; other keys
can leave it out. An opaque identifier for the person the request is made for: 8 to 128 characters of
A-Z, a-z, 0-9, _ and -. Send a stable pseudonymous value, not an IP address or other personal
data. A request can be read back only with the value it was created with.
^[A-Za-z0-9_-]{8,128}$"8f2c1d7ab0e94c53"
Path Parameters
The request_id returned by POST /creator-requests
"cr_3f9a1c2b4d5e6f708192a3b4c5d6e7f8"

