Seele Public API
Intro
The Seele Public API provides a stable, API-key based interface for generating and iterating on any type of content programmatically via jobs.
Typical integration flow:
- Create an API key in the Seele developer console.
- Upload reference files when needed with
POST /v2/api/files. - Start a generation job with
POST /v2/api/jobs. - Optionally add a follow-up step to an existing job with
POST /v2/api/jobs/{job_id}/steps. - Poll
GET /v2/api/jobs/{job_id}untilstatusisfinished.
Base URL
https://openapi.seeles.ai
Authentication
All public API endpoints require Bearer authentication. Include your API key in the Authorization header:
Authorization: Bearer YOUR_API_KEYCreate and manage API keys in the Seele developer console.
Endpoints
/v2/api/filesCreate a temporary upload session and receive a reusable file_id.{upload_url}Upload raw bytes to the temporary URL returned by POST /v2/api/files./v2/api/jobsStart a new generation job request./v2/api/jobs/{job_id}/stepsSend a follow-up prompt step for an existing job./v2/api/jobs/{job_id}Check progress and retrieve available job outputs.Contract notes
- All documented endpoints are versioned under
/v2/api. job_idandfile_idare opaque public identifiers.- Successful responses return
ok: true. - Failed responses return
ok: falsewith an error object. - Only rely on fields explicitly documented on this page.
- Additional non-contract fields may appear in some responses for product integration or display convenience and may change without notice.
Response envelope
okbooleandataobjecterror.codestringerror.messagestring{
"ok": true,
"data": {
"job_id": "job_123",
"meta": {
"platform_url": "https://www.seeles.ai/workspace/job_123"
}
}
}{
"ok": false,
"error": {
"code": "unauthorized",
"message": "Invalid or missing API key"
}
}Authentication
Pass the API key from the Seele developer console in the Authorization header as a Bearer token.
Request example
curl https://openapi.seeles.ai/v2/api/jobs \
-X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Build a cozy cat farming game",
"model": "Seele02-flash",
"engine": "threejs"
}'Upload File
POST /v2/api/files creates a temporary upload session. Upload the raw file bytes to the returned upload_url before upload_url_expires_at, then pass the returned file_id to /v2/api/jobs or /v2/api/jobs/{job_id}/steps.
Request fields
filenamestringRequiredcontent_typestringRequiredsizeintegerRequiredcurl https://openapi.seeles.ai/v2/api/files \
-X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "reference.png",
"content_type": "image/png",
"size": 428731
}'curl "$UPLOAD_URL" \
-X PUT \
-H "Content-Type: image/png" \
--data-binary "@reference.png"Response example
{
"ok": true,
"data": {
"file_id": "0123456789abcdef0123456789abcdef",
"upload_url": "https://...presigned-put-url...",
"upload_url_expires_at": "2026-04-17T00:45:00.000Z",
"upload_headers": {
"Content-Type": "image/png"
},
"filename": "reference.png",
"content_type": "image/png",
"size": 428731
}
}Create Job
Start a new generation job request from an initial prompt. Store the returned job_id and reuse it for later status checks or step requests. The accepted response can also include meta.platform_url, a hosted Seele workspace link that product users can open as a sandbox for review or further iteration. engine accepts threejs, unity, or unreal as the runtime environment, and unreal is available to subscription users only. Seele02-pro is available to subscription users; otherwise the request returns 403.
Request fields
promptstringRequiredmodelSeele02-flash | Seele02-pro | Seele01-flash | Seele01-proenginethreejs | unity | unrealgeneration_modelstringfile_idsstring[]Request example
curl https://openapi.seeles.ai/v2/api/jobs \
-X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Build a cozy cat farming game with planting and fishing",
"model": "Seele02-flash",
"engine": "threejs",
"generation_model": "seedream5",
"file_ids": ["0123456789abcdef0123456789abcdef"]
}'Response example
{
"ok": true,
"data": {
"job_id": "job_123",
"meta": {
"platform_url": "https://www.seeles.ai/workspace/job_123"
}
}
}Response fields
job_idstringRequiredstep_idstringmeta.platform_urlstringBuild workflow around job_id and later status. Treat meta.platform_url as a convenience field for product review flows, not as required contract for automation.
Status codes
201400401403502Create Job Step
Submit a follow-up prompt step for an existing job using its public job_id. Successful responses follow the same shape as create and may also include meta.platform_url pointing to the updated workspace, plus a step_id for the new step. Seele02-pro is available to subscription users; otherwise the request returns 403.
Request fields
promptstringRequiredmodelSeele02-flash | Seele02-pro | Seele01-flash | Seele01-proenginethreejs | unity | unrealgeneration_modelstringfile_idsstring[]Request example
curl https://openapi.seeles.ai/v2/api/jobs/$JOB_ID/steps \
-X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Add a day-night cycle and a boss battle",
"model": "Seele02-flash",
"file_ids": ["fedcba9876543210fedcba9876543210"]
}'Response example
{
"ok": true,
"data": {
"job_id": "job_123",
"step_id": "step_456",
"meta": {
"platform_url": "https://www.seeles.ai/workspace/job_123"
}
}
}Response fields
job_idstringRequiredstep_idstringmeta.platform_urlstringIf the job is still processing, the API returns 409 instead of accepting the step request.
As with create, build automation around documented identifiers and status fields. Treat meta.platform_url as convenience product metadata.
Status codes
200400401403409502Error example
{
"ok": false,
"error": {
"code": "JOB_ALREADY_PROCESSING",
"message": "job is still generating, new steps are not allowed yet"
}
}Get Job Status
Query the current job state with a job_id. Poll this endpoint every 10–30 seconds until status becomes finished. Finished responses include summary, total_koin, an artifacts array with latest-turn generated output URLs, and meta.platform_url for opening the result in the Seele workspace interface.
Generation states
Request example
curl https://openapi.seeles.ai/v2/api/jobs/$JOB_ID \
-H "Authorization: Bearer YOUR_API_KEY"Representative finished response
{
"ok": true,
"data": {
"job_id": "job_123",
"status": "finished",
"summary": "A time detective puzzle with a boss room.",
"total_koin": 125,
"artifacts": [
{
"id": "artifact_789",
"name": "Game Project",
"description": "Generated Unity project package",
"urls": ["https://...download-url..."]
},
{
"id": "artifact_987",
"name": "Preview",
"description": "Browser playable preview",
"urls": ["https://...preview-url..."]
}
],
"meta": {
"platform_url": "https://www.seeles.ai/workspace/job_123"
}
}
}Response fields
job_idstringRequiredstatusprocessing | finishedRequiredcurrent_operationstringsummarystringtotal_koinintegerartifactsarraymeta.platform_urlstringFor automation, rely on status and the documented output fields. Treat artifact URLs as availability-dependent outputs rather than guaranteed fields in every finished response.
Status codes
200401502