# APIGatewayProxyEvent

**Kind:** Interface

**Source:** [`src/adapter/aws-lambda/handler.ts`](https://github.com/honojs/hono/blob/main/src/adapter/aws-lambda/handler.ts#L64)

**Part of:** [Adapter](subsystem-src-adapter)

`APIGatewayProxyEvent` describes the request payload passed from Amazon API Gateway to an AWS Lambda handler. It contains HTTP request data, headers, query parameters, body encoding details, route information, and API Gateway request context.

## Properties

| Property | Type |
|---|---|
| `version` | `string` |
| `httpMethod` | `string` |
| `headers` | `Record<string, string | undefined>` |
| `multiValueHeaders` | `{ [headerKey: string]: string[] }` |
| `path` | `string` |
| `body` | `string | null` |
| `isBase64Encoded` | `boolean` |
| `queryStringParameters` | `Record<string, string | undefined>` |
| `requestContext` | `ApiGatewayRequestContext` |
| `resource` | `string` |
| `multiValueQueryStringParameters` | `{ [parameterKey: string]: string[] }` |
| `pathParameters` | `Record<string, string>` |
| `stageVariables` | `Record<string, string>` |

## Diagram

```mermaid
graph LR
  APIGateway[API Gateway] --> Event[APIGatewayProxyEvent]
  Event --> Method[httpMethod]
  Event --> Route[path and resource]
  Event --> Headers[headers and multiValueHeaders]
  Event --> Query[queryStringParameters]
  Event --> Body[body and isBase64Encoded]
  Event --> Context[requestContext]
  Event --> Lambda[AWS Lambda Handler]
```

## Usage

```ts
import type { APIGatewayProxyEvent } from "./adapter/aws-lambda/handler";

export function readRequest(event: APIGatewayProxyEvent) {
  const body =
    event.body === null
      ? undefined
      : event.isBase64Encoded
        ? Buffer.from(event.body, "base64").toString("utf8")
        : event.body;

  return {
    method: event.httpMethod,
    path: event.path,
    contentType: event.headers["content-type"],
    query: event.queryStringParameters,
    body,
    requestContext: event.requestContext,
  };
}
```

## AI Coding Instructions

- Treat `body` as nullable and check `isBase64Encoded` before reading or parsing its contents.
- Read single-value headers from `headers`; preserve repeated header values from `multiValueHeaders`.
- Handle missing query string and header values because their record values may be `undefined`.
- Pass `requestContext` through to logging, tracing, or authorization code without assuming fields not defined by `ApiGatewayRequestContext`.
