AI intelligently detects image edges, crops the subject or document area, corrects orientation, and can enhance text or remove product backgrounds according to the selected enhancement type. It supports async and sync request modes.
The result image URL is valid for 1 hour. Please download and store it promptly.
Authentication
Every API request must include your API Key in the X-API-KEY request header. Send it with each request exactly as shown in the examples and parameter descriptions.
X-API-KEY: YOUR_API_KEY Create a photo cropping and enhancement task
/api/tasks/visual/correction Body Parameters
image_url string optional Source image URL. Use either image_url or image_file. If this parameter is present, the other image source parameter must be empty.
image_file file optional Source image file as binary data. Use either image_file or image_url. If this parameter is present, the other image source parameter must be empty.
For image upload requirements, see Guidelines and Limits #4.
sync integer optional Whether to wait for the result and return it immediately. 0 means async mode and returns task_id for later polling; 1 means sync mode and waits for the result. Results are kept for up to 1 hour.
type integer optional Enhancement type. 0 = crop and correct orientation for text/document images; 1 = text enhancement for text/document images (default); 2 = text enhancement plus crop and orientation correction for text/document images; 3 = crop and correct orientation for product images; 4 = crop and correct orientation plus background removal for product images.
return_type integer optional Result return format. 1 returns an image URL; 2 returns a base64-encoded image; 3 returns binary image data and is only available for synchronous requests.
Return Parameters
status number HTTP response status code. 200 means success, and non-200 means failure. See Status Code Definitions.
message string API response message. If the task fails, refer to this message or contact support with it.
data.task_id string Async photo cropping and enhancement task ID returned after the task is created. Use it to query the result later.
status number HTTP response status code. 200 means success, and non-200 means failure. See Status Code Definitions.
message string API response message. If the task fails, refer to this message or contact support with it.
data.task_id string Photo cropping and enhancement task ID.
data.created_at string Task creation time as a Unix timestamp string.
data.processed_at string Task processing start time as a Unix timestamp string.
data.completed_at string Task completion time as a Unix timestamp string.
data.image string Result image URL or base64 data, depending on return_type. URL results are valid for 1 hour.
data.progress number Task progress. 100 means processing is complete.
data.state number Task status code. 1 means succeeded, greater than 1 means processing, and less than 0 means failed. See Status Code Definitions.
Query photo cropping and enhancement result
/api/tasks/visual/correction/{task_id} Path Parameters
task_id string required Photo cropping and enhancement task ID returned after creating an async task. Use it to query the processing result.
Return Parameters
status number HTTP response status code. 200 means success, and non-200 means failure. See Status Code Definitions.
message string API response message. If the task fails, refer to this message or contact support with it.
data.task_id string Photo cropping and enhancement task ID. If the task fails, contact support with this task_id.
data.created_at string Task creation time as a Unix timestamp string.
data.processed_at string Task processing start time as a Unix timestamp string.
data.completed_at string Task completion time as a Unix timestamp string.
data.image string Result image URL or base64 data, depending on return_type. URL results are valid for 1 hour.
data.progress number Task progress. 100 means processing is complete.
data.state number Task status code. 1 means succeeded, greater than 1 means processing, and less than 0 means failed. See Status Code Definitions.
Guidelines and Limits
-
The result image URL is valid for 1 hour. Please download and store it promptly.
-
HTTP status 200 indicates that the HTTP request succeeded, not necessarily that the image task succeeded. See Status Code Definitions for details.
-
When passing URLs as parameters, follow URL encoding standards to prevent parameter parsing confusion.
-
Uploaded images must meet the following format, resolution, and file size limits.
Format Resolution Size jpg, jpeg, bmp, png, webp, tiff, tif, bitmap, raw, rgb, jfif, lzw Up to 4096 x 4096 Up to 20MB
# Photo Cropping and Enhancement API
AI intelligently detects image edges, crops the subject or document area, corrects orientation, and can enhance text or remove product backgrounds according to the selected enhancement type. The API supports asynchronous and synchronous request modes.
> Note: Every result image URL is valid for 1 hour. Download and store it promptly.
## Base URL
```
https://techhk.aoscdn.com
```
## Authentication
Every request must include your API key in the `X-API-KEY` request header:
```http
X-API-KEY: YOUR_API_KEY
```
Get or manage your API key from [API Key](https://picwish.com/my-account?subRoute=api-key).
## Request modes
The mode is controlled by the `sync` body parameter:
- Asynchronous (`sync=0`): the create request returns `data.task_id`, then you poll the query endpoint until processing finishes.
- Synchronous (`sync=1`): the create request waits for processing to finish and returns the result directly.
Results are kept for up to 1 hour.
## Source image
Exactly one source image is required:
- `image_url` - a publicly reachable source image URL.
- `image_file` - the source image file uploaded as multipart binary data.
Do not send both at the same time. If one image source parameter is present, the other image source parameter must be empty.
## Endpoints
| Purpose | Method | Path |
| --- | --- | --- |
| Create a photo cropping and enhancement task | POST | /api/tasks/visual/correction |
| Query a task result (async) | GET | /api/tasks/visual/correction/{task_id} |
## Create a photo cropping and enhancement task
`POST /api/tasks/visual/correction`
Content-Type: `multipart/form-data`
Each successful call consumes 3 credits.
### Body parameters
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| image_url | string | one of image_url / image_file | Source image URL. Mutually exclusive with image_file. |
| image_file | file | one of image_url / image_file | Source image file as binary multipart data. Mutually exclusive with image_url. |
| sync | integer | optional | 0 = asynchronous (default, returns task_id and query later); 1 = synchronous (waits for the result and returns it immediately). Results are kept up to 1 hour. |
| type | integer | optional | Enhancement type. 0 = crop and correct orientation for text/document images; 1 = text enhancement for text/document images (default); 2 = text enhancement plus crop and orientation correction for text/document images; 3 = crop and correct orientation for product images; 4 = crop and correct orientation plus background removal for product images. |
| return_type | integer | optional | Result return format. 1 = image URL; 2 = base64-encoded image; 3 = binary image data, only available for synchronous requests. |
### Return parameters - asynchronous (sync=0)
| Name | Type | Description |
| --- | --- | --- |
| status | number | HTTP-style status code. 200 = success, non-200 = failure. See /states. |
| message | string | Response message. If the task fails, refer to this message or contact support with it. |
| data.task_id | string | Task ID. Use it to query the result later. |
### Return parameters - synchronous (sync=1)
| Name | Type | Description |
| --- | --- | --- |
| status | number | HTTP-style status code. 200 = success, non-200 = failure. See /states. |
| message | string | Response message. If the task fails, refer to this message or contact support with it. |
| data.task_id | string | Task ID. |
| data.created_at | string | Task creation timestamp. |
| data.processed_at | string | Timestamp when processing started. |
| data.completed_at | string | Task completion timestamp. |
| data.image | string | Result image URL or base64 data, depending on return_type. URL results are valid for 1 hour. |
| data.progress | number | Task progress. 100 means processing is complete. |
| data.state | number | 1 = succeeded; > 1 = still processing; < 0 = failed. See /states. |
### Examples
Asynchronous, image URL:
```bash
curl -k 'https://techhk.aoscdn.com/api/tasks/visual/correction' \
-H 'X-API-KEY: YOUR_API_KEY' \
-F 'sync=0' \
-F 'image_url=YOUR_IMAGE_URL'
```
Asynchronous, image file upload:
```bash
curl -k 'https://techhk.aoscdn.com/api/tasks/visual/correction' \
-H 'X-API-KEY: YOUR_API_KEY' \
-F 'sync=0' \
-F 'image_file=@/path/to/image.jpg'
```
Synchronous (result returned directly):
```bash
curl -k 'https://techhk.aoscdn.com/api/tasks/visual/correction' \
-H 'X-API-KEY: YOUR_API_KEY' \
-F 'sync=1' \
-F 'image_url=YOUR_IMAGE_URL'
```
## Query photo cropping and enhancement result
`GET /api/tasks/visual/correction/{task_id}`
Use this endpoint in asynchronous mode to poll for the result. We recommend polling every 1 second and keeping the total polling duration within 30 seconds. Stop polling when `data.state=1` or `data.state<0`.
### Path parameters
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| task_id | string | required | The task ID returned by the create request. |
### Return parameters
| Name | Type | Description |
| --- | --- | --- |
| status | number | HTTP-style status code. 200 = success, non-200 = failure. See /states. |
| message | string | Response message. If the task fails, refer to this message or contact support with it. |
| data.task_id | string | Task ID. If the task fails, contact support with this task_id. |
| data.created_at | string | Task creation timestamp. |
| data.processed_at | string | Timestamp when processing started. |
| data.completed_at | string | Task completion timestamp. |
| data.image | string | Result image URL or base64 data, depending on return_type. URL results are valid for 1 hour. |
| data.progress | number | Task progress. 100 means processing is complete. |
| data.state | number | 1 = succeeded; > 1 = still processing; < 0 = failed. See /states. |
### Example
```bash
curl -k 'https://techhk.aoscdn.com/api/tasks/visual/correction/{task_id}' \
-H 'X-API-KEY: YOUR_API_KEY'
```
## Recommended asynchronous flow
1. POST to /api/tasks/visual/correction with `sync=0` and exactly one image source.
2. Read `data.task_id` from the create response.
3. GET /api/tasks/visual/correction/{task_id} every 1 second.
4. Stop polling when `data.state=1` or `data.state<0`, or when polling reaches about 30 seconds.
5. Download `data.image` within 1 hour after processing succeeds.
## Guidelines and Limits
- The result image URL is valid for **1 hour**. Please download the image file promptly.
- HTTP status 200 indicates that the HTTP request succeeded, not necessarily that the image task succeeded. Check `data.state` for task success or failure.
- When passing URLs as parameters, follow URL encoding standards to prevent parameter parsing confusion.
- Uploaded images must meet the following format, resolution, and file size limits.
| Format | Resolution | File size |
| --- | --- | --- |
| jpg, jpeg, bmp, png, webp, tiff, tif, bitmap, raw, rgb, jfif, lzw | Up to 4096 x 4096 | Up to 20MB |
## Status codes
Determine success by combining the HTTP response status code (`status`) with the task status code (`data.state`).
### HTTP response status codes
| Code | Meaning |
| --- | --- |
| 200 | The request is successful. |
| 400 | Wrong parameter passed by the client. Check whether a parameter is missing or has an incorrect value. |
| 401 | Unauthorized API key. Check that X-API-KEY is correct and the service is enabled. |
| 404 | The requested URL or resource does not exist. Check that the URL or task_id is correct. |
| 413 | The uploaded file exceeds the allowed size. Refer to the supported image size. |
| 429 | Request frequency exceeds the QPS limit (default QPS is 2). Slow down or contact us to raise your QPS. |
| 500 | Server-side exception. Please contact support. |
### Task status codes (data.state)
1 = succeeded; greater than 1 = still processing; less than 0 = failed.
| Code | Meaning |
| --- | --- |
| -17 | Processing failed because the prompt is invalid. |
| -16 | Processing failed because a third-party review detected prohibited content. |
| -15 | Processing failed due to insufficient resources. |
| -14 | Processing failed because the input image content does not meet the requirements. |
| -13 | Processing failed because the task was canceled due to an exception. |
| -11 | Processing failed because the result is empty. |
| -10 | Processing failed because internal review detected prohibited content. |
| -9 | Processing failed because the internal program failed during loop processing. |
| -8 | Processing timed out. The maximum processing time is 180 seconds. |
| -7 | Invalid image file (e.g. corrupted image or incorrect format). |
| -5 | The image_url image exceeds the size limit (30MB). |
| -3 | The server failed to download your file. Check that the source image URL is available. |
| -2 | Processing completed, but uploading the result to OSS failed. |
| -1 | Processing failed. |
| 0 | Queued. The task is waiting in the queue. |
| 1 | Completed. Processing succeeded. |
| 2 | Preparing. |
| 3 | Waiting. |
| 4 | Processing in progress. |
| 5 | Internally publishing the result. |
| 6 | Processing. Internal loop processing is in progress. |