One problem that pops up quite frequently when people try to build serverless applications with AWS API Gateway and AWS Lambda is Execution failed due to configuration error: Malformed Lambda proxy response. There is nothing worse than generic error messages that don’t tell you anything you need to fix the problem, right? And AWS isn’t particularly known for its error message design, if you can even call it that, let alone for giving you the means of fixing the problem. So how to fix this Lambda error and what causes it? Fixing malformed Lambda proxy response In order to fix this, you need to . And to do so, you need to return an object with two attributes: change what your Lambda function returns – which is the HTTP status code you want to give your client with type number. statusCode – which is the content of your HTTP response with type string. body If you used an asynchronous function, it should look like this: exports.handler = { { : , : }; }; async ( ) function event, context return statusCode 200 body "OK" If you’re more of a promise type of developer, it would look like this: exports.handler = { ( { resolve({ : , : }); }); }; ( ) function event, context return new Promise ( ) function resolove, reject statusCode 200 body "OK" And finally, if you’re into callbacks, this will resolve your problem: exports.handler = { callback({ : , : }); }; ( ) function event, context, callback statusCode 200 body "OK" Understanding the Malformed Lambda proxy error response If you have some time to spare, why not learn a bit about the “Why” of the error along the way? First, isn’t really a configuration error because . But still, it could very well be that the routine that checks your return value also checks for other things that can be configured from the outside, like from AWS CloudFormation. Malformed Lambda proxy response the problem lies in your Lambda code But what about the proxy part of that error message? If you configure a route for your API in AWS API Gateway in the AWS Console, you get to , in our case, a Lambda integration. This integration is the . After all, Lambda can be used for more than just handling API Gateway requests. choose an integration for that route glue between AWS Lambda and AWS API Gateway If you configure the route via CloudFormation, things get a bit clearer. ExampleApi: ... DefaultStage: ... ExampleRoute: Type: AWS::ApiGatewayV2::Route Properties: ApiId: Ref: ExampleApi RouteKey: ANY / Target: Fn::Join: - integrations/ - Ref: ProxyIntegration ProxyIntegration: Type: AWS::ApiGatewayV2::Integration Properties: ApiId: Ref: ExampleApi IntegrationType: AWS_PROXY IntegrationUri: Fn::GetAtt: - ExampleFunction - Arn PayloadFormatVersion: ExampleRole: ... ExampleFunction: Type: AWS::Lambda:: Properties: Code: ZipFile: Handler: index.handler Role: Fn::GetAtt: - ExampleRole - Arn Runtime: nodejs12.x DependsOn: - ExampleRole "2.0" Function 'exports.handler = async () => ({ statusCode: 200, body: "Example" });' I guess you already spotted the important point here. The integration we create in the AWS Console is actually a . It’s used to integrate with many AWS services and the AWS Console just has a nice UI to make integrating with Lambda simpler. specific type of integration, called AWS_PROXY There are actually five types of API Gateway integrations. Three you can use for your WebSockets endpoints and two for the HTTP endpoints. HTTP Integration Types When you build a regular HTTP API. to integrate with Lambda, or other AWS services, like Step Functions. to pass-through a request to another HTTP endpoint.WebSocket Integration Types AWS_PROXY HTTP_PROXY When you build a WebSocket based HTTP API. to integrate with Lambda. AWS to integrate with other (i.e., third-party) HTTP APIs. HTTP to make a WebSocket endpoint work as a loop-back, without any other service involved. MOCK Summary Error messages are a common pain point for developers, but often the fix is quite simple. However, if you know a bit of background to the error’s origin, it can help to fix it faster in the future. To learn more about specific common serverless errors and how to fix them, make sure to visit our Event Library. Previously published at https://dashbird.io/blog/malformed-lambda-proxy-response/