apigateway-v2 — API Gateway v2 (HTTP & WebSocket)

A zero-dependency, in-process emulator for AWS API Gateway v2 (HTTP and WebSocket APIs). Speaks the REST/JSON protocol used by the AWS SDK @aws-sdk/client-apigatewayv2 and the raw REST API.

PropertyValue
Port4714
ProtocolREST / JSON
HealthGET /_parlel/health
ResetPOST /_parlel/reset

This is a separate service from the legacy apigateway stub (port 4579) and from apigateway-v1 (port 4715, REST APIs).

Quick start

import {
  ApiGatewayV2Client,
  CreateApiCommand,
  GetApisCommand,
} from "@aws-sdk/client-apigatewayv2";

const client = new ApiGatewayV2Client({
  endpoint: "http://127.0.0.1:4714",
  region: "us-east-1",
  credentials: { accessKeyId: "parlel", secretAccessKey: "parlel" },
});

const api = await client.send(new CreateApiCommand({
  Name: "my-api",
  ProtocolType: "HTTP",
}));
// api.ApiId => alphanumeric string

Implemented operations

All /v2/* routes accept and return application/json. State is in-memory and ephemeral (reset via POST /_parlel/reset).

APIs

Routes

Integrations

Stages

Deployments

Access via MCP / preview URL

Point any AWS SDK or MCP tool at the allocated preview URL via AWS_ENDPOINT_URL (default http://127.0.0.1:4714). The SDK handles authentication automatically; any non-empty credentials are accepted.

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

AreaStatus
CreateApi / GetApi / GetApis / DeleteApi✅ Supported
CreateRoute / GetRoute / GetRoutes / DeleteRoute✅ Supported
CreateIntegration / GetIntegration / GetIntegrations / DeleteIntegration✅ Supported
CreateStage / GetStage / GetStages / DeleteStage✅ Supported
CreateDeployment / GetDeployment / GetDeployments / DeleteDeployment✅ Supported
Correct AWS error envelope ({ message } + x-amzn-errortype header)✅ Supported
resourceType on NotFoundException for API lookups✅ Supported
Pagination (MaxResults / NextToken query params)⟳ Roadmap — list endpoints return all items
Update operations (UpdateApi, UpdateRoute, etc.)⟳ Roadmap
Authorizers / JWT / IAM auth⟳ Roadmap
Custom domains / API mappings⟳ Roadmap
Route-level throttling / request validation⟳ Roadmap
Actual request routing / Lambda invocation✓ By design — no real execution
Auth credential enforcement✓ By design — any non-empty credential accepted
Rate limiting (429 TooManyRequestsException)✓ By design — never throttles
Schema validation (disableSchemaValidation)✓ By design — not enforced

Error codes & shapes

Errors use the standard AWS REST JSON error envelope:

{ "message": "Human-readable error description" }

With response headers:

For NotFoundException on API lookups, the body also includes resourceType:

{ "message": "Invalid API identifier specified: abc123", "resourceType": "Api" }
StatusError TypeWhen
400BadRequestExceptionmissing required field, invalid ProtocolType, invalid IntegrationType
404NotFoundExceptionunknown API/resource ID, unsupported path
409ConflictExceptionduplicate StageName
429TooManyRequestsException(by design — not enforced locally)
500InternalServerErrorExceptionunhandled server error

Manifest

See services/apigateway-v2/manifest.json:

<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

AWS_ACCESS_KEY_ID=parlel
AWS_SECRET_ACCESS_KEY=parlel
AWS_REGION=us-east-1
AWS_ENDPOINT_URL=http://parlel-bridge:4714
<!-- parlel:testenv:end -->