curl https://platform.streampixel.io/api/v1/projects/projects-status \
-H "x-api-key: [YOUR_API_KEY]"
const axios = require('axios');
const { data } = await axios.get(
'https://platform.streampixel.io/api/v1/projects/projects-status',
{ headers: { 'x-api-key': '[YOUR_API_KEY]' } }
);
console.log(`${data.totalProjects} projects:`, data.projects);
import requests
response = requests.get(
"https://platform.streampixel.io/api/v1/projects/projects-status",
headers={"x-api-key": "[YOUR_API_KEY]"},
)
print("Projects:", response.json()["projects"])
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET",
"https://platform.streampixel.io/api/v1/projects/projects-status", nil)
req.Header.Set("x-api-key", "[YOUR_API_KEY]")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("Request failed:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println("Response:", string(body))
}
import okhttp3.*;
public class ListProjects {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://platform.streampixel.io/api/v1/projects/projects-status")
.header("x-api-key", "[YOUR_API_KEY]")
.get()
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
}
{
"totalProjects": 2,
"projects": [
{
"_id": "664f1a2b3c4d5e6f7a8b9c0d",
"name": "Showroom Demo",
"status": true,
"subscriptionStatus": "active"
},
{
"_id": "664f1a2b3c4d5e6f7a8b9c0e",
"name": "Configurator EU",
"status": false,
"subscriptionStatus": "active"
}
]
}
{
"code": "API_KEY_IN_QUERY",
"message": "API keys are no longer accepted in the query string..."
}
{
"message": "Authentication required"
}
{
"message": "Access denied"
}
{
"message": "Internal server error"
}
List Projects
Retrieve every project owned by your account, authenticated with your API key in the x-api-key header.
GET
/
api
/
v1
/
projects
/
projects-status
curl https://platform.streampixel.io/api/v1/projects/projects-status \
-H "x-api-key: [YOUR_API_KEY]"
const axios = require('axios');
const { data } = await axios.get(
'https://platform.streampixel.io/api/v1/projects/projects-status',
{ headers: { 'x-api-key': '[YOUR_API_KEY]' } }
);
console.log(`${data.totalProjects} projects:`, data.projects);
import requests
response = requests.get(
"https://platform.streampixel.io/api/v1/projects/projects-status",
headers={"x-api-key": "[YOUR_API_KEY]"},
)
print("Projects:", response.json()["projects"])
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET",
"https://platform.streampixel.io/api/v1/projects/projects-status", nil)
req.Header.Set("x-api-key", "[YOUR_API_KEY]")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("Request failed:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println("Response:", string(body))
}
import okhttp3.*;
public class ListProjects {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://platform.streampixel.io/api/v1/projects/projects-status")
.header("x-api-key", "[YOUR_API_KEY]")
.get()
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
}
{
"totalProjects": 2,
"projects": [
{
"_id": "664f1a2b3c4d5e6f7a8b9c0d",
"name": "Showroom Demo",
"status": true,
"subscriptionStatus": "active"
},
{
"_id": "664f1a2b3c4d5e6f7a8b9c0e",
"name": "Configurator EU",
"status": false,
"subscriptionStatus": "active"
}
]
}
{
"code": "API_KEY_IN_QUERY",
"message": "API keys are no longer accepted in the query string..."
}
{
"message": "Authentication required"
}
{
"message": "Access denied"
}
{
"message": "Internal server error"
}
Return a list of all projects owned by the authenticated account, with the basic status of each. Use this to enumerate your projects from a server-side script, CI/CD pipeline, or monitoring job before fanning out to per-project endpoints.
Typical workflow
1
Authenticate
Send your API key in the
x-api-key request header. The account is identified by the key — no IDs needed.2
Request the list
Call
GET /projects/projects-status to retrieve every project you own.3
Use the IDs
Take each project’s
_id and pass it anywhere a projectId is required — for example, Project User Stats.Prerequisites
| Requirement | Where to get it |
|---|---|
| API Key | API authentication |
Do not put the API key in the URL. Query-string keys (
?apikey=) are rejected with 400 API_KEY_IN_QUERY — URLs are recorded in access logs, browser history, and Referer headers. A key that has ever been sent in a URL should be rotated. Send it in the x-api-key header instead.Headers
string
required
Your Streampixel API key. Identifies your account — the project list is scoped to the key’s owner.
Query parameters
string
Optional, for backward compatibility. If provided, it must be the ID of the authenticated account (the key’s owner) — any other value returns
403 Access denied. Omit it in new integrations.Response
number
The number of projects returned.
array
curl https://platform.streampixel.io/api/v1/projects/projects-status \
-H "x-api-key: [YOUR_API_KEY]"
const axios = require('axios');
const { data } = await axios.get(
'https://platform.streampixel.io/api/v1/projects/projects-status',
{ headers: { 'x-api-key': '[YOUR_API_KEY]' } }
);
console.log(`${data.totalProjects} projects:`, data.projects);
import requests
response = requests.get(
"https://platform.streampixel.io/api/v1/projects/projects-status",
headers={"x-api-key": "[YOUR_API_KEY]"},
)
print("Projects:", response.json()["projects"])
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET",
"https://platform.streampixel.io/api/v1/projects/projects-status", nil)
req.Header.Set("x-api-key", "[YOUR_API_KEY]")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("Request failed:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println("Response:", string(body))
}
import okhttp3.*;
public class ListProjects {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://platform.streampixel.io/api/v1/projects/projects-status")
.header("x-api-key", "[YOUR_API_KEY]")
.get()
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
}
{
"totalProjects": 2,
"projects": [
{
"_id": "664f1a2b3c4d5e6f7a8b9c0d",
"name": "Showroom Demo",
"status": true,
"subscriptionStatus": "active"
},
{
"_id": "664f1a2b3c4d5e6f7a8b9c0e",
"name": "Configurator EU",
"status": false,
"subscriptionStatus": "active"
}
]
}
{
"code": "API_KEY_IN_QUERY",
"message": "API keys are no longer accepted in the query string..."
}
{
"message": "Authentication required"
}
{
"message": "Access denied"
}
{
"message": "Internal server error"
}
Error reference
| Status | Message | Cause |
|---|---|---|
400 | API_KEY_IN_QUERY | The key was sent as a query parameter. Move it to the x-api-key header and rotate the key. |
401 | Authentication required | The x-api-key header is missing, or the key is invalid/rotated. |
403 | Access denied | A userId query parameter was supplied that doesn’t match the key’s account. |
500 | Internal server error | Unexpected failure. Retry; if it persists, contact support. |
Cache the results for a few minutes if you call this repeatedly. Project membership rarely changes minute-to-minute, and avoiding redundant calls keeps you well under fair-use thresholds.
Next
Project User Stats
Get live and queued user counts for a project.
Upload File API
Submit builds to a project via the API.