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 metadata, and meta.platform_url for opening the result in the Seele workspace interface.
Artifact metadata is returned for finished jobs, but direct artifact download URLs are gated by plan. API keys on Standard or above receive populated artifacts[].urls. Lower-tier keys receive urls: [] plus meta.artifact_urls_access_message, and can still preview the result through meta.platform_url.
Generation states
Request example
curl https://openapi.seeles.ai/v2/api/jobs/$JOB_ID \
-H "Authorization: Bearer YOUR_API_KEY"Representative finished response for a lower-tier key
{
"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",
"status": "ready",
"urls": []
}
],
"meta": {
"platform_url": "https://www.seeles.ai/workspace/job_123",
"artifact_urls_access_message": "Upgrade to Standard or above to access artifact download URLs. You can preview the output from platform_url."
}
}
}Response fields
job_idstringRequiredstatusprocessing | finishedRequiredcurrent_operationstringsummarystringtotal_koinintegerartifactsarrayartifacts[].urlsstring[]meta.artifact_urls_access_messagestringmeta.platform_urlstringFor automation, rely on status and the documented output fields. Treat artifact URLs as plan-gated outputs: check whether artifacts[].urls is populated before starting a download, and fall back to meta.platform_url when only preview access is available.
Status codes
200401502