Get async queue status
curl --request GET \
--url https://api.cloro.dev/v1/async/status \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cloro.dev/v1/async/status"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cloro.dev/v1/async/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloro.dev/v1/async/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cloro.dev/v1/async/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cloro.dev/v1/async/status")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/async/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"queuedTasks": 3,
"processingTasks": 2,
"priorityBreakdown": [
{
"priority": 5,
"count": 2
}
],
"concurrency": {
"used": 2,
"max": 5
}
}{
"error": {
"code": "MISSING_API_KEY",
"message": "Missing or invalid API key",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": "Maximum retries exceeded"
}Utilities
Get async status
Get organization-wide async queue metrics including queued and processing task counts, and concurrency usage.
GET
/
v1
/
async
/
status
Get async queue status
curl --request GET \
--url https://api.cloro.dev/v1/async/status \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cloro.dev/v1/async/status"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cloro.dev/v1/async/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloro.dev/v1/async/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cloro.dev/v1/async/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cloro.dev/v1/async/status")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/async/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"queuedTasks": 3,
"processingTasks": 2,
"priorityBreakdown": [
{
"priority": 5,
"count": 2
}
],
"concurrency": {
"used": 2,
"max": 5
}
}{
"error": {
"code": "MISSING_API_KEY",
"message": "Missing or invalid API key",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": "Maximum retries exceeded"
}Reports the current state of your organization’s async task queue: how many tasks are waiting, and how many concurrency slots you are using against your plan limit. Between those two numbers you can tell whether a delay comes from queue volume or from hitting the concurrency ceiling, and decide whether to throttle submission or move to a higher plan.
Response fields
| Field | Type | Description |
|---|---|---|
queuedTasks | integer | Number of tasks currently queued for your organization (status QUEUED) |
processingTasks | integer | Number of tasks currently being processed for your organization (status PROCESSING) |
priorityBreakdown | array | Queued task counts per priority level, ordered by priority descending. Only includes levels with queued tasks. |
priorityBreakdown[].priority | integer | The priority level (1-10) |
priorityBreakdown[].count | integer | Number of queued tasks at this priority level |
concurrency.used | integer | Number of concurrent slots currently in use |
concurrency.max | integer | Maximum allowed concurrent tasks for your organization (based on your plan) |
The
concurrency object may be null if concurrency information cannot be retrieved at the time of the request. This is rare but can occur during system maintenance.Looking for your credit balance? Call
GET /v1/credits — it returns your remaining balance and cycle reset date without the queue aggregations this endpoint runs.Example usage
Check current queue status
curl -X GET "https://api.cloro.dev/v1/async/status" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"queuedTasks": 3,
"processingTasks": 2,
"priorityBreakdown": [
{ "priority": 10, "count": 1 },
{ "priority": 5, "count": 1 },
{ "priority": 1, "count": 1 }
],
"concurrency": {
"used": 2,
"max": 5
}
}
Monitor queue status programmatically
import axios from 'axios';
const API_KEY = process.env.API_KEY;
const STATUS_URL = 'https://api.cloro.dev/v1/async/status';
async function checkQueueStatus() {
try {
const response = await axios.get(STATUS_URL, {
headers: {
'Authorization': `Bearer ${API_KEY}`
}
});
const { queuedTasks, processingTasks, priorityBreakdown, concurrency } = response.data;
console.log(`Queue status:`);
console.log(` Queued: ${queuedTasks} tasks`);
console.log(` Processing: ${processingTasks} tasks`);
if (priorityBreakdown.length > 0) {
console.log(` Priority breakdown:`);
for (const { priority, count } of priorityBreakdown) {
console.log(` Priority ${priority}: ${count} tasks`);
}
}
if (concurrency) {
console.log(` Concurrency: ${concurrency.used}/${concurrency.max} slots used`);
console.log(` Available: ${concurrency.max - concurrency.used} slots`);
}
// Alert if queue is getting large
if (queuedTasks > 100) {
console.warn('Warning: Queue has over 100 tasks waiting');
}
// Alert if approaching concurrency limit
if (concurrency && concurrency.used / concurrency.max > 0.8) {
console.warn('Warning: Using over 80% of concurrency limit');
}
return response.data;
} catch (error) {
console.error('Error checking queue status:', error.message);
throw error;
}
}
// Check status every 30 seconds
setInterval(checkQueueStatus, 30000);
import requests
import time
API_KEY = 'YOUR_API_KEY'
STATUS_URL = 'https://api.cloro.dev/v1/async/status'
def check_queue_status():
try:
response = requests.get(
STATUS_URL,
headers={'Authorization': f'Bearer {API_KEY}'}
)
response.raise_for_status()
data = response.json()
queued_tasks = data['queuedTasks']
processing_tasks = data['processingTasks']
priority_breakdown = data.get('priorityBreakdown', [])
concurrency = data.get('concurrency')
print(f'Queue status:')
print(f' Queued: {queued_tasks} tasks')
print(f' Processing: {processing_tasks} tasks')
if priority_breakdown:
print(f' Priority breakdown:')
for entry in priority_breakdown:
print(f' Priority {entry["priority"]}: {entry["count"]} tasks')
if concurrency:
used = concurrency['used']
max_concurrent = concurrency['max']
available = max_concurrent - used
print(f' Concurrency: {used}/{max_concurrent} slots used')
print(f' Available: {available} slots')
# Alert if approaching concurrency limit
if used / max_concurrent > 0.8:
print('Warning: Using over 80% of concurrency limit')
# Alert if queue is getting large
if queued_tasks > 100:
print('Warning: Queue has over 100 tasks waiting')
return data
except requests.exceptions.RequestException as e:
print(f'Error checking queue status: {e}')
raise
# Check status every 30 seconds
while True:
check_queue_status()
time.sleep(30)
Use cases
Capacity planning
Watch concurrency usage to decide when to upgrade your plan:const stats = await checkQueueStatus();
// If consistently at or near max concurrency, consider upgrading
if (stats.concurrency.used >= stats.concurrency.max * 0.9) {
console.log('Consider upgrading to a higher plan for better throughput');
}
Queue health monitoring
Track queue size to catch bottlenecks and high-volume periods:data = check_queue_status()
# Alert if queue is backing up
if data['queuedTasks'] > 1000:
send_alert('High queue volume - consider optimizing task submission')
Throttling task submission
Adjust your submission rate to the current queue depth:const status = await checkQueueStatus();
// Only submit more tasks if queue is manageable
if (status.queuedTasks < 500) {
await submitNextBatch();
} else {
console.log('Queue is full, waiting before submitting more tasks');
await delay(60000); // Wait 1 minute
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Response
Successful response with queue metrics.
Number of tasks currently queued for this organization.
Example:
3
Number of tasks currently being processed for this organization.
Example:
2
Queued task counts per priority level, ordered by priority descending. Only includes priority levels that have queued tasks.
Show child attributes
Show child attributes
Current concurrency usage. Null if unable to retrieve concurrency information.
Show child attributes
Show child attributes
Was this page helpful?
⌘I