Developer API

Build on Omni API tasks.

Browser clients call the Portal BFF. The BFF maps portal task IDs to backend task IDs, handles upload steps, and normalizes responses.

Base URL
/api/omni
Response
{ data, request_id }
Error
{ error: { code, message, request_id } }
Portal BFF routes

/api/omni/models

/api/omni/tasks/create

/api/omni/tasks/:id

/api/omni/tasks/:id/enqueue

/api/omni/tasks/:id/output-urls

/api/omni/tasks/status-batch

/api/omni/sessions

0. List models
curl /api/omni/models
1. Create task
curl https://omniapi.net/api/omni/tasks/create \
  -H "Authorization: Bearer $OMNI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model_group": "omni-image-aio",
  "task_type": "single_image_edit",
  "input": {
    "prompt": "Create a clean studio portrait with soft light.",
    "resolution": "1024x1024"
  },
  "files_to_upload": [
    {
      "name": "source_image",
      "filename": "source_image.png",
      "content_type": "image/png"
    }
  ]
}'
2. Upload selected files
curl -X PUT "{uploads[0].upload_url}" \
  -H "Content-Type: image/png" \
  --data-binary @source_image.png
3. Enqueue draft task
curl /api/omni/tasks/{portal_task_id}/enqueue \
  -H "Content-Type: application/json" \
  -d '{}'
4. Poll task
curl https://omniapi.net/api/omni/tasks/{portal_task_id} \
  -H "Authorization: Bearer $OMNI_API_KEY"
5. Batch status
curl /api/omni/tasks/status-batch \
  -H "Content-Type: application/json" \
  -d '{"portal_task_ids":["portal_task_xxx"]}'
6. Get file outputs
curl https://omniapi.net/api/omni/tasks/{portal_task_id}/output-urls \
  -H "Authorization: Bearer $OMNI_API_KEY"

# Text-only tasks return result_text/result_json directly from:
curl https://omniapi.net/api/omni/tasks/{portal_task_id} \
  -H "Authorization: Bearer $OMNI_API_KEY"