[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-labs-api-gateway":3,"mdc--ej56b9-key":39,"related-org-aws-labs-api-gateway":2084,"related-repo-aws-labs-api-gateway":2263},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":34,"sourceUrl":37,"mdContent":38},"api-gateway","build and manage Amazon API Gateway APIs","Build, manage, and operate APIs with Amazon API Gateway (REST, HTTP, and WebSocket). Triggers on phrases like: API Gateway, REST API, HTTP API, WebSocket API, custom domain, Lambda authorizer, usage plan, throttling, CORS, VPC link, private API. Also covers troubleshooting API Gateway errors (4xx, 5xx, timeout, CORS failures) and IaC templates containing API Gateway resources. For general REST API design unrelated to AWS, do not trigger.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aws-labs","AWS Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws-labs.png","awslabs",[13,17,20],{"name":14,"slug":15,"type":16},"REST API","rest-api","tag",{"name":18,"slug":19,"type":16},"API Development","api-development",{"name":21,"slug":22,"type":16},"AWS","aws",831,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagent-plugins","2026-07-12T08:39:00.149339",null,127,[29,30,31,22,32,33],"agent-plugins","agent-skills","agents","coding-agent-skills","coding-agents",{"repoUrl":24,"stars":23,"forks":27,"topics":35,"description":36},[29,30,31,22,32,33],"Agent Plugins for AWS equip AI coding agents with the skills to help you architect, deploy, and operate on AWS.","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagent-plugins\u002Ftree\u002FHEAD\u002Fplugins\u002Faws-serverless\u002Fskills\u002Fapi-gateway","---\nname: api-gateway\ndescription: >\n  Build, manage, and operate APIs with Amazon API Gateway (REST, HTTP, and WebSocket).\n  Triggers on phrases like: API Gateway, REST API, HTTP API, WebSocket API, custom domain, Lambda authorizer, usage plan, throttling, CORS, VPC link, private API.\n  Also covers troubleshooting API Gateway errors (4xx, 5xx, timeout, CORS failures) and IaC templates containing API Gateway resources.\n  For general REST API design unrelated to AWS, do not trigger.\nmetadata:\n  tags: [api-gateway, serverless, aws, rest-api, http-api, websocket]\n---\n\n# Amazon API Gateway Development\n\nExpert guidance for building, managing, governing, and operating APIs with Amazon API Gateway. Covers REST APIs (v1), HTTP APIs (v2), and WebSocket APIs.\n\n## How to Use This Skill\n\nWhen answering API Gateway questions:\n\n1. Read the relevant reference file(s) before responding, do not rely solely on this summary\n2. For tasks spanning multiple concerns (e.g., \"private API with mTLS and custom domain\"), read all relevant references\n3. When the user needs IaC templates, consult `references\u002Fsam-cloudformation.md` or `references\u002Fsam-service-integrations.md` and provide complete, working SAM\u002FCloudFormation YAML\n4. Always mention relevant pitfalls and limits that affect the user's design\n\n## Quick Decision: Which API Type?\n\nChoose the right API type first. This decision affects every downstream choice.\n\n**REST API** is the full-featured API management platform for enterprises. It provides the governance, security, monetization, and operational controls that organizations need to build, publish, and manage APIs at scale, including usage plans with per-consumer throttling and quotas, API keys, request validation, WAF integration, resource policies, caching, canary deployments, and private endpoints.\n\n**HTTP API** is the lightweight, low-cost proxy optimized for simpler API workloads. It offers ~70% lower cost and lower latency but trades away the API management features. Choose HTTP API when you need a fast, lightweight proxy to Lambda or HTTP backends and don't require the enterprise controls above.\n\n| Factor                    | REST API (v1)                          | HTTP API (v2)                                  | WebSocket API                  |\n| ------------------------- | -------------------------------------- | ---------------------------------------------- | ------------------------------ |\n| **Positioning**           | **Full API management**                | **Low-cost proxy**                             | **Real-time bidirectional**    |\n| Cost                      | Higher                                 | ~70% cheaper                                   | Per-message pricing            |\n| Latency                   | Higher                                 | Lower                                          | Persistent connection          |\n| Max timeout               | 50ms-29s (up to 300s Regional\u002FPrivate) | 30s hard limit                                 | 29s                            |\n| Payload                   | 10 MB                                  | 10 MB                                          | 128 KB message \u002F 32 KB frame   |\n| **API Management**        |                                        |                                                |                                |\n| Usage plans\u002FAPI keys      | Yes                                    | No                                             | No                             |\n| Request validation        | Yes (JSON Schema draft 4)              | No                                             | No                             |\n| Caching                   | Yes (0.5-237 GB)                       | No                                             | No                             |\n| Custom gateway responses  | Yes                                    | No                                             | No                             |\n| VTL mapping templates     | Yes                                    | No (parameter mapping only)                    | Yes                            |\n| **Security & Governance** |                                        |                                                |                                |\n| WAF                       | Yes                                    | No (use CloudFront + WAF)                      | No                             |\n| Resource policies         | Yes                                    | No                                             | No                             |\n| Private endpoints         | Yes                                    | No                                             | No                             |\n| mTLS                      | Yes (Regional custom domain only)      | Yes (Regional custom domain only)              | Via CloudFront viewer mTLS     |\n| **Auth**                  |                                        |                                                |                                |\n| Lambda authorizer         | Yes (TOKEN + REQUEST)                  | Yes (REQUEST only, simple + IAM policy format) | Yes (REQUEST on $connect only) |\n| JWT authorizer            | No (use Cognito authorizer)            | Yes (native)                                   | No                             |\n| Cognito authorizer        | Yes (native)                           | Use JWT authorizer                             | No                             |\n| **Operations**            |                                        |                                                |                                |\n| Canary deployments        | Yes                                    | No                                             | No                             |\n| Response streaming        | Yes                                    | No                                             | No                             |\n| X-Ray tracing             | Yes                                    | No                                             | No                             |\n| Execution logging         | Yes                                    | No                                             | Yes                            |\n| Custom domain sharing     | Not with WebSocket                     | Not with WebSocket                             | Not with REST\u002FHTTP             |\n\n**Use REST API when**: you are building APIs for external consumers, partners, or multi-tenant platforms; need to enforce per-consumer rate limits and quotas; require request validation, caching, or WAF at the API layer; need private endpoints, resource policies, or canary deployments; or are building an API product with monetization and governance requirements.\n\n**Use HTTP API when**: you are building lightweight APIs or simple backend proxies; cost and latency are the primary concerns; you don't need per-consumer throttling, request validation, caching, or WAF at the API layer; and native JWT authorization with OIDC\u002FOAuth 2.0 meets your auth needs. Accept the hard 30s timeout and lack of API management features. For WAF, edge caching, or edge compute, place a CloudFront distribution in front of the HTTP API.\n\n**Use WebSocket API when you need**: persistent bidirectional connections for real-time use cases (chat, notifications, live dashboards).\n\n## Instructions\n\n### Step 1: Design the API\n\nBefore implementation, gather requirements systematically. Consult `references\u002Frequirements-gathering.md` for the full requirements workflow covering endpoints, auth, data models, performance, security, and deployment needs.\n\nKey design decisions:\n\n1. **API type**: Use the decision table above\n2. **Endpoint type**: Edge-optimized (default for global clients; optimizes TCP connections via CloudFront POPs but does not cache at the edge), Regional (same-region clients, or global clients needing their own CloudFront distribution for edge caching, edge compute, granular WAF control, or geo-based routing), Private (VPC-only access, REST API only)\n3. **Topology**: Centralized (single domain, path-based routing) vs Distributed (subdomains per service)\n4. **Authentication**: See `references\u002Fauthentication.md` for the decision tree\n\n### Step 2: Implement the API\n\nConsult these references based on what you're building:\n\n- **Architecture patterns**: `references\u002Farchitecture-patterns.md`: topology, multi-tenant SaaS, hybrid workloads, private APIs, multi-region, streaming\n- **WebSocket API**: `references\u002Fwebsocket.md`: route selection, @connections management, session management, client resilience, SAM templates, limits, multi-region\n- **Service integrations**: `references\u002Fservice-integrations.md`: direct AWS service integrations (EventBridge, SQS, SNS, DynamoDB, Kinesis, Step Functions, S3), HTTP proxy, mock, VTL mapping templates, binary media types, Lambda sync\u002Fasync invocation\n- **Custom domains and routing**: `references\u002Fcustom-domains-routing.md`: base path mappings, routing rules, header-based versioning\n- **Security**: `references\u002Fsecurity.md`: mTLS (API Gateway native + CloudFront viewer mTLS), TLS policies, resource policies, WAF, HttpOnly cookies, CRL checks\n- **SAM\u002FCloudFormation**: `references\u002Fsam-cloudformation.md`: IaC patterns, OpenAPI extensions, VTL reference, binary data\n- **SAM service integration templates**: `references\u002Fsam-service-integrations.md`: EventBridge, SQS, DynamoDB CRUD, Kinesis, Step Functions (REST + WebSocket) templates\n\n### Step 3: Configure Performance and Scaling\n\n- **Throttling**: Account-level default is 10,000 rps \u002F 5,000 burst (adjustable; request increases via AWS Support). Configure stage-level and method-level throttling via usage plans. See `references\u002Fperformance-scaling.md`\n- **Caching** (REST only): Default TTL 300s, max 3600s. Only GET methods cached by default. Max cached response 1 MB\n- **Edge caching** (all API types): For edge caching, place a self-managed CloudFront distribution in front of a Regional API. CloudFront reduces latency, backend load, AND cost (cached responses never reach API Gateway). Also enables edge compute (CloudFront Functions, Lambda@Edge) and granular cache behaviors per path. Use a Regional endpoint, not edge-optimized, when pairing with your own CloudFront distribution\n- **Scaling**: API Gateway scales automatically but plan the entire stack (Lambda concurrency, DynamoDB capacity)\n\n### Step 4: Set Up Observability\n\nAlways configure access logging. For REST and WebSocket APIs, also enable execution logging (ERROR level for production, INFO only for debugging). **HTTP API does not support execution logging**; use access logs with enhanced observability variables instead.\n\nConsult the observability references based on what you need:\n\n- **Logging setup, log formats, retention**: `references\u002Fobservability-logging.md`\n- **Metrics, alarms, metric filters, X-Ray tracing**: `references\u002Fobservability-metrics-alarms.md`\n- **Log analysis and insights, analytics pipeline, cross-account, control plane logs**: `references\u002Fobservability-analytics.md`\n\n### Step 5: Deploy\n\n- Use Infrastructure as Code (SAM, CDK, CloudFormation, Terraform) for production\n- **Canary deployments** (REST only): Route a percentage of traffic to test new versions\n- **Blue\u002Fgreen deployments**: Use custom domain API mappings to switch between environments with zero downtime\n- **Routing rules** (preferred for new domains): Declarative header\u002Fpath-based routing on custom domains for versioning, A\u002FB testing, gradual rollouts, and cell-based routing\n- See `references\u002Fdeployment.md` for detailed patterns\n\n### Step 6: Apply Governance\n\nFor organization-wide API standards, see `references\u002Fgovernance.md` covering:\n\n- Preventative controls (SCPs, IAM policies)\n- Proactive controls (CloudFormation Hooks, Guard rules)\n- Detective controls (AWS Config rules, EventBridge)\n- Specific enforcement examples for security, observability, and management\n\n## Response Format\n\nWhen responding to API Gateway questions, structure your answer as:\n\n1. **Recommendation**: Lead with the recommended approach and why\n2. **Code**: Include SAM\u002FCloudFormation YAML or code when the user needs implementation (always read the relevant reference file first)\n3. **Pitfalls**: Warn about relevant gotchas from the pitfalls below or from `references\u002Fpitfalls.md`\n4. **Limits**: Mention any service limits that constrain the design\n\n## Troubleshooting Quick Reference\n\nWhen diagnosing API Gateway errors, consult `references\u002Ftroubleshooting.md` for detailed resolution steps. Here are the most common issues:\n\n| Error                  | Most Common Cause                                                                                                       | Quick Fix                                                                                         |\n| ---------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |\n| 400 Bad Request        | Protocol mismatch (HTTP\u002FHTTPS) with ALB                                                                                 | Match protocol to listener type                                                                   |\n| 401 Unauthorized       | Wrong token type (ID vs access) or missing identity sources                                                             | Check token type matches scope config; verify all identity sources sent                           |\n| 403 Missing Auth Token | Stage name in URL when using custom domain                                                                              | Remove stage name from URL path                                                                   |\n| 403 from VPC           | Private DNS on VPC endpoint intercepts ALL API calls                                                                    | Use custom domain names for public APIs                                                           |\n| 403 Access Denied      | Resource policy + auth type mismatch or missing redeployment                                                            | Review policy, check auth type, redeploy API                                                      |\n| 403 mTLS               | Certificate issuer not in truststore or weak signature algorithm                                                        | Verify CA in truststore, use SHA-256+                                                             |\n| 429 Too Many Requests  | Account\u002Fstage\u002Fmethod throttle limits exceeded                                                                           | Implement jittered exponential backoff; request limit increase                                    |\n| 500 Internal Error     | Missing Lambda invoke permission (especially with stage variables)                                                      | Add resource-based policy to Lambda function                                                      |\n| 502 Bad Gateway        | Lambda response not in required proxy format                                                                            | Return `{statusCode, headers, body}` from Lambda                                                  |\n| 504 Timeout            | Backend exceeds 29s (REST, increasable) or 30s (HTTP, hard). HTTP API body says \"Service Unavailable\" but status is 504 | Optimize backend, request timeout increase (REST Regional\u002FPrivate), or switch to async invocation |\n| CORS errors            | Missing CORS headers on Gateway Responses (4XX\u002F5XX)                                                                     | Add CORS headers to DEFAULT_4XX and DEFAULT_5XX gateway responses                                 |\n| SSL\u002FPKIX errors        | Incomplete certificate chain on backend                                                                                 | Provide full cert chain; use `insecureSkipVerification` only for testing                          |\n\n## Critical Pitfalls\n\n1. **REST API default timeout is 29 seconds** (increasable up to 300s for Regional\u002FPrivate endpoints via quota request). Lambda continues running but client gets 504. Request a timeout increase, or consider async patterns (SQS, EventBridge) for better user experience on long operations\n2. **HTTP API hard timeout is 30 seconds**. Returns `{\"message\":\"Service Unavailable\"}` while Lambda continues\n3. **`\u002Fping` and `\u002Fsping` are reserved paths**. Do not use for API resources\n4. **Execution log events truncated at 1,024 bytes**. Use access logs for complete data\n5. **413 `REQUEST_TOO_LARGE` is the only gateway response that cannot be customized**. Use DEFAULT_4XX as a catch-all to add CORS headers for all 4xx errors including 413\n6. **`maxItems`\u002F`minItems` not validated** in REST API request validation\n7. **Root-level `security` in OpenAPI is ignored**. Must set per-operation\n8. **JWT authorizer public keys cached 2 hours**. Account for this in key rotation\n9. **Management API rate limit: 10 rps \u002F 40 burst**. Heavy automation can hit this\n10. **Always redeploy REST API after configuration changes**. Changes don't take effect until deployed\n11. **Edge-optimized endpoints do NOT cache at the edge** — they only optimize TCP connections via CloudFront POPs. If you need edge caching, edge compute (CloudFront Functions, Lambda@Edge), or granular CloudFront control, use a Regional API with your own CloudFront distribution instead\n\nFor additional pitfalls (header handling, URL encoding, caching charges, canary deployments, usage plans), see `references\u002Fpitfalls.md`.\n\n## IaC Framework Selection\n\nDefault: CDK TypeScript\n\nOverride syntax:\n\n- \"use SAM\" → Generate SAM\u002FCloudFormation YAML templates\n- \"use CloudFormation\" → Generate CloudFormation YAML templates\n- \"use Terraform\" → Generate Terraform HCL\n\nWhen not specified, ALWAYS use CDK TypeScript.\n\n## Error Scenarios\n\n### MCP Server Unavailable\n\n- Inform user: \"AWS Serverless MCP not responding\"\n- Ask: \"Proceed without MCP support?\"\n- DO NOT continue without user confirmation\n\n## Service Limits Quick Reference\n\nSee `references\u002Fservice-limits.md` for the complete table. **Most numeric quotas below are default values and adjustable**; check with your AWS account team and the [latest quotas page](https:\u002F\u002Fdocs.aws.amazon.com\u002Fapigateway\u002Flatest\u002Fdeveloperguide\u002Flimits.html) before using them for architectural decisions. Key limits:\n\n| Resource                 | REST API                                 | HTTP API | WebSocket           |\n| ------------------------ | ---------------------------------------- | -------- | ------------------- |\n| Payload size             | 10 MB                                    | 10 MB    | 128 KB              |\n| Integration timeout      | 50ms-29s (up to 300s Regional\u002FPrivate)   | 30s hard | 29s                 |\n| APIs per region          | 600 Regional\u002FPrivate; 120 Edge-optimized | 600      | 600                 |\n| Stages per API           | 10                                       | 10       | 10                  |\n| Routes\u002Fresources per API | 300                                      | 300      | 300                 |\n| Custom domains (public)  | 120                                      | 120      | 120                 |\n| Account throttle         | 10,000 rps \u002F 5,000 burst                 | Same     | Same (shared quota) |\n| API keys per region      | 10,000                                   | N\u002FA      | N\u002FA                 |\n| Usage plans per region   | 300                                      | N\u002FA      | N\u002FA                 |\n| Cache sizes              | 0.5 GB - 237 GB                          | N\u002FA      | N\u002FA                 |\n",{"data":40,"body":46},{"name":4,"description":6,"metadata":41},{"tags":42},[4,43,22,15,44,45],"serverless","http-api","websocket",{"type":47,"children":48},"root",[49,58,64,71,76,118,124,129,139,149,748,758,768,778,784,791,804,809,860,866,871,992,998,1046,1052,1064,1069,1117,1123,1173,1179,1192,1215,1221,1226,1275,1281,1294,1553,1559,1724,1736,1742,1747,1752,1770,1775,1781,1787,1805,1811,1841],{"type":50,"tag":51,"props":52,"children":54},"element","h1",{"id":53},"amazon-api-gateway-development",[55],{"type":56,"value":57},"text","Amazon API Gateway Development",{"type":50,"tag":59,"props":60,"children":61},"p",{},[62],{"type":56,"value":63},"Expert guidance for building, managing, governing, and operating APIs with Amazon API Gateway. Covers REST APIs (v1), HTTP APIs (v2), and WebSocket APIs.",{"type":50,"tag":65,"props":66,"children":68},"h2",{"id":67},"how-to-use-this-skill",[69],{"type":56,"value":70},"How to Use This Skill",{"type":50,"tag":59,"props":72,"children":73},{},[74],{"type":56,"value":75},"When answering API Gateway questions:",{"type":50,"tag":77,"props":78,"children":79},"ol",{},[80,86,91,113],{"type":50,"tag":81,"props":82,"children":83},"li",{},[84],{"type":56,"value":85},"Read the relevant reference file(s) before responding, do not rely solely on this summary",{"type":50,"tag":81,"props":87,"children":88},{},[89],{"type":56,"value":90},"For tasks spanning multiple concerns (e.g., \"private API with mTLS and custom domain\"), read all relevant references",{"type":50,"tag":81,"props":92,"children":93},{},[94,96,103,105,111],{"type":56,"value":95},"When the user needs IaC templates, consult ",{"type":50,"tag":97,"props":98,"children":100},"code",{"className":99},[],[101],{"type":56,"value":102},"references\u002Fsam-cloudformation.md",{"type":56,"value":104}," or ",{"type":50,"tag":97,"props":106,"children":108},{"className":107},[],[109],{"type":56,"value":110},"references\u002Fsam-service-integrations.md",{"type":56,"value":112}," and provide complete, working SAM\u002FCloudFormation YAML",{"type":50,"tag":81,"props":114,"children":115},{},[116],{"type":56,"value":117},"Always mention relevant pitfalls and limits that affect the user's design",{"type":50,"tag":65,"props":119,"children":121},{"id":120},"quick-decision-which-api-type",[122],{"type":56,"value":123},"Quick Decision: Which API Type?",{"type":50,"tag":59,"props":125,"children":126},{},[127],{"type":56,"value":128},"Choose the right API type first. This decision affects every downstream choice.",{"type":50,"tag":59,"props":130,"children":131},{},[132,137],{"type":50,"tag":133,"props":134,"children":135},"strong",{},[136],{"type":56,"value":14},{"type":56,"value":138}," is the full-featured API management platform for enterprises. It provides the governance, security, monetization, and operational controls that organizations need to build, publish, and manage APIs at scale, including usage plans with per-consumer throttling and quotas, API keys, request validation, WAF integration, resource policies, caching, canary deployments, and private endpoints.",{"type":50,"tag":59,"props":140,"children":141},{},[142,147],{"type":50,"tag":133,"props":143,"children":144},{},[145],{"type":56,"value":146},"HTTP API",{"type":56,"value":148}," is the lightweight, low-cost proxy optimized for simpler API workloads. It offers ~70% lower cost and lower latency but trades away the API management features. Choose HTTP API when you need a fast, lightweight proxy to Lambda or HTTP backends and don't require the enterprise controls above.",{"type":50,"tag":150,"props":151,"children":152},"table",{},[153,182],{"type":50,"tag":154,"props":155,"children":156},"thead",{},[157],{"type":50,"tag":158,"props":159,"children":160},"tr",{},[161,167,172,177],{"type":50,"tag":162,"props":163,"children":164},"th",{},[165],{"type":56,"value":166},"Factor",{"type":50,"tag":162,"props":168,"children":169},{},[170],{"type":56,"value":171},"REST API (v1)",{"type":50,"tag":162,"props":173,"children":174},{},[175],{"type":56,"value":176},"HTTP API (v2)",{"type":50,"tag":162,"props":178,"children":179},{},[180],{"type":56,"value":181},"WebSocket API",{"type":50,"tag":183,"props":184,"children":185},"tbody",{},[186,222,245,267,290,312,332,354,375,396,416,437,457,478,498,518,540,560,583,605,626,646,666,686,706,726],{"type":50,"tag":158,"props":187,"children":188},{},[189,198,206,214],{"type":50,"tag":190,"props":191,"children":192},"td",{},[193],{"type":50,"tag":133,"props":194,"children":195},{},[196],{"type":56,"value":197},"Positioning",{"type":50,"tag":190,"props":199,"children":200},{},[201],{"type":50,"tag":133,"props":202,"children":203},{},[204],{"type":56,"value":205},"Full API management",{"type":50,"tag":190,"props":207,"children":208},{},[209],{"type":50,"tag":133,"props":210,"children":211},{},[212],{"type":56,"value":213},"Low-cost proxy",{"type":50,"tag":190,"props":215,"children":216},{},[217],{"type":50,"tag":133,"props":218,"children":219},{},[220],{"type":56,"value":221},"Real-time bidirectional",{"type":50,"tag":158,"props":223,"children":224},{},[225,230,235,240],{"type":50,"tag":190,"props":226,"children":227},{},[228],{"type":56,"value":229},"Cost",{"type":50,"tag":190,"props":231,"children":232},{},[233],{"type":56,"value":234},"Higher",{"type":50,"tag":190,"props":236,"children":237},{},[238],{"type":56,"value":239},"~70% cheaper",{"type":50,"tag":190,"props":241,"children":242},{},[243],{"type":56,"value":244},"Per-message pricing",{"type":50,"tag":158,"props":246,"children":247},{},[248,253,257,262],{"type":50,"tag":190,"props":249,"children":250},{},[251],{"type":56,"value":252},"Latency",{"type":50,"tag":190,"props":254,"children":255},{},[256],{"type":56,"value":234},{"type":50,"tag":190,"props":258,"children":259},{},[260],{"type":56,"value":261},"Lower",{"type":50,"tag":190,"props":263,"children":264},{},[265],{"type":56,"value":266},"Persistent connection",{"type":50,"tag":158,"props":268,"children":269},{},[270,275,280,285],{"type":50,"tag":190,"props":271,"children":272},{},[273],{"type":56,"value":274},"Max timeout",{"type":50,"tag":190,"props":276,"children":277},{},[278],{"type":56,"value":279},"50ms-29s (up to 300s Regional\u002FPrivate)",{"type":50,"tag":190,"props":281,"children":282},{},[283],{"type":56,"value":284},"30s hard limit",{"type":50,"tag":190,"props":286,"children":287},{},[288],{"type":56,"value":289},"29s",{"type":50,"tag":158,"props":291,"children":292},{},[293,298,303,307],{"type":50,"tag":190,"props":294,"children":295},{},[296],{"type":56,"value":297},"Payload",{"type":50,"tag":190,"props":299,"children":300},{},[301],{"type":56,"value":302},"10 MB",{"type":50,"tag":190,"props":304,"children":305},{},[306],{"type":56,"value":302},{"type":50,"tag":190,"props":308,"children":309},{},[310],{"type":56,"value":311},"128 KB message \u002F 32 KB frame",{"type":50,"tag":158,"props":313,"children":314},{},[315,323,326,329],{"type":50,"tag":190,"props":316,"children":317},{},[318],{"type":50,"tag":133,"props":319,"children":320},{},[321],{"type":56,"value":322},"API Management",{"type":50,"tag":190,"props":324,"children":325},{},[],{"type":50,"tag":190,"props":327,"children":328},{},[],{"type":50,"tag":190,"props":330,"children":331},{},[],{"type":50,"tag":158,"props":333,"children":334},{},[335,340,345,350],{"type":50,"tag":190,"props":336,"children":337},{},[338],{"type":56,"value":339},"Usage plans\u002FAPI keys",{"type":50,"tag":190,"props":341,"children":342},{},[343],{"type":56,"value":344},"Yes",{"type":50,"tag":190,"props":346,"children":347},{},[348],{"type":56,"value":349},"No",{"type":50,"tag":190,"props":351,"children":352},{},[353],{"type":56,"value":349},{"type":50,"tag":158,"props":355,"children":356},{},[357,362,367,371],{"type":50,"tag":190,"props":358,"children":359},{},[360],{"type":56,"value":361},"Request validation",{"type":50,"tag":190,"props":363,"children":364},{},[365],{"type":56,"value":366},"Yes (JSON Schema draft 4)",{"type":50,"tag":190,"props":368,"children":369},{},[370],{"type":56,"value":349},{"type":50,"tag":190,"props":372,"children":373},{},[374],{"type":56,"value":349},{"type":50,"tag":158,"props":376,"children":377},{},[378,383,388,392],{"type":50,"tag":190,"props":379,"children":380},{},[381],{"type":56,"value":382},"Caching",{"type":50,"tag":190,"props":384,"children":385},{},[386],{"type":56,"value":387},"Yes (0.5-237 GB)",{"type":50,"tag":190,"props":389,"children":390},{},[391],{"type":56,"value":349},{"type":50,"tag":190,"props":393,"children":394},{},[395],{"type":56,"value":349},{"type":50,"tag":158,"props":397,"children":398},{},[399,404,408,412],{"type":50,"tag":190,"props":400,"children":401},{},[402],{"type":56,"value":403},"Custom gateway responses",{"type":50,"tag":190,"props":405,"children":406},{},[407],{"type":56,"value":344},{"type":50,"tag":190,"props":409,"children":410},{},[411],{"type":56,"value":349},{"type":50,"tag":190,"props":413,"children":414},{},[415],{"type":56,"value":349},{"type":50,"tag":158,"props":417,"children":418},{},[419,424,428,433],{"type":50,"tag":190,"props":420,"children":421},{},[422],{"type":56,"value":423},"VTL mapping templates",{"type":50,"tag":190,"props":425,"children":426},{},[427],{"type":56,"value":344},{"type":50,"tag":190,"props":429,"children":430},{},[431],{"type":56,"value":432},"No (parameter mapping only)",{"type":50,"tag":190,"props":434,"children":435},{},[436],{"type":56,"value":344},{"type":50,"tag":158,"props":438,"children":439},{},[440,448,451,454],{"type":50,"tag":190,"props":441,"children":442},{},[443],{"type":50,"tag":133,"props":444,"children":445},{},[446],{"type":56,"value":447},"Security & Governance",{"type":50,"tag":190,"props":449,"children":450},{},[],{"type":50,"tag":190,"props":452,"children":453},{},[],{"type":50,"tag":190,"props":455,"children":456},{},[],{"type":50,"tag":158,"props":458,"children":459},{},[460,465,469,474],{"type":50,"tag":190,"props":461,"children":462},{},[463],{"type":56,"value":464},"WAF",{"type":50,"tag":190,"props":466,"children":467},{},[468],{"type":56,"value":344},{"type":50,"tag":190,"props":470,"children":471},{},[472],{"type":56,"value":473},"No (use CloudFront + WAF)",{"type":50,"tag":190,"props":475,"children":476},{},[477],{"type":56,"value":349},{"type":50,"tag":158,"props":479,"children":480},{},[481,486,490,494],{"type":50,"tag":190,"props":482,"children":483},{},[484],{"type":56,"value":485},"Resource policies",{"type":50,"tag":190,"props":487,"children":488},{},[489],{"type":56,"value":344},{"type":50,"tag":190,"props":491,"children":492},{},[493],{"type":56,"value":349},{"type":50,"tag":190,"props":495,"children":496},{},[497],{"type":56,"value":349},{"type":50,"tag":158,"props":499,"children":500},{},[501,506,510,514],{"type":50,"tag":190,"props":502,"children":503},{},[504],{"type":56,"value":505},"Private endpoints",{"type":50,"tag":190,"props":507,"children":508},{},[509],{"type":56,"value":344},{"type":50,"tag":190,"props":511,"children":512},{},[513],{"type":56,"value":349},{"type":50,"tag":190,"props":515,"children":516},{},[517],{"type":56,"value":349},{"type":50,"tag":158,"props":519,"children":520},{},[521,526,531,535],{"type":50,"tag":190,"props":522,"children":523},{},[524],{"type":56,"value":525},"mTLS",{"type":50,"tag":190,"props":527,"children":528},{},[529],{"type":56,"value":530},"Yes (Regional custom domain only)",{"type":50,"tag":190,"props":532,"children":533},{},[534],{"type":56,"value":530},{"type":50,"tag":190,"props":536,"children":537},{},[538],{"type":56,"value":539},"Via CloudFront viewer mTLS",{"type":50,"tag":158,"props":541,"children":542},{},[543,551,554,557],{"type":50,"tag":190,"props":544,"children":545},{},[546],{"type":50,"tag":133,"props":547,"children":548},{},[549],{"type":56,"value":550},"Auth",{"type":50,"tag":190,"props":552,"children":553},{},[],{"type":50,"tag":190,"props":555,"children":556},{},[],{"type":50,"tag":190,"props":558,"children":559},{},[],{"type":50,"tag":158,"props":561,"children":562},{},[563,568,573,578],{"type":50,"tag":190,"props":564,"children":565},{},[566],{"type":56,"value":567},"Lambda authorizer",{"type":50,"tag":190,"props":569,"children":570},{},[571],{"type":56,"value":572},"Yes (TOKEN + REQUEST)",{"type":50,"tag":190,"props":574,"children":575},{},[576],{"type":56,"value":577},"Yes (REQUEST only, simple + IAM policy format)",{"type":50,"tag":190,"props":579,"children":580},{},[581],{"type":56,"value":582},"Yes (REQUEST on $connect only)",{"type":50,"tag":158,"props":584,"children":585},{},[586,591,596,601],{"type":50,"tag":190,"props":587,"children":588},{},[589],{"type":56,"value":590},"JWT authorizer",{"type":50,"tag":190,"props":592,"children":593},{},[594],{"type":56,"value":595},"No (use Cognito authorizer)",{"type":50,"tag":190,"props":597,"children":598},{},[599],{"type":56,"value":600},"Yes (native)",{"type":50,"tag":190,"props":602,"children":603},{},[604],{"type":56,"value":349},{"type":50,"tag":158,"props":606,"children":607},{},[608,613,617,622],{"type":50,"tag":190,"props":609,"children":610},{},[611],{"type":56,"value":612},"Cognito authorizer",{"type":50,"tag":190,"props":614,"children":615},{},[616],{"type":56,"value":600},{"type":50,"tag":190,"props":618,"children":619},{},[620],{"type":56,"value":621},"Use JWT authorizer",{"type":50,"tag":190,"props":623,"children":624},{},[625],{"type":56,"value":349},{"type":50,"tag":158,"props":627,"children":628},{},[629,637,640,643],{"type":50,"tag":190,"props":630,"children":631},{},[632],{"type":50,"tag":133,"props":633,"children":634},{},[635],{"type":56,"value":636},"Operations",{"type":50,"tag":190,"props":638,"children":639},{},[],{"type":50,"tag":190,"props":641,"children":642},{},[],{"type":50,"tag":190,"props":644,"children":645},{},[],{"type":50,"tag":158,"props":647,"children":648},{},[649,654,658,662],{"type":50,"tag":190,"props":650,"children":651},{},[652],{"type":56,"value":653},"Canary deployments",{"type":50,"tag":190,"props":655,"children":656},{},[657],{"type":56,"value":344},{"type":50,"tag":190,"props":659,"children":660},{},[661],{"type":56,"value":349},{"type":50,"tag":190,"props":663,"children":664},{},[665],{"type":56,"value":349},{"type":50,"tag":158,"props":667,"children":668},{},[669,674,678,682],{"type":50,"tag":190,"props":670,"children":671},{},[672],{"type":56,"value":673},"Response streaming",{"type":50,"tag":190,"props":675,"children":676},{},[677],{"type":56,"value":344},{"type":50,"tag":190,"props":679,"children":680},{},[681],{"type":56,"value":349},{"type":50,"tag":190,"props":683,"children":684},{},[685],{"type":56,"value":349},{"type":50,"tag":158,"props":687,"children":688},{},[689,694,698,702],{"type":50,"tag":190,"props":690,"children":691},{},[692],{"type":56,"value":693},"X-Ray tracing",{"type":50,"tag":190,"props":695,"children":696},{},[697],{"type":56,"value":344},{"type":50,"tag":190,"props":699,"children":700},{},[701],{"type":56,"value":349},{"type":50,"tag":190,"props":703,"children":704},{},[705],{"type":56,"value":349},{"type":50,"tag":158,"props":707,"children":708},{},[709,714,718,722],{"type":50,"tag":190,"props":710,"children":711},{},[712],{"type":56,"value":713},"Execution logging",{"type":50,"tag":190,"props":715,"children":716},{},[717],{"type":56,"value":344},{"type":50,"tag":190,"props":719,"children":720},{},[721],{"type":56,"value":349},{"type":50,"tag":190,"props":723,"children":724},{},[725],{"type":56,"value":344},{"type":50,"tag":158,"props":727,"children":728},{},[729,734,739,743],{"type":50,"tag":190,"props":730,"children":731},{},[732],{"type":56,"value":733},"Custom domain sharing",{"type":50,"tag":190,"props":735,"children":736},{},[737],{"type":56,"value":738},"Not with WebSocket",{"type":50,"tag":190,"props":740,"children":741},{},[742],{"type":56,"value":738},{"type":50,"tag":190,"props":744,"children":745},{},[746],{"type":56,"value":747},"Not with REST\u002FHTTP",{"type":50,"tag":59,"props":749,"children":750},{},[751,756],{"type":50,"tag":133,"props":752,"children":753},{},[754],{"type":56,"value":755},"Use REST API when",{"type":56,"value":757},": you are building APIs for external consumers, partners, or multi-tenant platforms; need to enforce per-consumer rate limits and quotas; require request validation, caching, or WAF at the API layer; need private endpoints, resource policies, or canary deployments; or are building an API product with monetization and governance requirements.",{"type":50,"tag":59,"props":759,"children":760},{},[761,766],{"type":50,"tag":133,"props":762,"children":763},{},[764],{"type":56,"value":765},"Use HTTP API when",{"type":56,"value":767},": you are building lightweight APIs or simple backend proxies; cost and latency are the primary concerns; you don't need per-consumer throttling, request validation, caching, or WAF at the API layer; and native JWT authorization with OIDC\u002FOAuth 2.0 meets your auth needs. Accept the hard 30s timeout and lack of API management features. For WAF, edge caching, or edge compute, place a CloudFront distribution in front of the HTTP API.",{"type":50,"tag":59,"props":769,"children":770},{},[771,776],{"type":50,"tag":133,"props":772,"children":773},{},[774],{"type":56,"value":775},"Use WebSocket API when you need",{"type":56,"value":777},": persistent bidirectional connections for real-time use cases (chat, notifications, live dashboards).",{"type":50,"tag":65,"props":779,"children":781},{"id":780},"instructions",[782],{"type":56,"value":783},"Instructions",{"type":50,"tag":785,"props":786,"children":788},"h3",{"id":787},"step-1-design-the-api",[789],{"type":56,"value":790},"Step 1: Design the API",{"type":50,"tag":59,"props":792,"children":793},{},[794,796,802],{"type":56,"value":795},"Before implementation, gather requirements systematically. Consult ",{"type":50,"tag":97,"props":797,"children":799},{"className":798},[],[800],{"type":56,"value":801},"references\u002Frequirements-gathering.md",{"type":56,"value":803}," for the full requirements workflow covering endpoints, auth, data models, performance, security, and deployment needs.",{"type":50,"tag":59,"props":805,"children":806},{},[807],{"type":56,"value":808},"Key design decisions:",{"type":50,"tag":77,"props":810,"children":811},{},[812,822,832,842],{"type":50,"tag":81,"props":813,"children":814},{},[815,820],{"type":50,"tag":133,"props":816,"children":817},{},[818],{"type":56,"value":819},"API type",{"type":56,"value":821},": Use the decision table above",{"type":50,"tag":81,"props":823,"children":824},{},[825,830],{"type":50,"tag":133,"props":826,"children":827},{},[828],{"type":56,"value":829},"Endpoint type",{"type":56,"value":831},": Edge-optimized (default for global clients; optimizes TCP connections via CloudFront POPs but does not cache at the edge), Regional (same-region clients, or global clients needing their own CloudFront distribution for edge caching, edge compute, granular WAF control, or geo-based routing), Private (VPC-only access, REST API only)",{"type":50,"tag":81,"props":833,"children":834},{},[835,840],{"type":50,"tag":133,"props":836,"children":837},{},[838],{"type":56,"value":839},"Topology",{"type":56,"value":841},": Centralized (single domain, path-based routing) vs Distributed (subdomains per service)",{"type":50,"tag":81,"props":843,"children":844},{},[845,850,852,858],{"type":50,"tag":133,"props":846,"children":847},{},[848],{"type":56,"value":849},"Authentication",{"type":56,"value":851},": See ",{"type":50,"tag":97,"props":853,"children":855},{"className":854},[],[856],{"type":56,"value":857},"references\u002Fauthentication.md",{"type":56,"value":859}," for the decision tree",{"type":50,"tag":785,"props":861,"children":863},{"id":862},"step-2-implement-the-api",[864],{"type":56,"value":865},"Step 2: Implement the API",{"type":50,"tag":59,"props":867,"children":868},{},[869],{"type":56,"value":870},"Consult these references based on what you're building:",{"type":50,"tag":872,"props":873,"children":874},"ul",{},[875,893,909,926,943,960,976],{"type":50,"tag":81,"props":876,"children":877},{},[878,883,885,891],{"type":50,"tag":133,"props":879,"children":880},{},[881],{"type":56,"value":882},"Architecture patterns",{"type":56,"value":884},": ",{"type":50,"tag":97,"props":886,"children":888},{"className":887},[],[889],{"type":56,"value":890},"references\u002Farchitecture-patterns.md",{"type":56,"value":892},": topology, multi-tenant SaaS, hybrid workloads, private APIs, multi-region, streaming",{"type":50,"tag":81,"props":894,"children":895},{},[896,900,901,907],{"type":50,"tag":133,"props":897,"children":898},{},[899],{"type":56,"value":181},{"type":56,"value":884},{"type":50,"tag":97,"props":902,"children":904},{"className":903},[],[905],{"type":56,"value":906},"references\u002Fwebsocket.md",{"type":56,"value":908},": route selection, @connections management, session management, client resilience, SAM templates, limits, multi-region",{"type":50,"tag":81,"props":910,"children":911},{},[912,917,918,924],{"type":50,"tag":133,"props":913,"children":914},{},[915],{"type":56,"value":916},"Service integrations",{"type":56,"value":884},{"type":50,"tag":97,"props":919,"children":921},{"className":920},[],[922],{"type":56,"value":923},"references\u002Fservice-integrations.md",{"type":56,"value":925},": direct AWS service integrations (EventBridge, SQS, SNS, DynamoDB, Kinesis, Step Functions, S3), HTTP proxy, mock, VTL mapping templates, binary media types, Lambda sync\u002Fasync invocation",{"type":50,"tag":81,"props":927,"children":928},{},[929,934,935,941],{"type":50,"tag":133,"props":930,"children":931},{},[932],{"type":56,"value":933},"Custom domains and routing",{"type":56,"value":884},{"type":50,"tag":97,"props":936,"children":938},{"className":937},[],[939],{"type":56,"value":940},"references\u002Fcustom-domains-routing.md",{"type":56,"value":942},": base path mappings, routing rules, header-based versioning",{"type":50,"tag":81,"props":944,"children":945},{},[946,951,952,958],{"type":50,"tag":133,"props":947,"children":948},{},[949],{"type":56,"value":950},"Security",{"type":56,"value":884},{"type":50,"tag":97,"props":953,"children":955},{"className":954},[],[956],{"type":56,"value":957},"references\u002Fsecurity.md",{"type":56,"value":959},": mTLS (API Gateway native + CloudFront viewer mTLS), TLS policies, resource policies, WAF, HttpOnly cookies, CRL checks",{"type":50,"tag":81,"props":961,"children":962},{},[963,968,969,974],{"type":50,"tag":133,"props":964,"children":965},{},[966],{"type":56,"value":967},"SAM\u002FCloudFormation",{"type":56,"value":884},{"type":50,"tag":97,"props":970,"children":972},{"className":971},[],[973],{"type":56,"value":102},{"type":56,"value":975},": IaC patterns, OpenAPI extensions, VTL reference, binary data",{"type":50,"tag":81,"props":977,"children":978},{},[979,984,985,990],{"type":50,"tag":133,"props":980,"children":981},{},[982],{"type":56,"value":983},"SAM service integration templates",{"type":56,"value":884},{"type":50,"tag":97,"props":986,"children":988},{"className":987},[],[989],{"type":56,"value":110},{"type":56,"value":991},": EventBridge, SQS, DynamoDB CRUD, Kinesis, Step Functions (REST + WebSocket) templates",{"type":50,"tag":785,"props":993,"children":995},{"id":994},"step-3-configure-performance-and-scaling",[996],{"type":56,"value":997},"Step 3: Configure Performance and Scaling",{"type":50,"tag":872,"props":999,"children":1000},{},[1001,1017,1026,1036],{"type":50,"tag":81,"props":1002,"children":1003},{},[1004,1009,1011],{"type":50,"tag":133,"props":1005,"children":1006},{},[1007],{"type":56,"value":1008},"Throttling",{"type":56,"value":1010},": Account-level default is 10,000 rps \u002F 5,000 burst (adjustable; request increases via AWS Support). Configure stage-level and method-level throttling via usage plans. See ",{"type":50,"tag":97,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":56,"value":1016},"references\u002Fperformance-scaling.md",{"type":50,"tag":81,"props":1018,"children":1019},{},[1020,1024],{"type":50,"tag":133,"props":1021,"children":1022},{},[1023],{"type":56,"value":382},{"type":56,"value":1025}," (REST only): Default TTL 300s, max 3600s. Only GET methods cached by default. Max cached response 1 MB",{"type":50,"tag":81,"props":1027,"children":1028},{},[1029,1034],{"type":50,"tag":133,"props":1030,"children":1031},{},[1032],{"type":56,"value":1033},"Edge caching",{"type":56,"value":1035}," (all API types): For edge caching, place a self-managed CloudFront distribution in front of a Regional API. CloudFront reduces latency, backend load, AND cost (cached responses never reach API Gateway). Also enables edge compute (CloudFront Functions, Lambda@Edge) and granular cache behaviors per path. Use a Regional endpoint, not edge-optimized, when pairing with your own CloudFront distribution",{"type":50,"tag":81,"props":1037,"children":1038},{},[1039,1044],{"type":50,"tag":133,"props":1040,"children":1041},{},[1042],{"type":56,"value":1043},"Scaling",{"type":56,"value":1045},": API Gateway scales automatically but plan the entire stack (Lambda concurrency, DynamoDB capacity)",{"type":50,"tag":785,"props":1047,"children":1049},{"id":1048},"step-4-set-up-observability",[1050],{"type":56,"value":1051},"Step 4: Set Up Observability",{"type":50,"tag":59,"props":1053,"children":1054},{},[1055,1057,1062],{"type":56,"value":1056},"Always configure access logging. For REST and WebSocket APIs, also enable execution logging (ERROR level for production, INFO only for debugging). ",{"type":50,"tag":133,"props":1058,"children":1059},{},[1060],{"type":56,"value":1061},"HTTP API does not support execution logging",{"type":56,"value":1063},"; use access logs with enhanced observability variables instead.",{"type":50,"tag":59,"props":1065,"children":1066},{},[1067],{"type":56,"value":1068},"Consult the observability references based on what you need:",{"type":50,"tag":872,"props":1070,"children":1071},{},[1072,1087,1102],{"type":50,"tag":81,"props":1073,"children":1074},{},[1075,1080,1081],{"type":50,"tag":133,"props":1076,"children":1077},{},[1078],{"type":56,"value":1079},"Logging setup, log formats, retention",{"type":56,"value":884},{"type":50,"tag":97,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":56,"value":1086},"references\u002Fobservability-logging.md",{"type":50,"tag":81,"props":1088,"children":1089},{},[1090,1095,1096],{"type":50,"tag":133,"props":1091,"children":1092},{},[1093],{"type":56,"value":1094},"Metrics, alarms, metric filters, X-Ray tracing",{"type":56,"value":884},{"type":50,"tag":97,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":56,"value":1101},"references\u002Fobservability-metrics-alarms.md",{"type":50,"tag":81,"props":1103,"children":1104},{},[1105,1110,1111],{"type":50,"tag":133,"props":1106,"children":1107},{},[1108],{"type":56,"value":1109},"Log analysis and insights, analytics pipeline, cross-account, control plane logs",{"type":56,"value":884},{"type":50,"tag":97,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":56,"value":1116},"references\u002Fobservability-analytics.md",{"type":50,"tag":785,"props":1118,"children":1120},{"id":1119},"step-5-deploy",[1121],{"type":56,"value":1122},"Step 5: Deploy",{"type":50,"tag":872,"props":1124,"children":1125},{},[1126,1131,1140,1150,1160],{"type":50,"tag":81,"props":1127,"children":1128},{},[1129],{"type":56,"value":1130},"Use Infrastructure as Code (SAM, CDK, CloudFormation, Terraform) for production",{"type":50,"tag":81,"props":1132,"children":1133},{},[1134,1138],{"type":50,"tag":133,"props":1135,"children":1136},{},[1137],{"type":56,"value":653},{"type":56,"value":1139}," (REST only): Route a percentage of traffic to test new versions",{"type":50,"tag":81,"props":1141,"children":1142},{},[1143,1148],{"type":50,"tag":133,"props":1144,"children":1145},{},[1146],{"type":56,"value":1147},"Blue\u002Fgreen deployments",{"type":56,"value":1149},": Use custom domain API mappings to switch between environments with zero downtime",{"type":50,"tag":81,"props":1151,"children":1152},{},[1153,1158],{"type":50,"tag":133,"props":1154,"children":1155},{},[1156],{"type":56,"value":1157},"Routing rules",{"type":56,"value":1159}," (preferred for new domains): Declarative header\u002Fpath-based routing on custom domains for versioning, A\u002FB testing, gradual rollouts, and cell-based routing",{"type":50,"tag":81,"props":1161,"children":1162},{},[1163,1165,1171],{"type":56,"value":1164},"See ",{"type":50,"tag":97,"props":1166,"children":1168},{"className":1167},[],[1169],{"type":56,"value":1170},"references\u002Fdeployment.md",{"type":56,"value":1172}," for detailed patterns",{"type":50,"tag":785,"props":1174,"children":1176},{"id":1175},"step-6-apply-governance",[1177],{"type":56,"value":1178},"Step 6: Apply Governance",{"type":50,"tag":59,"props":1180,"children":1181},{},[1182,1184,1190],{"type":56,"value":1183},"For organization-wide API standards, see ",{"type":50,"tag":97,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":56,"value":1189},"references\u002Fgovernance.md",{"type":56,"value":1191}," covering:",{"type":50,"tag":872,"props":1193,"children":1194},{},[1195,1200,1205,1210],{"type":50,"tag":81,"props":1196,"children":1197},{},[1198],{"type":56,"value":1199},"Preventative controls (SCPs, IAM policies)",{"type":50,"tag":81,"props":1201,"children":1202},{},[1203],{"type":56,"value":1204},"Proactive controls (CloudFormation Hooks, Guard rules)",{"type":50,"tag":81,"props":1206,"children":1207},{},[1208],{"type":56,"value":1209},"Detective controls (AWS Config rules, EventBridge)",{"type":50,"tag":81,"props":1211,"children":1212},{},[1213],{"type":56,"value":1214},"Specific enforcement examples for security, observability, and management",{"type":50,"tag":65,"props":1216,"children":1218},{"id":1217},"response-format",[1219],{"type":56,"value":1220},"Response Format",{"type":50,"tag":59,"props":1222,"children":1223},{},[1224],{"type":56,"value":1225},"When responding to API Gateway questions, structure your answer as:",{"type":50,"tag":77,"props":1227,"children":1228},{},[1229,1239,1249,1265],{"type":50,"tag":81,"props":1230,"children":1231},{},[1232,1237],{"type":50,"tag":133,"props":1233,"children":1234},{},[1235],{"type":56,"value":1236},"Recommendation",{"type":56,"value":1238},": Lead with the recommended approach and why",{"type":50,"tag":81,"props":1240,"children":1241},{},[1242,1247],{"type":50,"tag":133,"props":1243,"children":1244},{},[1245],{"type":56,"value":1246},"Code",{"type":56,"value":1248},": Include SAM\u002FCloudFormation YAML or code when the user needs implementation (always read the relevant reference file first)",{"type":50,"tag":81,"props":1250,"children":1251},{},[1252,1257,1259],{"type":50,"tag":133,"props":1253,"children":1254},{},[1255],{"type":56,"value":1256},"Pitfalls",{"type":56,"value":1258},": Warn about relevant gotchas from the pitfalls below or from ",{"type":50,"tag":97,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":56,"value":1264},"references\u002Fpitfalls.md",{"type":50,"tag":81,"props":1266,"children":1267},{},[1268,1273],{"type":50,"tag":133,"props":1269,"children":1270},{},[1271],{"type":56,"value":1272},"Limits",{"type":56,"value":1274},": Mention any service limits that constrain the design",{"type":50,"tag":65,"props":1276,"children":1278},{"id":1277},"troubleshooting-quick-reference",[1279],{"type":56,"value":1280},"Troubleshooting Quick Reference",{"type":50,"tag":59,"props":1282,"children":1283},{},[1284,1286,1292],{"type":56,"value":1285},"When diagnosing API Gateway errors, consult ",{"type":50,"tag":97,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":56,"value":1291},"references\u002Ftroubleshooting.md",{"type":56,"value":1293}," for detailed resolution steps. Here are the most common issues:",{"type":50,"tag":150,"props":1295,"children":1296},{},[1297,1318],{"type":50,"tag":154,"props":1298,"children":1299},{},[1300],{"type":50,"tag":158,"props":1301,"children":1302},{},[1303,1308,1313],{"type":50,"tag":162,"props":1304,"children":1305},{},[1306],{"type":56,"value":1307},"Error",{"type":50,"tag":162,"props":1309,"children":1310},{},[1311],{"type":56,"value":1312},"Most Common Cause",{"type":50,"tag":162,"props":1314,"children":1315},{},[1316],{"type":56,"value":1317},"Quick Fix",{"type":50,"tag":183,"props":1319,"children":1320},{},[1321,1339,1357,1375,1393,1411,1429,1447,1465,1491,1509,1527],{"type":50,"tag":158,"props":1322,"children":1323},{},[1324,1329,1334],{"type":50,"tag":190,"props":1325,"children":1326},{},[1327],{"type":56,"value":1328},"400 Bad Request",{"type":50,"tag":190,"props":1330,"children":1331},{},[1332],{"type":56,"value":1333},"Protocol mismatch (HTTP\u002FHTTPS) with ALB",{"type":50,"tag":190,"props":1335,"children":1336},{},[1337],{"type":56,"value":1338},"Match protocol to listener type",{"type":50,"tag":158,"props":1340,"children":1341},{},[1342,1347,1352],{"type":50,"tag":190,"props":1343,"children":1344},{},[1345],{"type":56,"value":1346},"401 Unauthorized",{"type":50,"tag":190,"props":1348,"children":1349},{},[1350],{"type":56,"value":1351},"Wrong token type (ID vs access) or missing identity sources",{"type":50,"tag":190,"props":1353,"children":1354},{},[1355],{"type":56,"value":1356},"Check token type matches scope config; verify all identity sources sent",{"type":50,"tag":158,"props":1358,"children":1359},{},[1360,1365,1370],{"type":50,"tag":190,"props":1361,"children":1362},{},[1363],{"type":56,"value":1364},"403 Missing Auth Token",{"type":50,"tag":190,"props":1366,"children":1367},{},[1368],{"type":56,"value":1369},"Stage name in URL when using custom domain",{"type":50,"tag":190,"props":1371,"children":1372},{},[1373],{"type":56,"value":1374},"Remove stage name from URL path",{"type":50,"tag":158,"props":1376,"children":1377},{},[1378,1383,1388],{"type":50,"tag":190,"props":1379,"children":1380},{},[1381],{"type":56,"value":1382},"403 from VPC",{"type":50,"tag":190,"props":1384,"children":1385},{},[1386],{"type":56,"value":1387},"Private DNS on VPC endpoint intercepts ALL API calls",{"type":50,"tag":190,"props":1389,"children":1390},{},[1391],{"type":56,"value":1392},"Use custom domain names for public APIs",{"type":50,"tag":158,"props":1394,"children":1395},{},[1396,1401,1406],{"type":50,"tag":190,"props":1397,"children":1398},{},[1399],{"type":56,"value":1400},"403 Access Denied",{"type":50,"tag":190,"props":1402,"children":1403},{},[1404],{"type":56,"value":1405},"Resource policy + auth type mismatch or missing redeployment",{"type":50,"tag":190,"props":1407,"children":1408},{},[1409],{"type":56,"value":1410},"Review policy, check auth type, redeploy API",{"type":50,"tag":158,"props":1412,"children":1413},{},[1414,1419,1424],{"type":50,"tag":190,"props":1415,"children":1416},{},[1417],{"type":56,"value":1418},"403 mTLS",{"type":50,"tag":190,"props":1420,"children":1421},{},[1422],{"type":56,"value":1423},"Certificate issuer not in truststore or weak signature algorithm",{"type":50,"tag":190,"props":1425,"children":1426},{},[1427],{"type":56,"value":1428},"Verify CA in truststore, use SHA-256+",{"type":50,"tag":158,"props":1430,"children":1431},{},[1432,1437,1442],{"type":50,"tag":190,"props":1433,"children":1434},{},[1435],{"type":56,"value":1436},"429 Too Many Requests",{"type":50,"tag":190,"props":1438,"children":1439},{},[1440],{"type":56,"value":1441},"Account\u002Fstage\u002Fmethod throttle limits exceeded",{"type":50,"tag":190,"props":1443,"children":1444},{},[1445],{"type":56,"value":1446},"Implement jittered exponential backoff; request limit increase",{"type":50,"tag":158,"props":1448,"children":1449},{},[1450,1455,1460],{"type":50,"tag":190,"props":1451,"children":1452},{},[1453],{"type":56,"value":1454},"500 Internal Error",{"type":50,"tag":190,"props":1456,"children":1457},{},[1458],{"type":56,"value":1459},"Missing Lambda invoke permission (especially with stage variables)",{"type":50,"tag":190,"props":1461,"children":1462},{},[1463],{"type":56,"value":1464},"Add resource-based policy to Lambda function",{"type":50,"tag":158,"props":1466,"children":1467},{},[1468,1473,1478],{"type":50,"tag":190,"props":1469,"children":1470},{},[1471],{"type":56,"value":1472},"502 Bad Gateway",{"type":50,"tag":190,"props":1474,"children":1475},{},[1476],{"type":56,"value":1477},"Lambda response not in required proxy format",{"type":50,"tag":190,"props":1479,"children":1480},{},[1481,1483,1489],{"type":56,"value":1482},"Return ",{"type":50,"tag":97,"props":1484,"children":1486},{"className":1485},[],[1487],{"type":56,"value":1488},"{statusCode, headers, body}",{"type":56,"value":1490}," from Lambda",{"type":50,"tag":158,"props":1492,"children":1493},{},[1494,1499,1504],{"type":50,"tag":190,"props":1495,"children":1496},{},[1497],{"type":56,"value":1498},"504 Timeout",{"type":50,"tag":190,"props":1500,"children":1501},{},[1502],{"type":56,"value":1503},"Backend exceeds 29s (REST, increasable) or 30s (HTTP, hard). HTTP API body says \"Service Unavailable\" but status is 504",{"type":50,"tag":190,"props":1505,"children":1506},{},[1507],{"type":56,"value":1508},"Optimize backend, request timeout increase (REST Regional\u002FPrivate), or switch to async invocation",{"type":50,"tag":158,"props":1510,"children":1511},{},[1512,1517,1522],{"type":50,"tag":190,"props":1513,"children":1514},{},[1515],{"type":56,"value":1516},"CORS errors",{"type":50,"tag":190,"props":1518,"children":1519},{},[1520],{"type":56,"value":1521},"Missing CORS headers on Gateway Responses (4XX\u002F5XX)",{"type":50,"tag":190,"props":1523,"children":1524},{},[1525],{"type":56,"value":1526},"Add CORS headers to DEFAULT_4XX and DEFAULT_5XX gateway responses",{"type":50,"tag":158,"props":1528,"children":1529},{},[1530,1535,1540],{"type":50,"tag":190,"props":1531,"children":1532},{},[1533],{"type":56,"value":1534},"SSL\u002FPKIX errors",{"type":50,"tag":190,"props":1536,"children":1537},{},[1538],{"type":56,"value":1539},"Incomplete certificate chain on backend",{"type":50,"tag":190,"props":1541,"children":1542},{},[1543,1545,1551],{"type":56,"value":1544},"Provide full cert chain; use ",{"type":50,"tag":97,"props":1546,"children":1548},{"className":1547},[],[1549],{"type":56,"value":1550},"insecureSkipVerification",{"type":56,"value":1552}," only for testing",{"type":50,"tag":65,"props":1554,"children":1556},{"id":1555},"critical-pitfalls",[1557],{"type":56,"value":1558},"Critical Pitfalls",{"type":50,"tag":77,"props":1560,"children":1561},{},[1562,1572,1590,1614,1624,1642,1666,1684,1694,1704,1714],{"type":50,"tag":81,"props":1563,"children":1564},{},[1565,1570],{"type":50,"tag":133,"props":1566,"children":1567},{},[1568],{"type":56,"value":1569},"REST API default timeout is 29 seconds",{"type":56,"value":1571}," (increasable up to 300s for Regional\u002FPrivate endpoints via quota request). Lambda continues running but client gets 504. Request a timeout increase, or consider async patterns (SQS, EventBridge) for better user experience on long operations",{"type":50,"tag":81,"props":1573,"children":1574},{},[1575,1580,1582,1588],{"type":50,"tag":133,"props":1576,"children":1577},{},[1578],{"type":56,"value":1579},"HTTP API hard timeout is 30 seconds",{"type":56,"value":1581},". Returns ",{"type":50,"tag":97,"props":1583,"children":1585},{"className":1584},[],[1586],{"type":56,"value":1587},"{\"message\":\"Service Unavailable\"}",{"type":56,"value":1589}," while Lambda continues",{"type":50,"tag":81,"props":1591,"children":1592},{},[1593,1612],{"type":50,"tag":133,"props":1594,"children":1595},{},[1596,1602,1604,1610],{"type":50,"tag":97,"props":1597,"children":1599},{"className":1598},[],[1600],{"type":56,"value":1601},"\u002Fping",{"type":56,"value":1603}," and ",{"type":50,"tag":97,"props":1605,"children":1607},{"className":1606},[],[1608],{"type":56,"value":1609},"\u002Fsping",{"type":56,"value":1611}," are reserved paths",{"type":56,"value":1613},". Do not use for API resources",{"type":50,"tag":81,"props":1615,"children":1616},{},[1617,1622],{"type":50,"tag":133,"props":1618,"children":1619},{},[1620],{"type":56,"value":1621},"Execution log events truncated at 1,024 bytes",{"type":56,"value":1623},". Use access logs for complete data",{"type":50,"tag":81,"props":1625,"children":1626},{},[1627,1640],{"type":50,"tag":133,"props":1628,"children":1629},{},[1630,1632,1638],{"type":56,"value":1631},"413 ",{"type":50,"tag":97,"props":1633,"children":1635},{"className":1634},[],[1636],{"type":56,"value":1637},"REQUEST_TOO_LARGE",{"type":56,"value":1639}," is the only gateway response that cannot be customized",{"type":56,"value":1641},". Use DEFAULT_4XX as a catch-all to add CORS headers for all 4xx errors including 413",{"type":50,"tag":81,"props":1643,"children":1644},{},[1645,1664],{"type":50,"tag":133,"props":1646,"children":1647},{},[1648,1654,1656,1662],{"type":50,"tag":97,"props":1649,"children":1651},{"className":1650},[],[1652],{"type":56,"value":1653},"maxItems",{"type":56,"value":1655},"\u002F",{"type":50,"tag":97,"props":1657,"children":1659},{"className":1658},[],[1660],{"type":56,"value":1661},"minItems",{"type":56,"value":1663}," not validated",{"type":56,"value":1665}," in REST API request validation",{"type":50,"tag":81,"props":1667,"children":1668},{},[1669,1682],{"type":50,"tag":133,"props":1670,"children":1671},{},[1672,1674,1680],{"type":56,"value":1673},"Root-level ",{"type":50,"tag":97,"props":1675,"children":1677},{"className":1676},[],[1678],{"type":56,"value":1679},"security",{"type":56,"value":1681}," in OpenAPI is ignored",{"type":56,"value":1683},". Must set per-operation",{"type":50,"tag":81,"props":1685,"children":1686},{},[1687,1692],{"type":50,"tag":133,"props":1688,"children":1689},{},[1690],{"type":56,"value":1691},"JWT authorizer public keys cached 2 hours",{"type":56,"value":1693},". Account for this in key rotation",{"type":50,"tag":81,"props":1695,"children":1696},{},[1697,1702],{"type":50,"tag":133,"props":1698,"children":1699},{},[1700],{"type":56,"value":1701},"Management API rate limit: 10 rps \u002F 40 burst",{"type":56,"value":1703},". Heavy automation can hit this",{"type":50,"tag":81,"props":1705,"children":1706},{},[1707,1712],{"type":50,"tag":133,"props":1708,"children":1709},{},[1710],{"type":56,"value":1711},"Always redeploy REST API after configuration changes",{"type":56,"value":1713},". Changes don't take effect until deployed",{"type":50,"tag":81,"props":1715,"children":1716},{},[1717,1722],{"type":50,"tag":133,"props":1718,"children":1719},{},[1720],{"type":56,"value":1721},"Edge-optimized endpoints do NOT cache at the edge",{"type":56,"value":1723}," — they only optimize TCP connections via CloudFront POPs. If you need edge caching, edge compute (CloudFront Functions, Lambda@Edge), or granular CloudFront control, use a Regional API with your own CloudFront distribution instead",{"type":50,"tag":59,"props":1725,"children":1726},{},[1727,1729,1734],{"type":56,"value":1728},"For additional pitfalls (header handling, URL encoding, caching charges, canary deployments, usage plans), see ",{"type":50,"tag":97,"props":1730,"children":1732},{"className":1731},[],[1733],{"type":56,"value":1264},{"type":56,"value":1735},".",{"type":50,"tag":65,"props":1737,"children":1739},{"id":1738},"iac-framework-selection",[1740],{"type":56,"value":1741},"IaC Framework Selection",{"type":50,"tag":59,"props":1743,"children":1744},{},[1745],{"type":56,"value":1746},"Default: CDK TypeScript",{"type":50,"tag":59,"props":1748,"children":1749},{},[1750],{"type":56,"value":1751},"Override syntax:",{"type":50,"tag":872,"props":1753,"children":1754},{},[1755,1760,1765],{"type":50,"tag":81,"props":1756,"children":1757},{},[1758],{"type":56,"value":1759},"\"use SAM\" → Generate SAM\u002FCloudFormation YAML templates",{"type":50,"tag":81,"props":1761,"children":1762},{},[1763],{"type":56,"value":1764},"\"use CloudFormation\" → Generate CloudFormation YAML templates",{"type":50,"tag":81,"props":1766,"children":1767},{},[1768],{"type":56,"value":1769},"\"use Terraform\" → Generate Terraform HCL",{"type":50,"tag":59,"props":1771,"children":1772},{},[1773],{"type":56,"value":1774},"When not specified, ALWAYS use CDK TypeScript.",{"type":50,"tag":65,"props":1776,"children":1778},{"id":1777},"error-scenarios",[1779],{"type":56,"value":1780},"Error Scenarios",{"type":50,"tag":785,"props":1782,"children":1784},{"id":1783},"mcp-server-unavailable",[1785],{"type":56,"value":1786},"MCP Server Unavailable",{"type":50,"tag":872,"props":1788,"children":1789},{},[1790,1795,1800],{"type":50,"tag":81,"props":1791,"children":1792},{},[1793],{"type":56,"value":1794},"Inform user: \"AWS Serverless MCP not responding\"",{"type":50,"tag":81,"props":1796,"children":1797},{},[1798],{"type":56,"value":1799},"Ask: \"Proceed without MCP support?\"",{"type":50,"tag":81,"props":1801,"children":1802},{},[1803],{"type":56,"value":1804},"DO NOT continue without user confirmation",{"type":50,"tag":65,"props":1806,"children":1808},{"id":1807},"service-limits-quick-reference",[1809],{"type":56,"value":1810},"Service Limits Quick Reference",{"type":50,"tag":59,"props":1812,"children":1813},{},[1814,1815,1821,1823,1828,1830,1839],{"type":56,"value":1164},{"type":50,"tag":97,"props":1816,"children":1818},{"className":1817},[],[1819],{"type":56,"value":1820},"references\u002Fservice-limits.md",{"type":56,"value":1822}," for the complete table. ",{"type":50,"tag":133,"props":1824,"children":1825},{},[1826],{"type":56,"value":1827},"Most numeric quotas below are default values and adjustable",{"type":56,"value":1829},"; check with your AWS account team and the ",{"type":50,"tag":1831,"props":1832,"children":1836},"a",{"href":1833,"rel":1834},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fapigateway\u002Flatest\u002Fdeveloperguide\u002Flimits.html",[1835],"nofollow",[1837],{"type":56,"value":1838},"latest quotas page",{"type":56,"value":1840}," before using them for architectural decisions. Key limits:",{"type":50,"tag":150,"props":1842,"children":1843},{},[1844,1868],{"type":50,"tag":154,"props":1845,"children":1846},{},[1847],{"type":50,"tag":158,"props":1848,"children":1849},{},[1850,1855,1859,1863],{"type":50,"tag":162,"props":1851,"children":1852},{},[1853],{"type":56,"value":1854},"Resource",{"type":50,"tag":162,"props":1856,"children":1857},{},[1858],{"type":56,"value":14},{"type":50,"tag":162,"props":1860,"children":1861},{},[1862],{"type":56,"value":146},{"type":50,"tag":162,"props":1864,"children":1865},{},[1866],{"type":56,"value":1867},"WebSocket",{"type":50,"tag":183,"props":1869,"children":1870},{},[1871,1892,1913,1935,1956,1977,1998,2021,2043,2063],{"type":50,"tag":158,"props":1872,"children":1873},{},[1874,1879,1883,1887],{"type":50,"tag":190,"props":1875,"children":1876},{},[1877],{"type":56,"value":1878},"Payload size",{"type":50,"tag":190,"props":1880,"children":1881},{},[1882],{"type":56,"value":302},{"type":50,"tag":190,"props":1884,"children":1885},{},[1886],{"type":56,"value":302},{"type":50,"tag":190,"props":1888,"children":1889},{},[1890],{"type":56,"value":1891},"128 KB",{"type":50,"tag":158,"props":1893,"children":1894},{},[1895,1900,1904,1909],{"type":50,"tag":190,"props":1896,"children":1897},{},[1898],{"type":56,"value":1899},"Integration timeout",{"type":50,"tag":190,"props":1901,"children":1902},{},[1903],{"type":56,"value":279},{"type":50,"tag":190,"props":1905,"children":1906},{},[1907],{"type":56,"value":1908},"30s hard",{"type":50,"tag":190,"props":1910,"children":1911},{},[1912],{"type":56,"value":289},{"type":50,"tag":158,"props":1914,"children":1915},{},[1916,1921,1926,1931],{"type":50,"tag":190,"props":1917,"children":1918},{},[1919],{"type":56,"value":1920},"APIs per region",{"type":50,"tag":190,"props":1922,"children":1923},{},[1924],{"type":56,"value":1925},"600 Regional\u002FPrivate; 120 Edge-optimized",{"type":50,"tag":190,"props":1927,"children":1928},{},[1929],{"type":56,"value":1930},"600",{"type":50,"tag":190,"props":1932,"children":1933},{},[1934],{"type":56,"value":1930},{"type":50,"tag":158,"props":1936,"children":1937},{},[1938,1943,1948,1952],{"type":50,"tag":190,"props":1939,"children":1940},{},[1941],{"type":56,"value":1942},"Stages per API",{"type":50,"tag":190,"props":1944,"children":1945},{},[1946],{"type":56,"value":1947},"10",{"type":50,"tag":190,"props":1949,"children":1950},{},[1951],{"type":56,"value":1947},{"type":50,"tag":190,"props":1953,"children":1954},{},[1955],{"type":56,"value":1947},{"type":50,"tag":158,"props":1957,"children":1958},{},[1959,1964,1969,1973],{"type":50,"tag":190,"props":1960,"children":1961},{},[1962],{"type":56,"value":1963},"Routes\u002Fresources per API",{"type":50,"tag":190,"props":1965,"children":1966},{},[1967],{"type":56,"value":1968},"300",{"type":50,"tag":190,"props":1970,"children":1971},{},[1972],{"type":56,"value":1968},{"type":50,"tag":190,"props":1974,"children":1975},{},[1976],{"type":56,"value":1968},{"type":50,"tag":158,"props":1978,"children":1979},{},[1980,1985,1990,1994],{"type":50,"tag":190,"props":1981,"children":1982},{},[1983],{"type":56,"value":1984},"Custom domains (public)",{"type":50,"tag":190,"props":1986,"children":1987},{},[1988],{"type":56,"value":1989},"120",{"type":50,"tag":190,"props":1991,"children":1992},{},[1993],{"type":56,"value":1989},{"type":50,"tag":190,"props":1995,"children":1996},{},[1997],{"type":56,"value":1989},{"type":50,"tag":158,"props":1999,"children":2000},{},[2001,2006,2011,2016],{"type":50,"tag":190,"props":2002,"children":2003},{},[2004],{"type":56,"value":2005},"Account throttle",{"type":50,"tag":190,"props":2007,"children":2008},{},[2009],{"type":56,"value":2010},"10,000 rps \u002F 5,000 burst",{"type":50,"tag":190,"props":2012,"children":2013},{},[2014],{"type":56,"value":2015},"Same",{"type":50,"tag":190,"props":2017,"children":2018},{},[2019],{"type":56,"value":2020},"Same (shared quota)",{"type":50,"tag":158,"props":2022,"children":2023},{},[2024,2029,2034,2039],{"type":50,"tag":190,"props":2025,"children":2026},{},[2027],{"type":56,"value":2028},"API keys per region",{"type":50,"tag":190,"props":2030,"children":2031},{},[2032],{"type":56,"value":2033},"10,000",{"type":50,"tag":190,"props":2035,"children":2036},{},[2037],{"type":56,"value":2038},"N\u002FA",{"type":50,"tag":190,"props":2040,"children":2041},{},[2042],{"type":56,"value":2038},{"type":50,"tag":158,"props":2044,"children":2045},{},[2046,2051,2055,2059],{"type":50,"tag":190,"props":2047,"children":2048},{},[2049],{"type":56,"value":2050},"Usage plans per region",{"type":50,"tag":190,"props":2052,"children":2053},{},[2054],{"type":56,"value":1968},{"type":50,"tag":190,"props":2056,"children":2057},{},[2058],{"type":56,"value":2038},{"type":50,"tag":190,"props":2060,"children":2061},{},[2062],{"type":56,"value":2038},{"type":50,"tag":158,"props":2064,"children":2065},{},[2066,2071,2076,2080],{"type":50,"tag":190,"props":2067,"children":2068},{},[2069],{"type":56,"value":2070},"Cache sizes",{"type":50,"tag":190,"props":2072,"children":2073},{},[2074],{"type":56,"value":2075},"0.5 GB - 237 GB",{"type":50,"tag":190,"props":2077,"children":2078},{},[2079],{"type":56,"value":2038},{"type":50,"tag":190,"props":2081,"children":2082},{},[2083],{"type":56,"value":2038},{"items":2085,"total":2262},[2086,2105,2125,2135,2148,2161,2171,2181,2202,2217,2232,2247],{"slug":2087,"name":2087,"fn":2088,"description":2089,"org":2090,"tags":2091,"stars":2102,"repoUrl":2103,"updatedAt":2104},"agentcore-investigation","investigate Bedrock AgentCore runtime sessions","Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session\u002Ftrace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2092,2093,2096,2099],{"name":21,"slug":22,"type":16},{"name":2094,"slug":2095,"type":16},"Debugging","debugging",{"name":2097,"slug":2098,"type":16},"Logs","logs",{"name":2100,"slug":2101,"type":16},"Observability","observability",9427,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fmcp","2026-07-12T08:37:22.601527",{"slug":2106,"name":2107,"fn":2108,"description":2109,"org":2110,"tags":2111,"stars":2102,"repoUrl":2103,"updatedAt":2124},"amazon-aurora-dsql","amazon aurora dsql","build applications with Aurora DSQL","Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django\u002FHibernate\u002FRails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, create DSQL table, DSQL schema, migrate to DSQL, distributed SQL database, serverless PostgreSQL-compatible database, DSQL query plan, DSQL EXPLAIN ANALYZE, why is my DSQL query slow, DSQL foreign key, DSQL OCC retry, DSQL multi-region, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2112,2115,2116,2119,2121],{"name":2113,"slug":2114,"type":16},"Aurora","aurora",{"name":21,"slug":22,"type":16},{"name":2117,"slug":2118,"type":16},"Database","database",{"name":2120,"slug":43,"type":16},"Serverless",{"name":2122,"slug":2123,"type":16},"SQL","sql","2026-07-12T08:36:45.053393",{"slug":2126,"name":2127,"fn":2108,"description":2109,"org":2128,"tags":2129,"stars":2102,"repoUrl":2103,"updatedAt":2134},"aurora-dsql","aurora dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2130,2131,2132,2133],{"name":21,"slug":22,"type":16},{"name":2117,"slug":2118,"type":16},{"name":2120,"slug":43,"type":16},{"name":2122,"slug":2123,"type":16},"2026-07-12T08:36:42.694299",{"slug":2136,"name":2137,"fn":2108,"description":2109,"org":2138,"tags":2139,"stars":2102,"repoUrl":2103,"updatedAt":2147},"aws-dsql","aws dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2140,2141,2142,2145,2146],{"name":21,"slug":22,"type":16},{"name":2117,"slug":2118,"type":16},{"name":2143,"slug":2144,"type":16},"Migration","migration",{"name":2120,"slug":43,"type":16},{"name":2122,"slug":2123,"type":16},"2026-07-12T08:36:38.584057",{"slug":2149,"name":2150,"fn":2108,"description":2109,"org":2151,"tags":2152,"stars":2102,"repoUrl":2103,"updatedAt":2160},"distributed-postgres","distributed postgres",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2153,2154,2155,2158,2159],{"name":21,"slug":22,"type":16},{"name":2117,"slug":2118,"type":16},{"name":2156,"slug":2157,"type":16},"PostgreSQL","postgresql",{"name":2120,"slug":43,"type":16},{"name":2122,"slug":2123,"type":16},"2026-07-12T08:36:46.530743",{"slug":2162,"name":2163,"fn":2108,"description":2109,"org":2164,"tags":2165,"stars":2102,"repoUrl":2103,"updatedAt":2170},"distributed-sql","distributed sql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2166,2167,2168,2169],{"name":21,"slug":22,"type":16},{"name":2117,"slug":2118,"type":16},{"name":2120,"slug":43,"type":16},{"name":2122,"slug":2123,"type":16},"2026-07-12T08:36:48.104182",{"slug":2172,"name":2172,"fn":2108,"description":2109,"org":2173,"tags":2174,"stars":2102,"repoUrl":2103,"updatedAt":2180},"dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2175,2176,2177,2178,2179],{"name":21,"slug":22,"type":16},{"name":2117,"slug":2118,"type":16},{"name":2143,"slug":2144,"type":16},{"name":2120,"slug":43,"type":16},{"name":2122,"slug":2123,"type":16},"2026-07-12T08:36:36.374512",{"slug":2182,"name":2182,"fn":2183,"description":2184,"org":2185,"tags":2186,"stars":2199,"repoUrl":2200,"updatedAt":2201},"cost-efficiency-analyzer","analyze cost efficiency and expenses","Analyzes cost structure, cost efficiency, and expense management from P&L data. Use when the user asks about costs, expenses, COGS, operating expenses, cost ratios, cost control, spending efficiency, margin compression from cost side, or wants to understand where money is going. Also use for \"are we spending too much\", \"cost breakdown\", \"expense analysis\", or \"how efficient are our operations\". NOT for revenue or top-line analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2187,2190,2193,2196],{"name":2188,"slug":2189,"type":16},"Accounting","accounting",{"name":2191,"slug":2192,"type":16},"Analytics","analytics",{"name":2194,"slug":2195,"type":16},"Cost Optimization","cost-optimization",{"name":2197,"slug":2198,"type":16},"Finance","finance",3176,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagentcore-samples","2026-07-12T08:40:03.29555",{"slug":2203,"name":2203,"fn":2204,"description":2205,"org":2206,"tags":2207,"stars":2199,"repoUrl":2200,"updatedAt":2216},"executive-financial-briefing","generate executive financial briefings","Generates a concise executive-level financial briefing or summary suitable for a CEO, CFO, or board presentation. Use when the user asks for a summary, briefing, executive summary, board update, financial overview, financial health check, or \"how is the business doing\". Covers the full P&L picture in one page. Also use for \"give me the highlights\", \"what do I need to know\", or \"quick financial update\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2208,2209,2210,2213],{"name":21,"slug":22,"type":16},{"name":2197,"slug":2198,"type":16},{"name":2211,"slug":2212,"type":16},"Management","management",{"name":2214,"slug":2215,"type":16},"Reporting","reporting","2026-07-12T08:40:02.066471",{"slug":2218,"name":2218,"fn":2219,"description":2220,"org":2221,"tags":2222,"stars":2199,"repoUrl":2200,"updatedAt":2231},"multi-quarter-trend-analysis","analyze multi-quarter financial trends","Analyzes financial trends across multiple quarters by comparing P&L metrics over time. Use when the user wants to see trends, patterns, trajectories, or directional movement across 3 or more quarters. Also use for \"how are we trending\", \"show me the trend\", \"track performance over time\", \"quarter over quarter comparison across all quarters\", or any multi-period longitudinal analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2223,2224,2225,2228],{"name":2191,"slug":2192,"type":16},{"name":2197,"slug":2198,"type":16},{"name":2226,"slug":2227,"type":16},"Financial Statements","financial-statements",{"name":2229,"slug":2230,"type":16},"Variance Analysis","variance-analysis","2026-07-12T08:40:00.79141",{"slug":2233,"name":2233,"fn":2234,"description":2235,"org":2236,"tags":2237,"stars":2199,"repoUrl":2200,"updatedAt":2246},"pdf","process and manipulate PDF documents","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2238,2241,2244],{"name":2239,"slug":2240,"type":16},"Automation","automation",{"name":2242,"slug":2243,"type":16},"Documents","documents",{"name":2245,"slug":2233,"type":16},"PDF","2026-07-12T08:41:44.135656",{"slug":2248,"name":2248,"fn":2249,"description":2250,"org":2251,"tags":2252,"stars":2199,"repoUrl":2200,"updatedAt":2261},"quarterly-kpi-calculator","calculate quarterly financial KPIs","Calculates quarterly financial KPIs from P&L data. P&L figures can be provided directly by the user or fetched from the financial data MCP server. Use when the user wants KPI calculations such as Gross Margin %, EBITDA Margin %, Operating Expense Ratio, or Revenue Growth % QoQ. Also use for quarterly performance review, P&L analysis, or interpreting financial ratios against benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2253,2254,2257,2258],{"name":2188,"slug":2189,"type":16},{"name":2255,"slug":2256,"type":16},"Data Analysis","data-analysis",{"name":2197,"slug":2198,"type":16},{"name":2259,"slug":2260,"type":16},"KPI","kpi","2026-07-12T08:39:59.54971",150,{"items":2264,"total":2356},[2265,2280,2297,2303,2320,2331,2341],{"slug":2266,"name":2266,"fn":2267,"description":2268,"org":2269,"tags":2270,"stars":23,"repoUrl":24,"updatedAt":2279},"amazon-location-service","integrate Amazon Location Service maps","Integrates Amazon Location Service APIs for AWS applications. Use this skill when users want to add maps (interactive MapLibre or static images); geocode addresses to coordinates or reverse geocode coordinates to addresses; calculate routes, travel times, or service areas; find places and businesses through text search, nearby search, or autocomplete suggestions; retrieve detailed place information including hours, contacts, and addresses; monitor geographical boundaries with geofences; or track device locations. Covers authentication, SDK integration, and all Amazon Location Service capabilities.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2271,2272,2273,2276],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":2274,"slug":2275,"type":16},"Maps","maps",{"name":2277,"slug":2278,"type":16},"Navigation","navigation","2026-07-12T08:39:49.88311",{"slug":2281,"name":2281,"fn":2282,"description":2283,"org":2284,"tags":2285,"stars":23,"repoUrl":24,"updatedAt":2296},"amplify-workflow","build and deploy apps with AWS Amplify","Build and deploy full-stack web and mobile apps with AWS Amplify Gen2 (TypeScript code-first). Covers auth (Cognito), data (AppSync\u002FDynamoDB including schema modeling, enum types, relationships, authorization rules), storage (S3), functions, APIs, and AI (Amplify AI Kit with Bedrock). Supports React, Next.js, Vue, Angular, React Native, Flutter, Swift, and Android. Always use this skill for Amplify Gen2 topics — even for questions you think you know — it contains validated, version-specific patterns that prevent common mistakes. TRIGGER when: user mentions Amplify Gen2; project has amplify\u002F directory or amplify_outputs; code imports @aws-amplify packages; user asks about defineBackend, defineAuth, defineData, defineStorage, or npx ampx. SKIP: Amplify Gen1 (amplify CLI v6), standalone SAM\u002FCDK without Amplify (use aws-serverless), direct Bedrock without Amplify AI Kit (use bedrock).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2286,2288,2289,2290,2293],{"name":550,"slug":2287,"type":16},"auth",{"name":21,"slug":22,"type":16},{"name":2117,"slug":2118,"type":16},{"name":2291,"slug":2292,"type":16},"Deployment","deployment",{"name":2294,"slug":2295,"type":16},"TypeScript","typescript","2026-07-12T08:39:43.500162",{"slug":4,"name":4,"fn":5,"description":6,"org":2298,"tags":2299,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2300,2301,2302],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"slug":2304,"name":2304,"fn":2305,"description":2306,"org":2307,"tags":2308,"stars":23,"repoUrl":24,"updatedAt":2319},"aws-architecture-diagram","generate AWS architecture diagrams","Generate validated AWS architecture diagrams as draw.io XML using official AWS4 icon libraries. Use this skill whenever the user wants to create, generate, or design AWS architecture diagrams, cloud infrastructure diagrams, or system design visuals. Also triggers for requests to visualize existing infrastructure from CloudFormation, CDK, or Terraform code. Supports two modes: analyze an existing codebase to auto-generate diagrams, or brainstorm interactively from scratch. Exports .drawio files with optional PNG\u002FSVG\u002FPDF export via draw.io desktop CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2309,2312,2313,2316],{"name":2310,"slug":2311,"type":16},"Architecture","architecture",{"name":21,"slug":22,"type":16},{"name":2314,"slug":2315,"type":16},"Design","design",{"name":2317,"slug":2318,"type":16},"Diagrams","diagrams","2026-07-12T08:37:11.012278",{"slug":2321,"name":2321,"fn":2322,"description":2323,"org":2324,"tags":2325,"stars":23,"repoUrl":24,"updatedAt":2330},"aws-lambda","build and deploy AWS Lambda functions","Design, build, deploy, test, and debug serverless applications with AWS Lambda. Triggers on phrases like: Lambda function, event source, serverless application, API Gateway, EventBridge, Step Functions, serverless API, event-driven architecture, Lambda trigger. For deploying non-serverless apps to AWS, use deploy-on-aws plugin instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2326,2327,2328,2329],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":2291,"slug":2292,"type":16},{"name":2120,"slug":43,"type":16},"2026-07-12T08:38:58.598492",{"slug":2332,"name":2332,"fn":2333,"description":2334,"org":2335,"tags":2336,"stars":23,"repoUrl":24,"updatedAt":2340},"aws-lambda-durable-functions","build resilient AWS Lambda durable functions","Build resilient, long-running, multi-step applications with AWS Lambda durable functions with automatic state persistence, retry logic, and orchestration for long-running executions. Covers the critical replay model, step operations, wait\u002Fcallback patterns, error handling with saga pattern, testing with LocalDurableTestRunner. Triggers on phrases like: lambda durable functions, workflow orchestration, state machines, retry\u002Fcheckpoint patterns, long-running stateful Lambda functions, saga pattern, human-in-the-loop callbacks, and reliable serverless applications.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2337,2338,2339],{"name":2310,"slug":2311,"type":16},{"name":21,"slug":22,"type":16},{"name":2120,"slug":43,"type":16},"2026-07-12T08:39:05.546173",{"slug":2342,"name":2342,"fn":2343,"description":2344,"org":2345,"tags":2346,"stars":23,"repoUrl":24,"updatedAt":2355},"aws-lambda-managed-instances","configure AWS Lambda Managed Instances","Evaluate, configure, and migrate workloads to AWS Lambda Managed Instances (LMI). Triggers on: Lambda Managed Instances, LMI, capacity provider, multi-concurrency Lambda, dedicated instance Lambda, EC2-backed Lambda, cold start elimination, Graviton Lambda, instance type for Lambda, scheduled scaling for LMI, Lambda cost optimization with Reserved Instances or Savings Plans. Also trigger when users describe high-volume predictable workloads seeking cost savings, want to scale LMI capacity on a schedule, or compare Lambda vs EC2 for steady-state traffic. For standard Lambda without LMI, use the aws-lambda skill instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2347,2348,2349,2352],{"name":21,"slug":22,"type":16},{"name":2291,"slug":2292,"type":16},{"name":2350,"slug":2351,"type":16},"Infrastructure","infrastructure",{"name":2353,"slug":2354,"type":16},"Performance","performance","2026-07-12T08:39:07.007071",33]