Content type conversions in API Gateway - Amazon API Gateway

Content type conversions in API Gateway

The combination of your API's binaryMediaTypes, the headers in client requests, and the integration contentHandling property determine how API Gateway encodes payloads.

The following table shows how API Gateway converts the request payload for specific configurations of a request's Content-Type header, the binaryMediaTypes list of a RestApi resource, and the contentHandling property value of the Integration resource.

Method request payload Request Content-Type header binaryMediaTypes contentHandling Integration request payload
Text data Any data type Undefined Undefined UTF8-encoded string
Text data Any data type Undefined CONVERT_TO_BINARY Base64-decoded binary blob
Text data Any data type Undefined CONVERT_TO_TEXT UTF8-encoded string
Text data A text data type Set with matching media types Undefined Text data
Text data A text data type Set with matching media types CONVERT_TO_BINARY Base64-decoded binary blob
Text data A text data type Set with matching media types CONVERT_TO_TEXT Text data
Binary data A binary data type Set with matching media types Undefined Binary data
Binary data A binary data type Set with matching media types CONVERT_TO_BINARY Binary data
Binary data A binary data type Set with matching media types CONVERT_TO_TEXT Base64-encoded string

The following table shows how API Gateway converts the response payload for specific configurations of a request's Accept header, the binaryMediaTypes list of a RestApi resource, and the contentHandling property value of the IntegrationResponse resource.

Important

When a request contains multiple media types in its Accept header, API Gateway honors only the first Accept media type. If you can't control the order of the Accept media types and the media type of your binary content isn't the first in the list, add the first Accept media type in the binaryMediaTypes list of your API. API Gateway handles all content types in this list as binary.

For example, to send a JPEG file using an <img> element in a browser, the browser might send Accept:image/webp,image/*,*/*;q=0.8 in a request. By adding image/webp to the binaryMediaTypes list, the endpoint receives the JPEG file as binary.

Integration response payload Request Accept header binaryMediaTypes contentHandling Method response payload
Text or binary data A text type Undefined Undefined UTF8-encoded string
Text or binary data A text type Undefined CONVERT_TO_BINARY Base64-decoded blob
Text or binary data A text type Undefined CONVERT_TO_TEXT UTF8-encoded string
Text data A text type Set with matching media types Undefined Text data
Text data A text type Set with matching media types CONVERT_TO_BINARY Base64-decoded blob
Text data A text type Set with matching media types CONVERT_TO_TEXT UTF8-encoded string
Text data A binary type Set with matching media types Undefined Base64-decoded blob
Text data A binary type Set with matching media types CONVERT_TO_BINARY Base64-decoded blob
Text data A binary type Set with matching media types CONVERT_TO_TEXT UTF8-encoded string
Binary data A text type Set with matching media types Undefined Base64-encoded string
Binary data A text type Set with matching media types CONVERT_TO_BINARY Binary data
Binary data A text type Set with matching media types CONVERT_TO_TEXT Base64-encoded string
Binary data A binary type Set with matching media types Undefined Binary data
Binary data A binary type Set with matching media types CONVERT_TO_BINARY Binary data
Binary data A binary type Set with matching media types CONVERT_TO_TEXT Base64-encoded string

When converting a text payload to a binary blob, API Gateway assumes that the text data is a base64-encoded string and outputs the binary data as a base64-decoded blob. If the conversion fails, it returns a 500 response, which indicates an API configuration error. You don't provide a mapping template for such a conversion, although you must enable the passthrough behaviors on the API.

When converting a binary payload to a text string, API Gateway always applies a base64 encoding on the binary data. You can define a mapping template for such a payload, but can only access the base64-encoded string in the mapping template through $input.body, as shown in the following excerpt of an example mapping template.

{ "data": "$input.body" }

To have the binary payload passed through without modification, you must enable the passthrough behaviors on the API.