Complete Task
Mark a task as complete and proceed to the next step in the processing pipeline. The system will automatically validate the task and run the same logic as auto-processing. Only tasks in REVIEWING state can be completed.
Endpoint
POST /v2/{team_id}/project/{project_id}/task/{task_id}/complete
Authentication
This endpoint requires an API key with the task.edit scope.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
team_id | String | Yes | The ID of the team |
project_id | String | Yes | The ID of the project |
task_id | String | Yes | The ID of the task to complete |
Request Body
No request body is required. The task will be processed using its current state and any existing annotations or data.
Example Request
- cURL
- TypeScript
- Python
curl -X POST \
'https://api.send.ai/v2/team_123456/project/proj_123456/task/task_abcdef123456/complete' \
-H 'Authorization: Bearer YOUR_API_KEY'
const completeTask = async (
teamId: string,
projectId: string,
taskId: string
): Promise<any> => {
const response = await fetch(
`https://api.send.ai/v2/${teamId}/project/${projectId}/task/${taskId}/complete`,
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
if (!response.ok) {
throw new Error(`Failed to complete task: ${response.status} ${response.statusText}`);
}
return response.json();
};
// Example usage
completeTask('team_123456', 'proj_123456', 'task_abcdef123456')
.then(result => console.log(result))
.catch(error => console.error(error));
import requests
def complete_task(team_id, project_id, task_id):
url = f'https://api.send.ai/v2/{team_id}/project/{project_id}/task/{task_id}/complete'
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
response = requests.post(url, headers=headers)
response.raise_for_status()
return response.json()
# Example usage
result = complete_task('team_123456', 'proj_123456', 'task_abcdef123456')
print(result)
Response
Returns the updated task (full public task object) and a processing message:
{
"payload": {
"id": "task_abcdef123456",
"name": "Document Analysis Task",
"created_at": "2024-01-15T10:30:00Z",
"meta": [{ "name": "category", "value": "invoice" }],
"status": "PROCESSING",
"step_type": "EXTRACT",
"upload_id": "upl_123456789",
"project_id": "proj_123456",
"approved": false,
"exported_at": null,
"export_failed_at": null,
"last_opened_at": "2024-01-15T12:15:00Z",
"pages": [
{
"id": "page_1",
"width": 2480,
"height": 3508,
"annotations": [
{
"id": "ann_1",
"entity_id": "total_amount",
"confidence": 0.98,
"content": "$1,234.56",
"top": 120.5,
"left_of_line": 340.0
}
],
"checkboxes": [
{
"id": "cb_1",
"confidence": 0.92,
"checked": true,
"coordinates": [
[100, 100],
[120, 100],
[120, 120],
[100, 120]
]
}
],
"segments": [
{
"id": "seg_1",
"confidence": 0.87,
"coordinates": [
[50, 50],
[400, 50],
[400, 200],
[50, 200]
]
}
],
"signatures": [
{
"id": "sig_1",
"confidence": 0.83,
"coordinates": [
[800, 600],
[1100, 600],
[1100, 750],
[800, 750]
]
}
]
}
]
},
"message": "Task processing started"
}
Important Notes
- Only tasks in
REVIEWINGstate can be completed - The system automatically validates the task and applies the same logic as auto-processing
- For extraction tasks, existing annotations and data will be validated automatically
- The task will either complete successfully or return validation errors
- Completing a task will trigger the next step in the processing pipeline
- The task status will change to
PROCESSINGwhile the next step executes - This action cannot be undone once performed
Error Responses
400 Bad Request- Task cannot be completed (e.g., not in REVIEWING state, validation errors)404 Not Found- Task not found or API key doesn't have access401 Unauthorized- Invalid or missing API key