HTTP API With curl
This guide mirrors the current Cloud Task SDK request behavior and is useful when you want to call the HTTP API directly without adopting an SDK.
Base URLs
- Task API base URL:
https://cloud-task.oomol.com - Upload base URL:
https://llm.oomol.com/api/tasks/files/remote-cache
Covered operations:
- create a task
- list tasks
- get the latest task for one or more workloads
- get task details
- get task result
- get dashboard
- pause or resume the current user's queue
- upload a file in parts
Authentication
Cloud Task v3 supports:
- Bearer Token
- Cookie auth with
oomol-token
The examples below use Bearer Token. If you use cookies, replace the Authorization header with -b "oomol-token=...".
Environment Variables
export OOMOL_BASE_URL="https://cloud-task.oomol.com"
export OOMOL_UPLOAD_BASE_URL="https://llm.oomol.com/api/tasks/files/remote-cache"
export OOMOL_API_KEY="your-api-key"
AUTH_HEADER="Authorization: Bearer ${OOMOL_API_KEY}"
JSON_HEADER="Content-Type: application/json"
Create A Task
Only serverless task creation is supported.
POST /v3/users/me/tasks
curl --request POST \
"${OOMOL_BASE_URL}/v3/users/me/tasks" \
--header "${AUTH_HEADER}" \
--header "${JSON_HEADER}" \
--data '{
"type": "serverless",
"packageName": "@oomol/my-package",
"packageVersion": "1.0.0",
"blockName": "main",
"inputValues": {
"text": "hello"
}
}'
Typical response:
{
"taskID": "019234a5-b678-7def-8123-456789abcdef"
}
List Tasks
GET /v3/users/me/tasks
Supported query parameters:
size:1 ~ 100nextTokenstatustaskType:userorsharedworkload: currently onlyserverlessworkloadIDpackageID
curl --request GET \
"${OOMOL_BASE_URL}/v3/users/me/tasks?size=20&status=running&taskType=user" \
--header "${AUTH_HEADER}"
Get The Latest Task For Workloads
GET /v3/users/me/tasks/latest
Request parameter:
workloadIDs: comma-separated string
curl --request GET \
"${OOMOL_BASE_URL}/v3/users/me/tasks/latest?workloadIDs=550e8400-e29b-41d4-a716-446655440022,550e8400-e29b-41d4-a716-446655440023" \
--header "${AUTH_HEADER}"
Get Task Details
GET /v3/users/me/tasks/{taskID}
TASK_ID="019234a5-b678-7def-8123-456789abcdef"
curl --request GET \
"${OOMOL_BASE_URL}/v3/users/me/tasks/${TASK_ID}" \
--header "${AUTH_HEADER}"
The response usually includes:
taskIDtaskTypestatusprogressworkloadandworkloadIDschedulerPayloadresultURLfailedMessagecreatedAt,startTime,endTime
Get Task Result
GET /v3/users/me/tasks/{taskID}/result
TASK_ID="019234a5-b678-7def-8123-456789abcdef"
curl --request GET \
"${OOMOL_BASE_URL}/v3/users/me/tasks/${TASK_ID}/result" \
--header "${AUTH_HEADER}"
Possible result shapes:
In progress:
{
"status": "running",
"progress": 72
}
Success:
{
"status": "success",
"resultURL": "https://example.com/result.json",
"resultData": [
{
"ok": true
}
]
}
Failure:
{
"status": "failed",
"error": "Insufficient quota"
}
Status values:
- In progress:
queued,scheduling,scheduled,running - Final:
success,failed
Poll With curl Until Completion
If you want behavior similar to createAndWait() or awaitResult(), a simple shell loop is enough:
CREATE_RESPONSE=$(curl --silent --request POST \
"${OOMOL_BASE_URL}/v3/users/me/tasks" \
--header "${AUTH_HEADER}" \
--header "${JSON_HEADER}" \
--data '{
"type": "serverless",
"packageName": "@oomol/my-package",
"packageVersion": "1.0.0",
"blockName": "main"
}')
TASK_ID=$(echo "${CREATE_RESPONSE}" | jq -r '.taskID')
while true; do
RESULT=$(curl --silent --request GET \
"${OOMOL_BASE_URL}/v3/users/me/tasks/${TASK_ID}/result" \
--header "${AUTH_HEADER}")
STATUS=$(echo "${RESULT}" | jq -r '.status')
echo "status=${STATUS}"
if [ "${STATUS}" = "success" ] || [ "${STATUS}" = "failed" ]; then
echo "${RESULT}"
break
fi
sleep 3
done
Dashboard And Queue Control
Get dashboard:
GET /v3/users/me/dashboard
curl --request GET \
"${OOMOL_BASE_URL}/v3/users/me/dashboard" \
--header "${AUTH_HEADER}"
Pause the current user's queue:
POST /v3/user/pause
curl --request POST \
"${OOMOL_BASE_URL}/v3/user/pause" \
--header "${AUTH_HEADER}" \
--header "${JSON_HEADER}" \
--data '{}'
Resume the current user's queue:
POST /v3/user/resume
curl --request POST \
"${OOMOL_BASE_URL}/v3/user/resume" \
--header "${AUTH_HEADER}" \
--header "${JSON_HEADER}" \
--data '{}'
File Upload
The SDK uses a three-step upload flow:
- Initialize upload
- Upload each part with a presigned URL
- Finalize upload and get the file URL
The exact HTTP details are already wrapped by the SDK. If you need file uploads from application code, prefer: