# AWS API Gateway V2 Event

> AWS API Gateway v2 HTTP event with simplified routing and request context.

- Name: `aws-api-gateway-v2-event`
- Categories: aws
- Detail page: https://open-types.dev/types/aws-api-gateway-v2-event

## Install

```bash
# Types only
npx shadcn add @open-types/aws-api-gateway-v2-event

# Types + Zod v4 validators
npx shadcn add @open-types/aws-api-gateway-v2-event-zod

# Types + real-world examples
npx shadcn add @open-types/aws-api-gateway-v2-event-examples
```

## Types

```typescript
export interface AWSAPIGatewayV2Http {
  method: string;
  path: string;
  protocol: string;
  sourceIp: string;
  userAgent: string;
}

export interface AWSAPIGatewayV2RequestContext {
  accountId: string;
  apiId: string;
  domainName: string;
  domainPrefix: string;
  http: AWSAPIGatewayV2Http;
  requestId: string;
  routeKey: string;
  stage: string;
  time: string;
  timeEpoch: number;
}

export interface AWSAPIGatewayV2Event {
  version: "2.0";
  routeKey: string;
  rawPath: string;
  rawQueryString: string;
  headers: Record<string, string>;
  queryStringParameters?: Record<string, string>;
  pathParameters?: Record<string, string>;
  body?: string | null;
  isBase64Encoded: boolean;
  requestContext: AWSAPIGatewayV2RequestContext;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type {
  AWSAPIGatewayV2Http,
  AWSAPIGatewayV2RequestContext,
  AWSAPIGatewayV2Event,
} from "../types/aws-api-gateway-v2-event";

export const awsApiGatewayV2HttpSchema = z.object({
  method: z.string(),
  path: z.string(),
  protocol: z.string(),
  sourceIp: z.string(),
  userAgent: z.string(),
}) satisfies z.ZodType<AWSAPIGatewayV2Http>;

export const awsApiGatewayV2RequestContextSchema = z.object({
  accountId: z.string(),
  apiId: z.string(),
  domainName: z.string(),
  domainPrefix: z.string(),
  http: awsApiGatewayV2HttpSchema,
  requestId: z.string(),
  routeKey: z.string(),
  stage: z.string(),
  time: z.string(),
  timeEpoch: z.number(),
}) satisfies z.ZodType<AWSAPIGatewayV2RequestContext>;

export const awsApiGatewayV2EventSchema = z.object({
  version: z.literal("2.0"),
  routeKey: z.string(),
  rawPath: z.string(),
  rawQueryString: z.string(),
  headers: z.record(z.string(), z.string()),
  queryStringParameters: z.record(z.string(), z.string()).optional(),
  pathParameters: z.record(z.string(), z.string()).optional(),
  body: z.string().nullable().optional(),
  isBase64Encoded: z.boolean(),
  requestContext: awsApiGatewayV2RequestContextSchema,
}) satisfies z.ZodType<AWSAPIGatewayV2Event>;

export type {
  AWSAPIGatewayV2Http,
  AWSAPIGatewayV2RequestContext,
  AWSAPIGatewayV2Event,
} from "../types/aws-api-gateway-v2-event";
```

## Examples

```typescript
// Source: https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html
// Captured: 2026-05
import type {
  AWSAPIGatewayV2Http,
  AWSAPIGatewayV2RequestContext,
  AWSAPIGatewayV2Event,
} from "../types/aws-api-gateway-v2-event";

const http = {
  method: "POST",
  path: "/checkout",
  protocol: "HTTP/1.1",
  sourceIp: "198.51.100.42",
  userAgent: "Amazon CloudFront",
} as const satisfies AWSAPIGatewayV2Http;

export const awsApiGatewayV2HttpExamples = {
  post: http,
  get: { ...http, method: "GET", path: "/health" } satisfies AWSAPIGatewayV2Http,
  delete: { ...http, method: "DELETE", path: "/checkout/123" } satisfies AWSAPIGatewayV2Http,
} as const;

const requestContext = {
  accountId: "123456789012",
  apiId: "wxyz9876",
  domainName: "wxyz9876.execute-api.us-west-2.amazonaws.com",
  domainPrefix: "wxyz9876",
  http,
  requestId: "JfJ3ci7lvHcEMGg=",
  routeKey: "POST /checkout",
  stage: "$default",
  time: "13/Apr/2026:18:24:31 +0000",
  timeEpoch: 1776104671000,
} as const satisfies AWSAPIGatewayV2RequestContext;

export const awsApiGatewayV2RequestContextExamples = {
  default: requestContext,
  productionStage: { ...requestContext, stage: "production" } satisfies AWSAPIGatewayV2RequestContext,
} as const;

const minimal = {
  version: "2.0",
  routeKey: "POST /checkout",
  rawPath: "/checkout",
  rawQueryString: "coupon=SPRING26",
  headers: {
    host: "wxyz9876.execute-api.us-west-2.amazonaws.com",
    "content-type": "application/json",
  },
  isBase64Encoded: false,
  requestContext,
} as const satisfies AWSAPIGatewayV2Event;

export const awsApiGatewayV2EventExamples = {
  minimal,
  full: {
    ...minimal,
    queryStringParameters: { coupon: "SPRING26" },
    pathParameters: { proxy: "checkout" },
    body: '{"cartId":"cart_123"}',
  } satisfies AWSAPIGatewayV2Event,
  base64Body: {
    ...minimal,
    body: "eyJjYXJ0SWQiOiJjYXJ0XzEyMyJ9",
    isBase64Encoded: true,
  } satisfies AWSAPIGatewayV2Event,
  nullBody: { ...minimal, body: null } satisfies AWSAPIGatewayV2Event,
  rootRoute: {
    ...minimal,
    routeKey: "$default",
    rawPath: "/",
    rawQueryString: "",
  } satisfies AWSAPIGatewayV2Event,
} as const;
```
