Retrieve a Report
Get reports from Amazon to help selling partners manage their business.
API Version: 2021-06-30
Get the information required to retrieve a report document and then download the report.
Step 1. Get the information required to retrieve the report
Call the getReportDocument
operation to get the information required for retrieving a report document's contents. This includes a pre-signed URL for the report document and optionally, the compression algorithm used if the report document contents have been compressed.
- Call the
getReportDocument
operation, passing the following parameter:
Path parameter:
Name | Description | Required |
---|---|---|
reportDocumentId |
The identifier for the report document. Type: string |
Yes |
Request example:
GET https://sellingpartnerapi-na.amazon.com/reports/2021-06-30/documents/DOC-b8b0-4226-b4b9-0ee058ea5760
Response
A successful response includes the following:
Name | Description |
---|---|
reportDocumentId |
The identifier for the report document. This identifier is unique only in combination with a seller ID. |
url |
A pre-signed URL for the report document. This URL expires after five minutes.
Type: string |
compressionAlgorithm |
If present, the report document contents have been compressed with the provided algorithm. Type: enum ( |
Response example:
{
"reportDocumentId": "DOC-b8b0-4226-b4b9-0ee058ea5760",
"url": "https://d34o8swod1owfl.cloudfront.net/SampleResult%2BKey%3DSample%2BINITVEC%3D58+fa+bf+a7+08+11+95+0f+c1+a8+c6+e0+d5+6f+ae+c8"
}
- Save the
url
, andcompressionAlgorithm
(optional property) for use in Step 2.
Step 2. Download the report
You must download the report using the information returned in Step 1. The following sample code demonstrates how to download a plain text report document. You can also use the principles demonstrated in the sample code to guide you in building applications in other programming languages, or for other types of documents (such as XML, CSV, TSV).
-
Use the following as inputs for the sample code:
- The
url
and optionalcompressionAlgorithm
values from the previous step are arguments for theurl
, andcompressionAlgorithm
parameters of thedownload
method of theDownloadExample
class.
- The
Note: You must always maintain encryption at rest. Unencrypted report content must never be stored on disk, even temporarily, because reports can contain sensitive information. The sample code that we provide demonstrates this principle.
Sample Code (Java)
// DownloadExample.java
// This example is for use with the Selling Partner API for Reports, Version: 2021-06-30
// and the Selling Partner API for Feeds, Version: 2021-06-30
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.zip.GZIPInputStream;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;
/**
* Example that downloads a document.
*/
public class DownloadExample {
public static void main(String args[]) {
String url = "<URL from the getFeedDocument/getReportDocument response>";
String compressionAlgorithm = "<compressionAlgorithm from the getFeedDocument/getReportDocument response>";
DownloadExample obj = new DownloadExample();
try {
obj.download(url, compressionAlgorithm);
} catch (IOException e) {
//Handle exception here.
} catch (IllegalArgumentException e) {
//Handle exception here.
}
}
/**
* Download and optionally decompress the document retrieved from the given url.
*
* @param url the url pointing to a document
* @param compressionAlgorithm the compressionAlgorithm used for the document
* @throws IOException when there is an error reading the response
* @throws IllegalArgumentException when the charset is missing
*/
public void download(String url, String compressionAlgorithm) throws IOException, IllegalArgumentException {
OkHttpClient httpclient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.get()
.build();
Response response = httpclient.newCall(request).execute();
if (!response.isSuccessful()) {
System.out.println(
String.format("Call to download content was unsuccessful with response code: %d and message: %s",
response.code(), response.message()));
return;
}
try (ResponseBody responseBody = response.body()) {
MediaType mediaType = MediaType.parse(response.header("Content-Type"));
Charset charset = mediaType.charset();
if (charset == null) {
throw new IllegalArgumentException(String.format(
"Could not parse character set from '%s'", mediaType.toString()));
}
Closeable closeThis = null;
try {
InputStream inputStream = responseBody.byteStream();
closeThis = inputStream;
if ("GZIP".equals(compressionAlgorithm)) {
inputStream = new GZIPInputStream(inputStream);
closeThis = inputStream;
}
// This example assumes that the download content has a charset in the content-type header, e.g.
// text/plain; charset=UTF-8
if ("text".equals(mediaType.type()) && "plain".equals(mediaType.subtype())) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);
closeThis = inputStreamReader;
BufferedReader reader = new BufferedReader(inputStreamReader);
closeThis = reader;
String line;
do {
line = reader.readLine();
// Process line by line.
} while (line != null);
} else {
//Handle content with binary data/other media types here.
}
} finally {
if (closeThis != null) {
closeThis.close();
}
}
}
}
}
Updated 4 months ago