/api/v1/do.
GET /api/v1/status/:mainTaskIdGET /api/v1/status/:mainTaskId/:fileKey
OperationStatusFileData, and OperationStatusResponse types.
Status schema
type OperationStatusFileData = {
file_key: string; // resulting file key (output if available, otherwise input)
status: "QUEUED" | "IN_PROGRESS" | "COMPLETED" | "FAILED";
download_link?: string; // relative path to download the output file
error_code?: string; // optional short failure code
error_message?: string; // optional human-readable message
};
type OperationStatusResponse = {
operation_status: "QUEUED" | "IN_PROGRESS" | "COMPLETED" | "FAILED";
files_data?: OperationStatusFileData[];
};
Get main task status
curl -X GET https://api.dragdropdo.com/api/v1/status/main_task_abc123 \
-H "Authorization: Bearer your-api-key"
import { Dragdropdo } from "dragdropdo-sdk";
const client = new Dragdropdo({
apiKey: "your-api-key",
baseURL: "https://api.dragdropdo.com",
});
// Get status
const status = await client.getStatus({
mainTaskId: "task_abc123",
});
console.log("Operation status:", status.operationStatus);
if (status.operationStatus === "completed") {
status.filesData?.forEach((file) => {
console.log(`File ${file.fileKey}: ${file.downloadLink}`);
});
}
from dragdropdo_sdk import Dragdropdo, D3ClientConfig
client = Dragdropdo(
api_key="your-api-key",
base_url="https://api.dragdropdo.com"
)
# Get status
status = client.get_status(main_task_id="task_abc123")
print("Operation status:", status.operation_status)
if status.operation_status == "completed":
for file in status.files_data:
print(f"File {file.file_key}: {file.download_link}")
use DragdropdoSdk\Dragdropdo;
$client = new Dragdropdo([
'api_key' => 'your-api-key',
'base_url' => 'https://api.dragdropdo.com',
]);
// Get status
$status = $client->getStatus(['main_task_id' => 'task_abc123']);
echo "Operation status: " . $status['operation_status'] . "\n";
if ($status['operation_status'] === 'completed') {
foreach ($status['files_data'] as $file) {
echo "File {$file['file_key']}: {$file['download_link']}\n";
}
}
require 'dragdropdo_sdk'
client = DragdropdoSdk::Dragdropdo.new(
api_key: 'your-api-key',
base_url: 'https://api.dragdropdo.com'
)
# Get status
status = client.get_status(main_task_id: 'task_abc123')
puts "Operation status: #{status[:operation_status]}"
if status[:operation_status] == 'completed'
status[:files_data].each do |file|
puts "File #{file[:file_key]}: #{file[:download_link]}"
end
end
import "github.com/d3/dragdropdo-sdk-go"
client, _ := d3.NewDragdropdo(d3.Config{
APIKey: "your-api-key",
BaseURL: "https://api.dragdropdo.com",
});
// Get status
status, _ := client.GetStatus(d3.StatusOptions{
MainTaskID: "task_abc123",
});
fmt.Printf("Operation status: %s\n", status.OperationStatus)
if status.OperationStatus == "completed" {
for _, file := range status.FilesData {
fmt.Printf("File %s: %s\n", file.FileKey, file.DownloadLink)
}
}
import com.dragdropdo.sdk.Dragdropdo;
import com.dragdropdo.sdk.DragdropdoConfig;
import com.dragdropdo.sdk.models.*;
Dragdropdo client = new Dragdropdo(
new DragdropdoConfig("your-api-key")
.setBaseUrl("https://api.dragdropdo.com")
);
// Get status
StatusResponse status = client.getStatus(
new StatusOptions().setMainTaskId("task_abc123")
);
System.out.println("Operation status: " + status.getOperationStatus());
if ("completed".equals(status.getOperationStatus())) {
status.getFilesData().forEach(file ->
System.out.println("File " + file.getFileKey() + ": " + file.getDownloadLink())
);
}
{
"operation_status": "completed",
"files_data": [
{
"file_key": "file_key_1_result",
"status": "completed",
"download_link": "https://api.dragdropdo.com/v1/download/file_key_1_result"
},
{
"file_key": "file_key_2_result",
"status": "completed",
"download_link": "https://api.dragdropdo.com/v1/download/file_key_2_result"
}
]
}
{
"operation_status": "failed",
"files_data": [
{
"file_key": "file_key_1",
"status": "failed",
"error_code": "internal_error",
"error_message": "Internal server error / invalid input file"
}
]
}
Get specific file task status
curl -X GET https://api.dragdropdo.com/api/v1/status/task_abc123/file_key_123 \
-H "Authorization: Bearer your-api-key"
import { Dragdropdo } from "dragdropdo-sdk";
const client = new Dragdropdo({
apiKey: "your-api-key",
baseURL: "https://api.dragdropdo.com",
});
// Get specific file status by file key
const status = await client.getStatus({
mainTaskId: "task_abc123",
fileKey: "file_key_123",
});
console.log("File status:", status.filesData?.[0]?.status);
from dragdropdo_sdk import Dragdropdo, D3ClientConfig
client = Dragdropdo(
api_key="your-api-key",
base_url="https://api.dragdropdo.com"
)
# Get specific file status by file key
status = client.get_status(
main_task_id="task_abc123",
file_key="file_key_123"
)
print("File status:", status.files_data[0].status if status.files_data else None)
use DragdropdoSdk\Dragdropdo;
$client = new Dragdropdo([
'api_key' => 'your-api-key',
'base_url' => 'https://api.dragdropdo.com',
]);
// Get specific file status by file key
$status = $client->getStatus([
'main_task_id' => 'task_abc123',
'file_key' => 'file_key_123',
]);
echo "File status: " . ($status['files_data'][0]['status'] ?? 'N/A') . "\n";
require 'dragdropdo_sdk'
client = DragdropdoSdk::Dragdropdo.new(
api_key: 'your-api-key',
base_url: 'https://api.dragdropdo.com'
)
# Get specific file status by file key
status = client.get_status(
main_task_id: 'task_abc123',
file_key: 'file_key_123'
)
puts "File status: #{status[:files_data]&.first&.dig(:status)}"
import "github.com/d3/dragdropdo-sdk-go"
client, _ := d3.NewDragdropdo(d3.Config{
APIKey: "your-api-key",
BaseURL: "https://api.dragdropdo.com",
});
// Get specific file status by file key
status, _ := client.GetStatus(d3.StatusOptions{
MainTaskID: "task_abc123",
FileKey: "file_key_123",
});
if len(status.FilesData) > 0 {
fmt.Printf("File status: %s\n", status.FilesData[0].Status)
}
import com.dragdropdo.sdk.Dragdropdo;
import com.dragdropdo.sdk.DragdropdoConfig;
import com.dragdropdo.sdk.models.*;
Dragdropdo client = new Dragdropdo(
new DragdropdoConfig("your-api-key")
.setBaseUrl("https://api.dragdropdo.com")
);
// Get specific file status by file key
StatusResponse status = client.getStatus(
new StatusOptions()
.setMainTaskId("task_abc123")
.setFileKey("file_key_123")
);
if (!status.getFilesData().isEmpty()) {
System.out.println("File status: " + status.getFilesData().get(0).getStatus());
}
fileKey is present, the response narrows to the matching file task (if found).
Polling vs. webhooks
- Polling – use the status endpoints from your backend or via the official SDK (see SDKs → Node).
- Webhooks – for production workloads, configure webhooks to receive
operation.completed,operation.failed,fileTask.completed, andfileTask.failedevents instead of (or in addition to) polling.
Polling example
# Poll in a loop (bash example)
while true; do
response=$(curl -s -X GET https://api.dragdropdo.com/api/v1/status/task_abc123 \
-H "Authorization: Bearer your-api-key")
status=$(echo $response | jq -r '.operation_status')
echo "Status: $status"
if [ "$status" = "completed" ] || [ "$status" = "failed" ]; then
echo $response | jq '.'
break
fi
sleep 2
done
import { Dragdropdo } from "dragdropdo-sdk";
const client = new Dragdropdo({
apiKey: "your-api-key",
baseURL: "https://api.dragdropdo.com",
});
// Poll until completion
const status = await client.pollStatus({
mainTaskId: "task_abc123",
interval: 2000, // Check every 2 seconds
timeout: 300000, // 5 minutes max
onUpdate: (status) => {
console.log("Status:", status.operationStatus);
},
});
if (status.operationStatus === "completed") {
console.log("Operation completed!");
status.filesData?.forEach((file) => {
console.log(`Download: ${file.downloadLink}`);
});
}
from dragdropdo_sdk import Dragdropdo, D3ClientConfig
client = Dragdropdo(
api_key="your-api-key",
base_url="https://api.dragdropdo.com"
)
# Poll until completion
status = client.poll_status(
main_task_id="task_abc123",
interval=2000, # Check every 2 seconds
timeout=300000, # 5 minutes max
on_update=lambda s: print(f"Status: {s.operation_status}")
)
if status.operation_status == "completed":
print("Operation completed!")
for file in status.files_data:
print(f"Download: {file.download_link}")
use DragdropdoSdk\Dragdropdo;
$client = new Dragdropdo([
'api_key' => 'your-api-key',
'base_url' => 'https://api.dragdropdo.com',
]);
// Poll until completion
$status = $client->pollStatus([
'main_task_id' => 'task_abc123',
'interval' => 2000, // Check every 2 seconds
'timeout' => 300000, // 5 minutes max
'on_update' => function($status) {
echo "Status: " . $status['operation_status'] . "\n";
},
]);
if ($status['operation_status'] === 'completed') {
echo "Operation completed!\n";
foreach ($status['files_data'] as $file) {
echo "Download: " . $file['download_link'] . "\n";
}
}
require 'dragdropdo_sdk'
client = DragdropdoSdk::Dragdropdo.new(
api_key: 'your-api-key',
base_url: 'https://api.dragdropdo.com'
)
# Poll until completion
status = client.poll_status(
main_task_id: 'task_abc123',
interval: 2000, # Check every 2 seconds
timeout: 300000, # 5 minutes max
on_update: ->(s) { puts "Status: #{s[:operation_status]}" }
)
if status[:operation_status] == 'completed'
puts "Operation completed!"
status[:files_data].each do |file|
puts "Download: #{file[:download_link]}"
end
end
import "github.com/d3/dragdropdo-sdk-go"
import "time"
client, _ := d3.NewDragdropdo(d3.Config{
APIKey: "your-api-key",
BaseURL: "https://api.dragdropdo.com",
});
// Poll until completion
status, _ := client.PollStatus(d3.PollStatusOptions{
StatusOptions: d3.StatusOptions{
MainTaskID: "task_abc123",
},
Interval: 2 * time.Second, // Check every 2 seconds
Timeout: 5 * time.Minute, // 5 minutes max
OnUpdate: func(s d3.StatusResponse) {
fmt.Printf("Status: %s\n", s.OperationStatus)
},
});
if status.OperationStatus == "completed" {
fmt.Println("Operation completed!")
for _, file := range status.FilesData {
fmt.Printf("Download: %s\n", file.DownloadLink)
}
}
import com.dragdropdo.sdk.Dragdropdo;
import com.dragdropdo.sdk.DragdropdoConfig;
import com.dragdropdo.sdk.models.*;
Dragdropdo client = new Dragdropdo(
new DragdropdoConfig("your-api-key")
.setBaseUrl("https://api.dragdropdo.com")
);
// Poll until completion
StatusResponse status = client.pollStatus(
new PollStatusOptions()
.setMainTaskId("task_abc123")
.setInterval(2000) // Check every 2 seconds
.setTimeout(300000) // 5 minutes max
.setOnUpdate(s -> System.out.println("Status: " + s.getOperationStatus()))
);
if ("completed".equals(status.getOperationStatus())) {
System.out.println("Operation completed!");
status.getFilesData().forEach(file ->
System.out.println("Download: " + file.getDownloadLink())
);
}