Convert images to Excel

Updated at:

The image-to-Excel API converts images into editable Excel documents. It supports converting up to 30 images at a time, accurately recognizes text, and preserves the original layout and style. This topic describes how to call the image-to-Excel API. Before you call the OpenAPI, read the API usage guide.

How to call the API

The image-to-Excel API is asynchronous. First, call the `SubmitConvertImageToExcelJob` service to submit an asynchronous task. Then, call the `GetDocumentConvertResult` service to poll for the result.

Note
  • You can poll for the result every 10 seconds for up to 120 minutes. If the task is not complete after 120 minutes, the task times out.

  • After an asynchronous task is complete, you can query the result for up to 24 hours. After 24 hours, the result is no longer available.

  • Supported formats: Up to 30 images in JPG, JPEG, PNG, BMP, or GIF format. For GIF files, only the first frame is processed. Images with a longest side greater than 8192 px or a size larger than 20 MB are not supported.

Step 1: Call the SubmitConvertImageToExcelJob API

Request parameters

Name

Type

Required

Description

Example

ImageUrls

List<String>

Yes

A collection of image URLs. You can specify 1 to 30 URLs. Images with a longest side greater than 8192 px or a size larger than 20 MB are not supported.

If the request fails because the URLs are too long, reduce the number of image URLs.

"https://example.com/example1.jpg","https://example.com/example2.jpg"

ImageNames

List<String>

No

The file name must include an extension and is mutually exclusive with imageNameExtension.

"example1.jpg","example2.jpg"

ImageNameExtension

string

No

The file name extension. You must specify either `ImageNameExtension` or `ImageNames`. Supported extensions are jpg, jpeg, png, bmp, and gif.

jpg

ForceMergeExcel

bool

No

Determines whether to force a merge into a single sheet. The default value is false.

false

OssBucket

string

No

The name of your OSS bucket. For more information, see OSS hosting support.

docmind-trust

OssEndpoint

string

No

The endpoint of your OSS bucket. For more information, see OSS hosting support.

oss-cn-hangzhou.aliyuncs.com

EnableEventCallback

bool

No

Specifies whether to enable event callbacks. The default value is False. For more information, see EventBridge support.

false

Response parameters

Name

Type

Description

Example value

RequestId

string

The unique ID of the request.

43A29C77-405E-4CC0-BC55-EE694AD0****

Data

object

The returned data.

"Id": "docmind-20220712-b15f****"

Id

string

The business order ID. This is the unique identifier used to query the result with a subsequent API call.

docmind-20220712-b15f****

Code

string

The status code.

200

Message

string

The detailed message.

Message

Usage examples

You can call this API by passing document URLs. Uploading local documents is not supported.

The following code provides an example of how to call the API by passing document URLs using the Java SDK. The example calls the `SubmitConvertImageToExcelJob` API and passes multiple document URLs using the `imageUrls` parameter. The document URLs must be publicly accessible for download, have no cross-domain restrictions, and contain no special escape characters.

Note

For information about how to obtain and use your AccessKey pair, see the SDK usage guide for your preferred language in SDK Overview.

import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;
import com.alibaba.fastjson.JSON;

 public static void main(String[] args) throws Exception {
        submit();
    }
public static void submit() throws Exception{
		// Use the default credential to initialize the Credentials client.
    com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
    Config config = new Config()
        // Obtain the AccessKey ID from the credentials.
        .setAccessKeyId(credentialClient.getAccessKeyId())
        // Obtain the AccessKey secret from the credentials.
        .setAccessKeySecret(credentialClient.getAccessKeySecret());
      // The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
     config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
     Client client = new Client(config);
     SubmitConvertImageToExcelJobRequest imageToExcelJobRequest = new SubmitConvertImageToExcelJobRequest();
     String fileUrl1= "https://example.com/example1.jpg";
     String fileUrl2= "https://example.com/example2.jpg";
     imageToExcelJobRequest.imageUrls = Arrays.asList(fileUrl1,fileUrl2);
     // Specify the file name extension of the first image.
     imageToExcelJobRequest.imageNameExtension = "jpg";
     SubmitConvertImageToExcelJobResponse response = client.submitConvertImageToExcelJob(imageToExcelJobRequest);
     System.out.println(JSON.toJSON(response.getBody()));

}
const Client = require('@alicloud/docmind-api20220711');

const getResult = async () => {
  // Use the default credential to initialize the Credentials client.
  const cred = new Credential.default();
  const client = new Client.default({
    // The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
    endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
    // Obtain the AccessKey ID from the credentials.
    accessKeyId: cred.credential.accessKeyId,
    // Obtain the AccessKey secret from the credentials.
    accessKeySecret: cred.credential.accessKeySecret,
    type: 'access_key',
    regionId: 'cn-hangzhou'
  });
  
  const request = new Client.SubmitConvertImageToExcelJobRequest();
  request.imageUrls = [
    'https://example.com/example1.jpg',
    'https://example.com/example2.jpg'
  ];
  request.imageNameExtension = 'jpg';
  const response = await client.submitConvertImageToExcelJob(request);
  
  return response.body;
}
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_credentials.client import Client as CredClient

if __name__ == '__main__':
    cred=CredClient()
    config = open_api_models.Config(
        # Obtain the AccessKey ID from the credentials.
        access_key_id=cred.get_credential().get_access_key_id(),
        # Obtain the AccessKey secret from the credentials.
        access_key_secret=cred.get_credential().get_access_key_secret()
    )
    # The endpoint.
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    client = docmind_api20220711Client(config)
    request = docmind_api20220711_models.SubmitConvertImageToExcelJobRequest(
        # image_urls: The URLs of the images.
        image_urls=['https://example.com/example.jpg'],
        # image_name_extension: The image format. You must specify either this parameter or image_names.
        image_name_extension='jpg',
        # image_names: The image names. The names must include the image type.
        image_names=['123.jpg'],

    )
    try:
        # If you copy the code to run, print the API return value.
        response = client.submit_convert_image_to_excel_job(request)
        # The format of the API return value is body -> data -> specific properties. You can print the results as needed. The following example shows how to print the returned business ID.
        # Property values start with a lowercase letter.
        print(response.body)        
    except Exception as error:
        # If necessary, print the error.
        UtilClient.assert_as_string(error.message)
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;

 public static void SubmitUrl()
        {
            // Use the default credential to initialize the Credentials client.
          	var akCredential = new Aliyun.Credentials.Client(null);
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // Obtain the AccessKey ID from the credentials.
                AccessKeyId = akCredential.GetAccessKeyId(),
                // Obtain the AccessKey secret from the credentials.
                AccessKeySecret = akCredential.GetAccessKeySecret(),
            };
            // The endpoint.
            config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
            AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config);
            List<string> list = new List<string>();
            list.Add("https://example.com/example1.jpg");
            list.Add("https://example.com/example2.jpg");
            AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitConvertImageToExcelJobRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitConvertImageToExcelJobRequest
            {
                ImageUrls = list,
                ImageNameExtension = "jpg"
            };
            try
            {
                // If you copy the code to run, print the API return value.
                client.SubmitConvertImageToExcelJob(request);
            }
            catch (TeaException error)
            {
                // If necessary, print the error.
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                // If necessary, print the error.
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }
import (
	"fmt"

	openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  "github.com/alibabacloud-go/docmind-api-20220711/client"
  "github.com/aliyun/credentials-go/credentials"
)

func submit() {
  // Use the default credential to initialize the Credentials client.
	credential, err := credentials.NewCredential(nil)
	// Obtain the AccessKey ID from the credentials.
	accessKeyId, err := credential.GetAccessKeyId()
	// Obtain the AccessKey secret from the credentials.
	accessKeySecret, err := credential.GetAccessKeySecret()
  // The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
  var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com"
	config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint}
  // Initialize the client.
  cli, err := client.NewClient(&config)
  if err != nil {
    panic(err)
  }
  fileUrl1 := "https://example.com/example1.jpg"
  fileUrl2 := "https://example.com/example2.jpg"
  imageExtension := "jpg"
  request := client.SubmitConvertImageToExcelJobRequest{
    ImageUrls:          []*string{&fileUrl1, &fileUrl2},
    ImageNameExtension: &imageExtension,
  }
  response, err := cli.SubmitConvertImageToExcelJob(&request)
  if err != nil {
    panic(err)
  }
  fmt.Println(response.Body)
}
 use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi;
use AlibabaCloud\SDK\Docmindapi\V20220711\Models\SubmitConvertImageToExcelJobRequest;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
use AlibabaCloud\Credentials\Credential;

// Use the default credential to initialize the Credentials client.
$bearerToken = new Credential();    
$config = new Config();
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
$config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
// Obtain the AccessKey ID from the credentials.
$config->accessKeyId = $bearerToken->getCredential()->getAccessKeyId();
// Obtain the AccessKey secret from the credentials.
$config->accessKeySecret = $bearerToken->getCredential()->getAccessKeySecret();
$config->type = "access_key";
$config->regionId = "cn-hangzhou";
$client = new Docmindapi($config);
$request = new SubmitConvertImageToExcelJobRequest();

$runtime = new RuntimeOptions();
$runtime->maxIdleConns = 3;
$runtime->connectTimeout = 10000;
$runtime->readTimeout = 10000;

$request->imageUrls = array(
  "https://example.com/example1.jpg",
  "https://example.com/example2.jpg"
);
$request->imageNameExtension = "jpg";

try {
  $response = $client->submitConvertImageToExcelJob($request, $runtime);
  var_dump($response->toMap());
} catch (TeaUnableRetryError $e) {
  var_dump($e->getMessage());
  var_dump($e->getErrorInfo());
  var_dump($e->getLastException());
  var_dump($e->getLastRequest());
}

Response example

{
  "RequestId": "43A29C77-405E-4CC0-BC55-EE694AD0****",
  "Data": {
    "Id": "docmind-20220712-b15f****"
  }  
}

Step 2: Poll the GetDocumentConvertResult API to query the document conversion result

The `Id` input parameter for the query API is the `Id` that is returned by the asynchronous task submission API. The status in the query result can be `processing`, `successful`, or `failed`.

Request parameters

Name

Type

Required

Description

Example

Id

string

Yes

The business order ID to query. Obtain this ID from the response of the submission API.

docmind-20220712-b15f****

Response parameters

Name

Type

Description

Example

RequestId

string

The unique ID of the request.

43A29C77-405E-4CC0-BC55-EE694AD0****

Completed

boolean

Indicates whether the asynchronous task is complete. `false` indicates that the task is still processing. `true` indicates that the task is complete, with a result of either successful or failed.

true

Status

string

The final status of the asynchronous task after it is complete. `Success` indicates that the task was successful. `Fail` indicates that the task failed.

Success

Data

object

The result of the document conversion. For more information about the parameters, see the following table.

-

Code

string

The status code.

200

Message

string

The detailed message.

Message

Data parameters:

Name

Type

Description

Sample value

Url

String

The URL of the converted file.

https://example.com/example.xlsx

Size

Integer

The size of the converted file in bytes.

1345488

Type

String

The file name extension of the converted file.

xlsx

Md5

String

The MD5 hash of the converted file. You can use this value for verification.

2d49eb7705f9f93ed857874db247****

Usage examples

The following code provides an example of how to call the result query API using the Java SDK. The example calls the `GetDocumentConvertResult` API and passes the task ID in the `Id` parameter.

Note

For information about how to obtain and use your AccessKey pair, see the SDK usage guide for your preferred language in SDK Overview.

import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;
import com.alibaba.fastjson.JSON;

public static void main(String[] args) throws Exception {
        submit();
    }
public static void submit() throws Exception {
    // Use the default credential to initialize the Credentials client.
    com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
    Config config = new Config()
        // Obtain the AccessKey ID from the credentials.
        .setAccessKeyId(credentialClient.getAccessKeyId())
        // Obtain the AccessKey secret from the credentials.
        .setAccessKeySecret(credentialClient.getAccessKeySecret());
    // The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
    config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
    Client client = new Client(config);
    GetDocumentConvertResultRequest resultRequest = new GetDocumentConvertResultRequest();
    resultRequest.id = "docmind-20220902-824b****";
    GetDocumentConvertResultResponse response = client.getDocumentConvertResult(resultRequest);
    System.out.println(JSON.toJSON(response.getBody()));

}
const Client = require('@alicloud/docmind-api20220711');

const getResult = async () => {
  // Use the default credential to initialize the Credentials client.
  const cred = new Credential.default();
  const client = new Client.default({
    // The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
    endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
    // Obtain the AccessKey ID from the credentials.
    accessKeyId: cred.credential.accessKeyId,
    // Obtain the AccessKey secret from the credentials.
    accessKeySecret: cred.credential.accessKeySecret,
    type: 'access_key',
    regionId: 'cn-hangzhou'
  });
  
  const resultRequest = new Client.GetDocumentConvertResultRequest();
  resultRequest.id = "docmind-20220902-824b****";
  const response = await client.getDocumentConvertResult(resultRequest);
  
  return response.body;
}
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_credentials.client import Client as CredClient

if __name__ == '__main__':
    cred=CredClient()
    config = open_api_models.Config(
        # Obtain the AccessKey ID from the credentials.
        access_key_id=cred.get_credential().get_access_key_id(),
        # Obtain the AccessKey secret from the credentials.
        access_key_secret=cred.get_credential().get_access_key_secret()
    )
    # The endpoint.
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    client = docmind_api20220711Client(config)
    request = docmind_api20220711_models.GetDocumentConvertResultRequest(
        # id: The ID returned by the task submission API.
        id='docmind-20220902-824b****'
    )
    try:
        # If you copy the code to run, print the API return value.
        response = client.get_document_convert_result(request)
        # The format of the API return value is body -> data -> specific properties. You can print the results as needed. Property values start with a lowercase letter.
        # Get the status of the asynchronous task. You can check response.body.completed to determine whether to continue polling for the result.
        print(response.body.completed)
        # Get the returned result. We recommend that you first convert response.body.data to JSON and then extract the required values from the JSON object.
        print(response.body)        
    except Exception as error:
        # If necessary, print the error.
        UtilClient.assert_as_string(error.message)
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;

public static void GetResult() 
        {
            // Use the default credential to initialize the Credentials client.
          	var akCredential = new Aliyun.Credentials.Client(null);
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // Obtain the AccessKey ID from the credentials.
                AccessKeyId = akCredential.GetAccessKeyId(),
                // Obtain the AccessKey secret from the credentials.
                AccessKeySecret = akCredential.GetAccessKeySecret(),
            };
            // The endpoint.
            config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
            AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config);
            AlibabaCloud.SDK.Docmind_api20220711.Models.GetDocumentConvertResultRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.GetDocumentConvertResultRequest
            {
                Id = "docmind-20220902-824b****"
            };
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            try
            {
                // If you copy the code to run, print the API return value.
                client.GetDocumentConvertResult(request);
            }
            catch (TeaException error)
            {
                // If necessary, print the error.
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                // If necessary, print the error.
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }
import (
	"fmt"
	"os"

	openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  "github.com/alibabacloud-go/docmind-api-20220711/client"
  "github.com/aliyun/credentials-go/credentials"
)

func submit(){
    // Use the default credential to initialize the Credentials client.
		credential, err := credentials.NewCredential(nil)
		// Obtain the AccessKey ID from the credentials.
		accessKeyId, err := credential.GetAccessKeyId()
		// Obtain the AccessKey secret from the credentials.
		accessKeySecret, err := credential.GetAccessKeySecret()
  	// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
  	var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com"
		config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint}
  	// Initialize the client.
    cli, err := client.NewClient(&config)
    if err != nil {
      panic(err)
    }
    id := "docmind-20220925-76b1****"
    // Call the query API.
    request := client.GetDocumentConvertResultRequest{Id: &id}
    response, err := cli.GetDocumentConvertResult(&request)
    if err != nil {
      panic(err)
    }
    // Print the query result.
    fmt.Println(response.Body)
  // Note: The Go SDK URL-encodes the ampersand (&) in the returned URL to \u0026. You must manually decode \u0026 back to & to download the file from the URL.
  // Example of a URL returned by the Go SDK: http://docmind-api-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/convert/docmind-20220927-87ad**/example.pdf?Expires=XX\u0026OSSAccessKeyId=YY\u0026Signature=ZZ
}
use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi;
use AlibabaCloud\SDK\Docmindapi\V20220711\Models\GetDocumentConvertResultRequest;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
use AlibabaCloud\Credentials\Credential;

// Use the default credential to initialize the Credentials client.
$bearerToken = new Credential();    
$config = new Config();
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
$config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
// Obtain the AccessKey ID from the credentials.
$config->accessKeyId = $bearerToken->getCredential()->getAccessKeyId();
// Obtain the AccessKey secret from the credentials.
$config->accessKeySecret = $bearerToken->getCredential()->getAccessKeySecret();
$config->type = "access_key";
$config->regionId = "cn-hangzhou";
$client = new Docmindapi($config);
$request = new GetDocumentConvertResultRequest();   
$request->id = "docmind-20220902-824b****";

$runtime = new RuntimeOptions();
$runtime->maxIdleConns = 3;
$runtime->connectTimeout = 10000;
$runtime->readTimeout = 10000;

try {
  $response = $client->getDocumentConvertResult($request, $runtime);
  var_dump($response->toMap());
} catch (TeaUnableRetryError $e) {
  var_dump($e->getMessage());
  var_dump($e->getErrorInfo());
  var_dump($e->getLastException());
  var_dump($e->getLastRequest());
}

Return Value

The response can indicate one of three states: processing, successful, or failed. The following sections provide response examples for each state.

  • The response is as follows:

    {
      "RequestId": "2AABD2C2-D24F-12F7-875D-683A27C3****",
      "Completed": false,
      "Code": "DocProcessing",
      "Message": "Document processing",
      "HostId": "ocr-api.cn-hangzhou.aliyuncs.com",
      "Recommend": "https://next.api.aliyun.com/troubleshoot?q=DocProcessing&product=docmind-api"
    }

    If the task is processing, the value of `Completed` is `false`. In this case, you must continue to poll for the result until `Completed` returns `true` or the polling times out.

  • The following response indicates that the task failed:

    {
      "RequestId": "A8EF3A36-1380-1116-A39E-B377BE27****",
      "Completed": true,
      "Status": "Fail",
      "Code": "UrlNotLegal",
      "Message": "Failed to process the document.  The document url you provided is not legal.",
      "HostId": "docmind-api.cn-hangzhou.aliyuncs.com",
      "Recommend": "https://next.api.aliyun.com/troubleshoot?q=IDP.UrlNotLegal&product=docmind-api"
    }

    If the task failed, the value of `Completed` is `true` and the value of `Status` is `Fail`. The response also includes an error `Code` and a detailed `Message`. For more information about error codes, see Error codes.

  • The following response indicates that the task was successful:

    {
      "Status": "Success",
      "RequestId": "73134E1A-E281-1B2C-A105-D0ECFE2D****",
      "Completed": true,
      "Data": [
        {
          "Type": "xlsx",
          "Size": 7940,
          "Url": "http://docmind-api-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/convert/docmind-20220902-57de****/example.xlsx?Expires=1662190830&OSSAccessKeyId=XX&Signature=YY",
          "Md5": "36256a4c2db8e31e056aeeb8b871****"
        }
      ]
    }

    If the task was successful, the value of `Completed` is `true` and the value of `Status` is `Success`. The result is in the `Data` node. The `Data` node is a list that contains one element. The element contains the following parameters:

    • `Type` is the document type of the converted file. For example, the image-to-Excel API returns an Excel document in XLSX format.

    • `Url` is the download link for the converted document. The URL returned by each query request is valid for 60 minutes. After it expires, you must call the query API again to obtain a new URL.

    • `Size` is the file size of the converted document in bytes. You can use this value to verify the integrity of the downloaded document by comparing its file size with the `Size` value returned by the API.

    • `Md5` is the MD5 hash of the converted document. You can use this value to verify the integrity of the downloaded document by comparing its MD5 hash with the `Md5` value returned by the API.