Skip to main content

4. Backend API Reference

Base URL:

https://www.renderapi.buildcores.com

Interactive API documentation is available at:

https://www.renderapi.buildcores.com/api-docs

All endpoints except /auth/render-session and /health require Bearer auth. Session tokens are scope-gated.

4.1. POST /auth/render-session

Mints a short-lived delegated render session token. This endpoint is authenticated with your long-lived API key. See Render Session Token Flow.

4.2. GET /available-parts

Retrieves renderable parts for a specific category.

Required scope: data:read

Query parameters:

ParameterTypeRequiredDescription
categorystringYesPart category, such as GPU, CPU, or PCCase.
limitintegerNoResults per page. Default 20, max 100.
skipintegerNoNumber of results to skip. Default 0.

Example:

curl "https://www.renderapi.buildcores.com/available-parts?category=GPU&limit=2" \
-H "Authorization: Bearer <session_token>"

Response:

{
"data": {
"GPU": [
{ "id": "z7pyphm9k", "name": "ASUS GeForce RTX 5080 ASTRAL", "image": "https://..." },
{ "id": "4a0mjb360", "name": "PNY GeForce RTX 5060 Ti 16GB", "image": "https://..." }
]
},
"category": "GPU",
"pagination": {
"total": 150,
"limit": 2,
"skip": 0,
"hasNext": true,
"hasPrev": false
}
}

4.3. POST /render-build

Submits an asynchronous render job from part IDs and returns a job_id for polling.

Required scope: render:submit

The current implementation only accepts prod for the async render environment.

Request body:

FieldTypeRequiredDescription
parts{ [category]: string[] }YesPart IDs mapped by category. The object cannot be empty.
format"video" | "sprite"NoOutput format. Default is "video".
widthintegerNoCanvas width. Must be provided with height. Range 256 to 8192.
heightintegerNoCanvas height. Must be provided with width. Range 256 to 8192.
profile"cinematic" | "flat" | "fast"NoRender quality profile.
scenestringNoEnvironment scene preset.
showBackgroundbooleanNoShow the environment background.
showGridbooleanNoShow the 3D ground grid. Defaults to true unless profile is flat or fast.
winterModebooleanNoWinter visual effects. Mutually exclusive with springMode.
springModebooleanNoSpring visual effects. Mutually exclusive with winterMode.
cameraOffsetXnumberNoHorizontal camera offset. Clamped from -0.3 to 0.3.
cameraZoomnumberNoServer-side camera distance. Clamped from 0.5 to 2.0.
gridSettingsobjectNoCustom grid appearance settings.
frameQuality"standard" | "high"NoSprite frame count. standard is 72 frames; high is 144 frames.

Example:

curl -X POST "https://www.renderapi.buildcores.com/render-build" \
-H "Authorization: Bearer <session_token>" \
-H "Content-Type: application/json" \
-d '{
"parts": {
"PCCase": ["qq9jamk7c"],
"GPU": ["z7pyphm9k"],
"Motherboard": ["iwin2u9vx"],
"CPUCooler": ["62d8zelr5"]
},
"format": "video",
"profile": "cinematic"
}'

Response, new job:

{
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "processing"
}

Response, cache hit:

{
"job_id": "existing-job-uuid",
"status": "completed",
"video_url": "https://...",
"cached": true
}

Response, in-flight reuse:

{
"job_id": "existing-job-uuid",
"status": "processing",
"reused": true
}

4.4. GET /render-build/:jobId

Polls the status of a render job.

Required scope: render:status

Session tokens can only fetch jobs owned by the same customer. Jobs outside the customer scope return 404.

Response:

{
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"job_type": "render",
"url": "https://cdn.buildcores.com/renders/...",
"video_url": "https://cdn.buildcores.com/renders/...",
"sprite_url": null,
"screenshot_url": null,
"end_time": "2026-04-06T12:05:30.000Z"
}

Status values are queued, processing, completed, and error.

4.5. POST /render-by-share-code

Creates a render job for an existing BuildCores build share code. This is the preferred path when a build already exists and saved interactive state, such as case fan slot placement, should be preserved.

Required scope: render:submit

Request body:

FieldTypeRequiredDescription
shareCodestringYesShare code of the build to render.
format"video" | "sprite"NoOutput format. Default is "video".
profile"cinematic" | "flat" | "fast"NoRender quality profile.
width / heightintegerNoCanvas dimensions. Must be provided together. Range 256 to 8192.
Render optionsmixedNoSame scene, grid, camera, seasonal, and frame-quality options as /render-build.

Example:

curl -X POST "https://www.renderapi.buildcores.com/render-by-share-code" \
-H "Authorization: Bearer <session_token>" \
-H "Content-Type: application/json" \
-d '{
"shareCode": "abc123xyz",
"format": "sprite",
"profile": "cinematic",
"showGrid": true
}'

Response:

{
"job_id": "a1b2c3d4-...",
"status": "processing",
"share_code": "abc123xyz"
}

Poll with GET /render-build/:jobId.

4.6. GET /build/:shareCode

Fetches build details by share code, including part IDs organized by category and available part details.

Required scope: data:read

Example:

curl "https://www.renderapi.buildcores.com/build/abc123xyz" \
-H "Authorization: Bearer <session_token>"

Response:

{
"shareCode": "abc123xyz",
"name": "My Gaming PC",
"description": "RTX 5080 build",
"parts": {
"CPU": ["7xjqsomhr"],
"GPU": ["z7pyphm9k"],
"Motherboard": ["iwin2u9vx"],
"PCCase": ["qq9jamk7c"]
},
"partDetails": {
"CPU": [
{ "id": "7xjqsomhr", "name": "AMD Ryzen 7 9800X3D", "image": "https://...", "category": "CPU" }
],
"GPU": [
{ "id": "z7pyphm9k", "name": "ASUS GeForce RTX 5080 ASTRAL", "image": "https://...", "category": "GPU" }
]
},
"hasInteractiveModel": true
}

4.7. POST /parts

Fetches part details by BuildCores IDs.

Required scope: data:read

Request body:

FieldTypeRequiredDescription
idsstring[]YesArray of BuildCores part IDs. Max 100. An empty array returns { "parts": [] }.

Response:

{
"parts": [
{ "id": "7xjqsomhr", "name": "AMD Ryzen 7 9800X3D", "image": "https://...", "category": "CPU" },
{ "id": "z7pyphm9k", "name": "ASUS GeForce RTX 5080 ASTRAL", "image": "https://...", "category": "GPU" }
]
}

4.8. POST /render-build-experimental

Returns a pregenerated 360-degree MP4 video or WebP sprite sheet as binary data for a given set of parts. This legacy endpoint serves cached pregenerated content only. If the exact visible-part combination has not been pregenerated, it returns 404.

Required scope: render:submit

The async /render-build and /render-by-share-code endpoints are preferred for new integrations.