Repository: awslabs/aws-solutions-constructs (language: python)

Issue:
ApiGatewayToSqs : add schema validation for create operation
It would be helpful to have schema validation made directly on the API Gateway when we do a creation operation.


Discussion / hints:
We're looking into this, thanks for the suggestion.

Fix patch:
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/README.md b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/README.md
index c69dd7bdd..f49e5ca89 100755
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/README.md
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/README.md
@@ -81,6 +81,7 @@ new ApiGatewayToSqs(this, "ApiGatewayToSqsPattern", new ApiGatewayToSqsProps.Bui
 |enableEncryptionWithCustomerManagedKey?|`boolean`|If no key is provided, this flag determines whether the queue is encrypted with a new CMK or an AWS managed key. This flag is ignored if any of the following are defined: queueProps.encryptionMasterKey, encryptionKey or encryptionKeyProps.|
 |encryptionKey?|[`kms.Key`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_kms.Key.html)|An optional, imported encryption key to encrypt the SQS Queue with.|
 |encryptionKeyProps?|[`kms.KeyProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_kms.Key.html#construct-props)|Optional user provided properties to override the default properties for the KMS encryption key used to encrypt the SQS queue with.|
+|messageSchema?|{ [contentType: string]: [api.JsonSchema](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.JsonSchema.html); }|Optional schema to define format of incoming message in API request body. Example: { "application/json": { schema: api.JsonSchemaVersion.DRAFT4, title: 'pollResponse', type: api.JsonSchemaType.OBJECT, required: ['firstProperty', 'antotherProperty'], additionalProperties: false, properties: { firstProperty: { type: api.JsonSchemaType.STRING }, antotherProperty: { type: api.JsonSchemaType.STRING } } } Only relevant for create operation, if allowCreateOperation is not true, then supplying this is an error. Sending this value causes this construct to turn on validation for the request body. @default - None|
 
 ## Pattern Properties
 
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/lib/index.ts b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/lib/index.ts
index f3a6b54d8..9a15c2caf 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/lib/index.ts
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/lib/index.ts
@@ -226,6 +226,29 @@ export interface ApiGatewayToSqsProps {
    * @default - None
    */
   readonly encryptionKeyProps?: kms.KeyProps;
+  /**
+   * Optional schema to define format of incoming message in API request body. Example:
+   * {
+   *  "application/json": {
+   *    schema: api.JsonSchemaVersion.DRAFT4,
+   *    title: 'pollResponse',
+   *    type: api.JsonSchemaType.OBJECT,
+   *    required: ['firstProperty', 'antotherProperty'],
+   *    additionalProperties: false,
+   *    properties: {
+   *      firstProperty: { type: api.JsonSchemaType.STRING },
+   *      antotherProperty: { type: api.JsonSchemaType.STRING }
+   *    }
+   *  }
+   *
+   * Only relevant for create operation, if allowCreateOperation is not true, then supplying this
+   * is an error.
+   *
+   * Sending this value causes this construct to turn on validation for the request body.
+   *
+   * @default - None
+   */
+  readonly messageSchema?: { [contentType: string]: api.JsonSchema; };
 }
 
 /**
@@ -257,7 +280,7 @@ export class ApiGatewayToSqs extends Construct {
 
     if (this.CheckCreateRequestProps(props)) {
       throw new Error(`The 'allowCreateOperation' property must be set to true when setting any of the following: ` +
-        `'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses'`);
+        `'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses', 'messageSchema'`);
     }
     if (this.CheckReadRequestProps(props)) {
       throw new Error(`The 'allowReadOperation' property must be set to true or undefined when setting any of the following: ` +
@@ -265,7 +288,7 @@ export class ApiGatewayToSqs extends Construct {
     }
     if (this.CheckDeleteRequestProps(props)) {
       throw new Error(`The 'allowDeleteOperation' property must be set to true when setting any of the following: ` +
-      `'deleteRequestTemplate', 'additionalDeleteRequestTemplates', 'deleteIntegrationResponses'`);
+        `'deleteRequestTemplate', 'additionalDeleteRequestTemplates', 'deleteIntegrationResponses'`);
     }
 
     // Setup the queue
@@ -296,7 +319,35 @@ export class ApiGatewayToSqs extends Construct {
     // Create
     const createRequestTemplate = props.createRequestTemplate ?? this.defaultCreateRequestTemplate;
     if (props.allowCreateOperation && props.allowCreateOperation === true) {
-      const createMethodOptions: api.MethodOptions = props.createMethodResponses ? { methodResponses: props.createMethodResponses } : {};
+      let createMethodOptions: api.MethodOptions = {};
+
+      // If the client supplied model definitions, set requestModels
+      if (props.messageSchema) {
+        const requestModels: { [contentType: string]: api.IModel; } = {};
+        Object.keys(props.messageSchema).forEach(key => {
+          const contentType = key;
+          const schema = props.messageSchema![key];
+
+          const newModel = new api.Model(this, `${id}-model-${defaults.removeNonAlphanumeric(contentType)}`, {
+            restApi: this.apiGateway,
+            contentType,
+            schema
+          });
+
+          requestModels[contentType] = newModel;
+          createMethodOptions = defaults.overrideProps(createMethodOptions, {
+            requestModels,
+            requestValidatorOptions: {
+              validateRequestBody: true
+            }
+          });
+        });
+      }
+
+      if (props.createMethodResponses) {
+        createMethodOptions = defaults.overrideProps(createMethodOptions, { methodResponses: props.createMethodResponses });
+      }
+
       this.addActionToPolicy("sqs:SendMessage");
       defaults.addProxyMethodToApiResource({
         service: "sqs",
@@ -353,22 +404,22 @@ export class ApiGatewayToSqs extends Construct {
   }
   private CheckReadRequestProps(props: ApiGatewayToSqsProps): boolean {
     if ((props.readRequestTemplate || props.additionalReadRequestTemplates || props.readIntegrationResponses)
-        && props.allowReadOperation === false) {
+      && props.allowReadOperation === false) {
       return true;
     }
     return false;
   }
   private CheckDeleteRequestProps(props: ApiGatewayToSqsProps): boolean {
     if ((props.deleteRequestTemplate || props.additionalDeleteRequestTemplates || props.deleteIntegrationResponses)
-        && props.allowDeleteOperation !== true)  {
+      && props.allowDeleteOperation !== true) {
       return true;
     }
     return false;
   }
 
   private CheckCreateRequestProps(props: ApiGatewayToSqsProps): boolean {
-    if ((props.createRequestTemplate || props.additionalCreateRequestTemplates || props.createIntegrationResponses)
-        && props.allowCreateOperation !== true) {
+    if ((props.createRequestTemplate || props.additionalCreateRequestTemplates || props.createIntegrationResponses || props.messageSchema)
+      && props.allowCreateOperation !== true) {
       return true;
     }
     return false;
@@ -379,7 +430,7 @@ export class ApiGatewayToSqs extends Construct {
       resources: [
         this.sqsQueue.queueArn
       ],
-      actions: [ `${action}` ]
+      actions: [`${action}`]
     }));
   }
 }
diff --git a/source/patterns/@aws-solutions-constructs/core/lib/utils.ts b/source/patterns/@aws-solutions-constructs/core/lib/utils.ts
index 2eeaa58b5..78212cdad 100644
--- a/source/patterns/@aws-solutions-constructs/core/lib/utils.ts
+++ b/source/patterns/@aws-solutions-constructs/core/lib/utils.ts
@@ -184,7 +184,7 @@ export function generatePhysicalName(
 /**
  * Removes all non-alphanumeric characters in a string.
  */
-function removeNonAlphanumeric(s: string) {
+export function removeNonAlphanumeric(s: string) {
   return s.replace(/[^A-Za-z0-9]/g, '');
 }
 


Test patch:
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/apigateway-sqs.test.ts b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/apigateway-sqs.test.ts
index 24f8640b5..df5539180 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/apigateway-sqs.test.ts
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/apigateway-sqs.test.ts
@@ -13,11 +13,11 @@
 
 // Imports
 import { RemovalPolicy, Stack } from "aws-cdk-lib";
-import { ApiGatewayToSqs } from '../lib';
+import { ApiGatewayToSqs, ApiGatewayToSqsProps } from '../lib';
 import * as api from "aws-cdk-lib/aws-apigateway";
 import * as kms from 'aws-cdk-lib/aws-kms';
 import * as sqs from "aws-cdk-lib/aws-sqs";
-import { Template } from "aws-cdk-lib/assertions";
+import { Match, Template } from "aws-cdk-lib/assertions";
 
 test('Test deployment w/o DLQ', () => {
   const stack = new Stack();
@@ -69,7 +69,7 @@ test('Test properties', () => {
     deployDeadLetterQueue: true,
     maxReceiveCount: 3
   });
-    // Assertion 1
+  // Assertion 1
   expect(pattern.apiGateway).toBeDefined();
   // Assertion 2
   expect(pattern.sqsQueue).toBeDefined();
@@ -113,7 +113,7 @@ test('Test deployment for override ApiGateway createRequestTemplate', () => {
   const stack = new Stack();
 
   new ApiGatewayToSqs(stack, 'api-gateway-sqs', {
-    createRequestTemplate:  "Action=SendMessage&MessageBody=$util.urlEncode(\"HelloWorld\")",
+    createRequestTemplate: "Action=SendMessage&MessageBody=$util.urlEncode(\"HelloWorld\")",
     allowCreateOperation: true
   });
   const template = Template.fromStack(stack);
@@ -131,7 +131,7 @@ test('Test deployment for override ApiGateway getRequestTemplate', () => {
   const stack = new Stack();
 
   new ApiGatewayToSqs(stack, 'api-gateway-sqs', {
-    readRequestTemplate:  "Action=HelloWorld",
+    readRequestTemplate: "Action=HelloWorld",
     allowReadOperation: true
   });
   const template = Template.fromStack(stack);
@@ -149,7 +149,7 @@ test('Test deployment for override ApiGateway deleteRequestTemplate', () => {
   const stack = new Stack();
 
   new ApiGatewayToSqs(stack, 'api-gateway-sqs', {
-    deleteRequestTemplate:  "Action=HelloWorld",
+    deleteRequestTemplate: "Action=HelloWorld",
     allowDeleteOperation: true
   });
   const template = Template.fromStack(stack);
@@ -577,13 +577,22 @@ test('Construct uses custom deleteIntegrationResponses property', () => {
   });
 });
 
+test('Construct throws error when messageSchema is set and allowCreateOperation is not true', () => {
+  const stack = new Stack();
+  const app = () => new ApiGatewayToSqs(stack, 'api-gateway-sqs', {
+    messageSchema: '{}' as any,
+  });
+
+  expect(app).toThrowError(/The 'allowCreateOperation' property must be set to true when setting any of the following: 'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses', 'messageSchema'/);
+});
+
 test('Construct throws error when createRequestTemplate is set and allowCreateOperation is not true', () => {
   const stack = new Stack();
   const app = () => new ApiGatewayToSqs(stack, 'api-gateway-sqs', {
     createRequestTemplate: '{}',
   });
 
-  expect(app).toThrowError(/The 'allowCreateOperation' property must be set to true when setting any of the following: 'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses'/);
+  expect(app).toThrowError(/The 'allowCreateOperation' property must be set to true when setting any of the following: 'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses', 'messageSchema'/);
 });
 
 test('Construct throws error when additionalCreateRequestTemplates is set and allowCreateOperation is not true', () => {
@@ -592,7 +601,7 @@ test('Construct throws error when additionalCreateRequestTemplates is set and al
     additionalCreateRequestTemplates: {}
   });
 
-  expect(app).toThrowError(/The 'allowCreateOperation' property must be set to true when setting any of the following: 'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses'/);
+  expect(app).toThrowError(/The 'allowCreateOperation' property must be set to true when setting any of the following: 'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses', 'messageSchema'/);
 });
 
 test('Construct throws error when createIntegrationResponses is set and allowCreateOperation is not true', () => {
@@ -601,7 +610,7 @@ test('Construct throws error when createIntegrationResponses is set and allowCre
     createIntegrationResponses: []
   });
 
-  expect(app).toThrowError(/The 'allowCreateOperation' property must be set to true when setting any of the following: 'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses'/);
+  expect(app).toThrowError(/The 'allowCreateOperation' property must be set to true when setting any of the following: 'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses', 'messageSchema'/);
 });
 
 test('Construct throws error when readRequestTemplate is set and allowReadOperation is false', () => {
@@ -694,6 +703,7 @@ test('Construct uses custom createMethodResponses property', () => {
   });
 
   const template = Template.fromStack(stack);
+
   template.hasResourceProperties('AWS::ApiGateway::Method', {
     HttpMethod: 'POST',
     MethodResponses: [{
@@ -712,7 +722,7 @@ test('Construct uses custom createMethodResponses property', () => {
   });
 });
 
-test.only('Construct uses custom deleteMethodResponses property', () => {
+test('Construct uses custom deleteMethodResponses property', () => {
   const stack = new Stack();
   new ApiGatewayToSqs(stack, 'api-gateway-sqs', {
     allowCreateOperation: false,
@@ -750,7 +760,7 @@ test.only('Construct uses custom deleteMethodResponses property', () => {
   });
 });
 
-test.only('Construct uses custom readMethodResponses property', () => {
+test('Construct uses custom readMethodResponses property', () => {
   const stack = new Stack();
   new ApiGatewayToSqs(stack, 'api-gateway-sqs', {
     allowCreateOperation: false,
@@ -787,3 +797,90 @@ test.only('Construct uses custom readMethodResponses property', () => {
     }
   });
 });
+
+test('Construct uses mulitple custom messageSchema', () => {
+  const stack = new Stack();
+  const props: ApiGatewayToSqsProps = {
+    allowCreateOperation: true,
+    messageSchema: {
+      "application/json": {
+        schema: api.JsonSchemaVersion.DRAFT4,
+        title: 'pollResponse',
+        type: api.JsonSchemaType.OBJECT,
+        required: ['state', 'greeting'],
+        additionalProperties: false,
+        properties: {
+          state: { type: api.JsonSchemaType.STRING },
+          greeting: { type: api.JsonSchemaType.STRING }
+        }
+      },
+      "application/text": {
+        schema: api.JsonSchemaVersion.DRAFT4,
+        title: 'pollResponse',
+        type: api.JsonSchemaType.OBJECT,
+        additionalProperties: false,
+        properties: {
+          textstate: { type: api.JsonSchemaType.STRING },
+          textgreeting: { type: api.JsonSchemaType.STRING }
+        }
+      }
+    }
+  };
+
+  new ApiGatewayToSqs(stack, 'test-api-gateway-sqs', props);
+  const template = Template.fromStack(stack);
+  template.resourceCountIs("AWS::ApiGateway::Model", 2);
+  template.hasResourceProperties("AWS::ApiGateway::Model", {
+    ContentType: "application/json",
+    RestApiId: Match.anyValue(),
+    Schema: {
+      $schema: "http://json-schema.org/draft-04/schema#",
+      title: "pollResponse",
+      type: "object",
+      required: [
+        "state",
+        "greeting"
+      ],
+      additionalProperties: false,
+      properties: {
+        state: {
+          type: "string"
+        },
+        greeting: {
+          type: "string"
+        }
+      }
+    }
+  });
+  template.hasResourceProperties("AWS::ApiGateway::Model", {
+    ContentType: "application/text",
+    RestApiId: Match.anyValue(),
+    Schema: {
+      $schema: "http://json-schema.org/draft-04/schema#",
+      title: "pollResponse",
+      type: "object",
+      additionalProperties: false,
+      properties: {
+        textstate: {
+          type: "string"
+        },
+        textgreeting: {
+          type: "string"
+        }
+      }
+    }
+  });
+  template.hasResourceProperties("AWS::ApiGateway::Method", {
+    Integration: {
+      IntegrationHttpMethod: "POST"
+    },
+    RequestModels: {
+      'application/json': {
+        Ref: "testapigatewaysqstestapigatewaysqsmodelapplicationjson94EAC0E9"
+      },
+      'application/text': {
+        Ref: "testapigatewaysqstestapigatewaysqsmodelapplicationtext6A72CC47"
+      }
+    }
+  });
+});
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqs-custom-method-responses.assets.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqs-custom-method-responses.assets.json
index d5b3eeac7..130e7e5ab 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqs-custom-method-responses.assets.json
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqs-custom-method-responses.assets.json
@@ -1,7 +1,7 @@
 {
-  "version": "36.0.0",
+  "version": "38.0.1",
   "files": {
-    "ffcb28580155609b6742f44a39e21a4bc1428993a1c8d27ff75ccd916dc7fc83": {
+    "a833b41dd73a597b3f3639956815c07229fc3e8ffc7c95190083a2f2150d1741": {
       "source": {
         "path": "apisqs-custom-method-responses.template.json",
         "packaging": "file"
@@ -9,7 +9,7 @@
       "destinations": {
         "current_account-current_region": {
           "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
-          "objectKey": "ffcb28580155609b6742f44a39e21a4bc1428993a1c8d27ff75ccd916dc7fc83.json",
+          "objectKey": "a833b41dd73a597b3f3639956815c07229fc3e8ffc7c95190083a2f2150d1741.json",
           "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
         }
       }
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqs-custom-method-responses.template.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqs-custom-method-responses.template.json
index 6885afed0..a97eeccb4 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqs-custom-method-responses.template.json
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqs-custom-method-responses.template.json
@@ -198,7 +198,7 @@
     "Name": "RestApi"
    }
   },
-  "testapigatewaysqsintegrationresponsesRestApiDeployment97492235ba12181676bc85f5ec834b0573595244": {
+  "testapigatewaysqsintegrationresponsesRestApiDeployment974922353e4806ac8e022d69559519d119a6f456": {
    "Type": "AWS::ApiGateway::Deployment",
    "Properties": {
     "Description": "Automatically created by the RestApi construct",
@@ -207,7 +207,8 @@
     }
    },
    "DependsOn": [
-    "testapigatewaysqsintegrationresponsesRestApiGETD105D1F1"
+    "testapigatewaysqsintegrationresponsesRestApiGETD105D1F1",
+    "testapigatewaysqsintegrationresponsesRestApiPOSTFBB6D4FB"
    ],
    "Metadata": {
     "cfn_nag": {
@@ -233,7 +234,7 @@
      "Format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"
     },
     "DeploymentId": {
-     "Ref": "testapigatewaysqsintegrationresponsesRestApiDeployment97492235ba12181676bc85f5ec834b0573595244"
+     "Ref": "testapigatewaysqsintegrationresponsesRestApiDeployment974922353e4806ac8e022d69559519d119a6f456"
     },
     "MethodSettings": [
      {
@@ -257,6 +258,78 @@
     }
    }
   },
+  "testapigatewaysqsintegrationresponsesRestApiPOSTFBB6D4FB": {
+   "Type": "AWS::ApiGateway::Method",
+   "Properties": {
+    "AuthorizationType": "AWS_IAM",
+    "HttpMethod": "POST",
+    "Integration": {
+     "Credentials": {
+      "Fn::GetAtt": [
+       "testapigatewaysqsintegrationresponsesapigatewayrole6FC88B17",
+       "Arn"
+      ]
+     },
+     "IntegrationHttpMethod": "POST",
+     "IntegrationResponses": [
+      {
+       "ResponseTemplates": {
+        "text/html": "OK"
+       },
+       "StatusCode": "201"
+      }
+     ],
+     "PassthroughBehavior": "NEVER",
+     "RequestParameters": {
+      "integration.request.header.Content-Type": "'application/x-www-form-urlencoded'"
+     },
+     "RequestTemplates": {
+      "application/json": "Action=SendMessage&MessageBody=$util.urlEncode(\"$input.body\")"
+     },
+     "Type": "AWS",
+     "Uri": {
+      "Fn::Join": [
+       "",
+       [
+        "arn:",
+        {
+         "Ref": "AWS::Partition"
+        },
+        ":apigateway:",
+        {
+         "Ref": "AWS::Region"
+        },
+        ":sqs:path/",
+        {
+         "Ref": "AWS::AccountId"
+        },
+        "/",
+        {
+         "Fn::GetAtt": [
+          "testapigatewaysqsintegrationresponsesqueueF9FA04EF",
+          "QueueName"
+         ]
+        }
+       ]
+      ]
+     }
+    },
+    "MethodResponses": [
+     {
+      "StatusCode": "201"
+     }
+    ],
+    "ResourceId": {
+     "Fn::GetAtt": [
+      "testapigatewaysqsintegrationresponsesRestApi3BE7E402",
+      "RootResourceId"
+     ]
+    },
+    "RestApiId": {
+     "Ref": "testapigatewaysqsintegrationresponsesRestApi3BE7E402"
+    }
+   }
+  },
   "testapigatewaysqsintegrationresponsesRestApiGETD105D1F1": {
    "Type": "AWS::ApiGateway::Method",
    "Properties": {
@@ -451,7 +524,10 @@
     "PolicyDocument": {
      "Statement": [
       {
-       "Action": "sqs:ReceiveMessage",
+       "Action": [
+        "sqs:ReceiveMessage",
+        "sqs:SendMessage"
+       ],
        "Effect": "Allow",
        "Resource": {
         "Fn::GetAtt": [
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqscustommethodresponsesIntegDefaultTestDeployAssert1077EBE4.assets.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqscustommethodresponsesIntegDefaultTestDeployAssert1077EBE4.assets.json
index 786b0edea..342effec3 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqscustommethodresponsesIntegDefaultTestDeployAssert1077EBE4.assets.json
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/apisqscustommethodresponsesIntegDefaultTestDeployAssert1077EBE4.assets.json
@@ -1,5 +1,5 @@
 {
-  "version": "36.0.0",
+  "version": "38.0.1",
   "files": {
     "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": {
       "source": {
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/cdk.out b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/cdk.out
index 1f0068d32..c6e612584 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/cdk.out
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/cdk.out
@@ -1,1 +1,1 @@
-{"version":"36.0.0"}
\ No newline at end of file
+{"version":"38.0.1"}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/integ.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/integ.json
index 846124056..00c002cd8 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/integ.json
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/integ.json
@@ -1,5 +1,5 @@
 {
-  "version": "36.0.0",
+  "version": "38.0.1",
   "testCases": {
     "apisqs-custom-method-responses/Integ/DefaultTest": {
       "stacks": [
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/manifest.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/manifest.json
index 5eb8e4a59..0a8b51a3e 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/manifest.json
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/manifest.json
@@ -1,5 +1,5 @@
 {
-  "version": "36.0.0",
+  "version": "38.0.1",
   "artifacts": {
     "apisqscustommethodresponsesIntegDefaultTestDeployAssert1077EBE4.assets": {
       "type": "cdk:asset-manifest",
@@ -16,6 +16,7 @@
         "templateFile": "apisqscustommethodresponsesIntegDefaultTestDeployAssert1077EBE4.template.json",
         "terminationProtection": false,
         "validateOnSynth": false,
+        "notificationArns": [],
         "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
         "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
         "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
@@ -64,9 +65,10 @@
         "templateFile": "apisqs-custom-method-responses.template.json",
         "terminationProtection": false,
         "validateOnSynth": false,
+        "notificationArns": [],
         "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
         "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
-        "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/ffcb28580155609b6742f44a39e21a4bc1428993a1c8d27ff75ccd916dc7fc83.json",
+        "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/a833b41dd73a597b3f3639956815c07229fc3e8ffc7c95190083a2f2150d1741.json",
         "requiresBootstrapStackVersion": 6,
         "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
         "additionalDependencies": [
@@ -121,7 +123,7 @@
         "/apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/Deployment/Resource": [
           {
             "type": "aws:cdk:logicalId",
-            "data": "testapigatewaysqsintegrationresponsesRestApiDeployment97492235ba12181676bc85f5ec834b0573595244"
+            "data": "testapigatewaysqsintegrationresponsesRestApiDeployment974922353e4806ac8e022d69559519d119a6f456"
           }
         ],
         "/apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/DeploymentStage.prod/Resource": [
@@ -136,6 +138,12 @@
             "data": "testapigatewaysqsintegrationresponsesRestApiEndpointEBC579CE"
           }
         ],
+        "/apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/Default/POST/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsintegrationresponsesRestApiPOSTFBB6D4FB"
+          }
+        ],
         "/apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/Default/GET/Resource": [
           {
             "type": "aws:cdk:logicalId",
@@ -183,6 +191,15 @@
             "type": "aws:cdk:logicalId",
             "data": "CheckBootstrapVersion"
           }
+        ],
+        "testapigatewaysqsintegrationresponsesRestApiDeployment97492235bc028531be7a48af2fc8610476ef0ee8": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsintegrationresponsesRestApiDeployment97492235bc028531be7a48af2fc8610476ef0ee8",
+            "trace": [
+              "!!DESTRUCTIVE_CHANGES: WILL_DESTROY"
+            ]
+          }
         ]
       },
       "displayName": "apisqs-custom-method-responses"
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/tree.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/tree.json
index 5f264afe9..e492ad1f2 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/tree.json
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.js.snapshot/tree.json
@@ -27,7 +27,7 @@
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_sqs.CfnQueue",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "Policy": {
@@ -110,19 +110,19 @@
                         },
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.aws_sqs.CfnQueuePolicy",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       }
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_sqs.QueuePolicy",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   }
                 },
                 "constructInfo": {
                   "fqn": "aws-cdk-lib.aws_sqs.Queue",
-                  "version": "2.150.0"
+                  "version": "2.160.0"
                 }
               },
               "queue": {
@@ -149,7 +149,7 @@
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_sqs.CfnQueue",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "Policy": {
@@ -232,19 +232,19 @@
                         },
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.aws_sqs.CfnQueuePolicy",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       }
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_sqs.QueuePolicy",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   }
                 },
                 "constructInfo": {
                   "fqn": "aws-cdk-lib.aws_sqs.Queue",
-                  "version": "2.150.0"
+                  "version": "2.160.0"
                 }
               },
               "ApiAccessLogGroup": {
@@ -260,13 +260,13 @@
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_logs.CfnLogGroup",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   }
                 },
                 "constructInfo": {
                   "fqn": "aws-cdk-lib.aws_logs.LogGroup",
-                  "version": "2.150.0"
+                  "version": "2.160.0"
                 }
               },
               "RestApi": {
@@ -289,7 +289,7 @@
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_apigateway.CfnRestApi",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "Deployment": {
@@ -310,13 +310,13 @@
                         },
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.aws_apigateway.CfnDeployment",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       }
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_apigateway.Deployment",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "DeploymentStage.prod": {
@@ -339,7 +339,7 @@
                               "format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"
                             },
                             "deploymentId": {
-                              "Ref": "testapigatewaysqsintegrationresponsesRestApiDeployment97492235ba12181676bc85f5ec834b0573595244"
+                              "Ref": "testapigatewaysqsintegrationresponsesRestApiDeployment974922353e4806ac8e022d69559519d119a6f456"
                             },
                             "methodSettings": [
                               {
@@ -358,13 +358,13 @@
                         },
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.aws_apigateway.CfnStage",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       }
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_apigateway.Stage",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "Endpoint": {
@@ -372,13 +372,103 @@
                     "path": "apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/Endpoint",
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.CfnOutput",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "Default": {
                     "id": "Default",
                     "path": "apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/Default",
                     "children": {
+                      "POST": {
+                        "id": "POST",
+                        "path": "apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/Default/POST",
+                        "children": {
+                          "Resource": {
+                            "id": "Resource",
+                            "path": "apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/Default/POST/Resource",
+                            "attributes": {
+                              "aws:cdk:cloudformation:type": "AWS::ApiGateway::Method",
+                              "aws:cdk:cloudformation:props": {
+                                "authorizationType": "AWS_IAM",
+                                "httpMethod": "POST",
+                                "integration": {
+                                  "type": "AWS",
+                                  "uri": {
+                                    "Fn::Join": [
+                                      "",
+                                      [
+                                        "arn:",
+                                        {
+                                          "Ref": "AWS::Partition"
+                                        },
+                                        ":apigateway:",
+                                        {
+                                          "Ref": "AWS::Region"
+                                        },
+                                        ":sqs:path/",
+                                        {
+                                          "Ref": "AWS::AccountId"
+                                        },
+                                        "/",
+                                        {
+                                          "Fn::GetAtt": [
+                                            "testapigatewaysqsintegrationresponsesqueueF9FA04EF",
+                                            "QueueName"
+                                          ]
+                                        }
+                                      ]
+                                    ]
+                                  },
+                                  "integrationHttpMethod": "POST",
+                                  "requestParameters": {
+                                    "integration.request.header.Content-Type": "'application/x-www-form-urlencoded'"
+                                  },
+                                  "requestTemplates": {
+                                    "application/json": "Action=SendMessage&MessageBody=$util.urlEncode(\"$input.body\")"
+                                  },
+                                  "passthroughBehavior": "NEVER",
+                                  "integrationResponses": [
+                                    {
+                                      "statusCode": "201",
+                                      "responseTemplates": {
+                                        "text/html": "OK"
+                                      }
+                                    }
+                                  ],
+                                  "credentials": {
+                                    "Fn::GetAtt": [
+                                      "testapigatewaysqsintegrationresponsesapigatewayrole6FC88B17",
+                                      "Arn"
+                                    ]
+                                  }
+                                },
+                                "methodResponses": [
+                                  {
+                                    "statusCode": "201"
+                                  }
+                                ],
+                                "resourceId": {
+                                  "Fn::GetAtt": [
+                                    "testapigatewaysqsintegrationresponsesRestApi3BE7E402",
+                                    "RootResourceId"
+                                  ]
+                                },
+                                "restApiId": {
+                                  "Ref": "testapigatewaysqsintegrationresponsesRestApi3BE7E402"
+                                }
+                              }
+                            },
+                            "constructInfo": {
+                              "fqn": "aws-cdk-lib.aws_apigateway.CfnMethod",
+                              "version": "2.160.0"
+                            }
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_apigateway.Method",
+                          "version": "2.160.0"
+                        }
+                      },
                       "GET": {
                         "id": "GET",
                         "path": "apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/RestApi/Default/GET",
@@ -463,19 +553,19 @@
                             },
                             "constructInfo": {
                               "fqn": "aws-cdk-lib.aws_apigateway.CfnMethod",
-                              "version": "2.150.0"
+                              "version": "2.160.0"
                             }
                           }
                         },
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.aws_apigateway.Method",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       }
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_apigateway.ResourceBase",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "UsagePlan": {
@@ -503,19 +593,19 @@
                         },
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.aws_apigateway.CfnUsagePlan",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       }
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_apigateway.UsagePlan",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   }
                 },
                 "constructInfo": {
                   "fqn": "aws-cdk-lib.aws_apigateway.RestApi",
-                  "version": "2.150.0"
+                  "version": "2.160.0"
                 }
               },
               "LambdaRestApiCloudWatchRole": {
@@ -527,7 +617,7 @@
                     "path": "apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/LambdaRestApiCloudWatchRole/ImportLambdaRestApiCloudWatchRole",
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.Resource",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "Resource": {
@@ -594,13 +684,13 @@
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_iam.CfnRole",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   }
                 },
                 "constructInfo": {
                   "fqn": "aws-cdk-lib.aws_iam.Role",
-                  "version": "2.150.0"
+                  "version": "2.160.0"
                 }
               },
               "LambdaRestApiAccount": {
@@ -619,7 +709,7 @@
                 },
                 "constructInfo": {
                   "fqn": "aws-cdk-lib.aws_apigateway.CfnAccount",
-                  "version": "2.150.0"
+                  "version": "2.160.0"
                 }
               },
               "api-gateway-role": {
@@ -631,7 +721,7 @@
                     "path": "apisqs-custom-method-responses/test-api-gateway-sqs-integration-responses/api-gateway-role/Importapi-gateway-role",
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.Resource",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "Resource": {
@@ -656,7 +746,7 @@
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_iam.CfnRole",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   },
                   "DefaultPolicy": {
@@ -672,7 +762,10 @@
                             "policyDocument": {
                               "Statement": [
                                 {
-                                  "Action": "sqs:ReceiveMessage",
+                                  "Action": [
+                                    "sqs:ReceiveMessage",
+                                    "sqs:SendMessage"
+                                  ],
                                   "Effect": "Allow",
                                   "Resource": {
                                     "Fn::GetAtt": [
@@ -694,25 +787,25 @@
                         },
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.aws_iam.CfnPolicy",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       }
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.aws_iam.Policy",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   }
                 },
                 "constructInfo": {
                   "fqn": "aws-cdk-lib.aws_iam.Role",
-                  "version": "2.150.0"
+                  "version": "2.160.0"
                 }
               }
             },
             "constructInfo": {
               "fqn": "@aws-solutions-constructs/aws-apigateway-sqs.ApiGatewayToSqs",
-              "version": "2.63.0"
+              "version": "2.71.0"
             }
           },
           "Integ": {
@@ -740,7 +833,7 @@
                         "path": "apisqs-custom-method-responses/Integ/DefaultTest/DeployAssert/BootstrapVersion",
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.CfnParameter",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       },
                       "CheckBootstrapVersion": {
@@ -748,25 +841,25 @@
                         "path": "apisqs-custom-method-responses/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion",
                         "constructInfo": {
                           "fqn": "aws-cdk-lib.CfnRule",
-                          "version": "2.150.0"
+                          "version": "2.160.0"
                         }
                       }
                     },
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.Stack",
-                      "version": "2.150.0"
+                      "version": "2.160.0"
                     }
                   }
                 },
                 "constructInfo": {
                   "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase",
-                  "version": "2.150.0-alpha.0"
+                  "version": "2.160.0-alpha.0"
                 }
               }
             },
             "constructInfo": {
               "fqn": "@aws-cdk/integ-tests-alpha.IntegTest",
-              "version": "2.150.0-alpha.0"
+              "version": "2.160.0-alpha.0"
             }
           },
           "BootstrapVersion": {
@@ -774,7 +867,7 @@
             "path": "apisqs-custom-method-responses/BootstrapVersion",
             "constructInfo": {
               "fqn": "aws-cdk-lib.CfnParameter",
-              "version": "2.150.0"
+              "version": "2.160.0"
             }
           },
           "CheckBootstrapVersion": {
@@ -782,13 +875,13 @@
             "path": "apisqs-custom-method-responses/CheckBootstrapVersion",
             "constructInfo": {
               "fqn": "aws-cdk-lib.CfnRule",
-              "version": "2.150.0"
+              "version": "2.160.0"
             }
           }
         },
         "constructInfo": {
           "fqn": "aws-cdk-lib.Stack",
-          "version": "2.150.0"
+          "version": "2.160.0"
         }
       },
       "Tree": {
@@ -802,7 +895,7 @@
     },
     "constructInfo": {
       "fqn": "aws-cdk-lib.App",
-      "version": "2.150.0"
+      "version": "2.160.0"
     }
   }
 }
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.ts b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.ts
index 4f2a01be9..7e5973ee8 100644
--- a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.ts
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-method-responses.ts
@@ -37,6 +37,18 @@ new ApiGatewayToSqs(stack, 'test-api-gateway-sqs-integration-responses', {
   },
   {
     statusCode: '403'
+  }],
+  allowCreateOperation: true,
+  createIntegrationResponses: [
+    {
+      statusCode: '201',
+      responseTemplates: {
+        'text/html': 'OK'
+      }
+    }
+  ],
+  createMethodResponses: [{
+    statusCode: '201'
   }]
 });
 
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqs-custom-request-model.assets.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqs-custom-request-model.assets.json
new file mode 100644
index 000000000..50d77665c
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqs-custom-request-model.assets.json
@@ -0,0 +1,19 @@
+{
+  "version": "38.0.1",
+  "files": {
+    "0194d8d93f7ef8918132d1d509ff87c71a2fb5f6ebf3228bc6533ce637e6dc22": {
+      "source": {
+        "path": "apisqs-custom-request-model.template.json",
+        "packaging": "file"
+      },
+      "destinations": {
+        "current_account-current_region": {
+          "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
+          "objectKey": "0194d8d93f7ef8918132d1d509ff87c71a2fb5f6ebf3228bc6533ce637e6dc22.json",
+          "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
+        }
+      }
+    }
+  },
+  "dockerImages": {}
+}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqs-custom-request-model.template.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqs-custom-request-model.template.json
new file mode 100644
index 000000000..fd6ed03e7
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqs-custom-request-model.template.json
@@ -0,0 +1,709 @@
+{
+ "Description": "Integration Test for aws-apigateway-sqs",
+ "Resources": {
+  "testapigatewaysqsqueuedlq8A515F77": {
+   "Type": "AWS::SQS::Queue",
+   "Properties": {
+    "KmsMasterKeyId": "alias/aws/sqs"
+   },
+   "UpdateReplacePolicy": "Delete",
+   "DeletionPolicy": "Delete"
+  },
+  "testapigatewaysqsqueuedlqPolicyB341351F": {
+   "Type": "AWS::SQS::QueuePolicy",
+   "Properties": {
+    "PolicyDocument": {
+     "Statement": [
+      {
+       "Action": [
+        "sqs:AddPermission",
+        "sqs:DeleteMessage",
+        "sqs:GetQueueAttributes",
+        "sqs:ReceiveMessage",
+        "sqs:RemovePermission",
+        "sqs:SendMessage",
+        "sqs:SetQueueAttributes"
+       ],
+       "Effect": "Allow",
+       "Principal": {
+        "AWS": {
+         "Fn::Join": [
+          "",
+          [
+           "arn:",
+           {
+            "Ref": "AWS::Partition"
+           },
+           ":iam::",
+           {
+            "Ref": "AWS::AccountId"
+           },
+           ":root"
+          ]
+         ]
+        }
+       },
+       "Resource": {
+        "Fn::GetAtt": [
+         "testapigatewaysqsqueuedlq8A515F77",
+         "Arn"
+        ]
+       },
+       "Sid": "QueueOwnerOnlyAccess"
+      },
+      {
+       "Action": "SQS:*",
+       "Condition": {
+        "Bool": {
+         "aws:SecureTransport": "false"
+        }
+       },
+       "Effect": "Deny",
+       "Principal": {
+        "AWS": "*"
+       },
+       "Resource": {
+        "Fn::GetAtt": [
+         "testapigatewaysqsqueuedlq8A515F77",
+         "Arn"
+        ]
+       },
+       "Sid": "HttpsOnly"
+      }
+     ],
+     "Version": "2012-10-17"
+    },
+    "Queues": [
+     {
+      "Ref": "testapigatewaysqsqueuedlq8A515F77"
+     }
+    ]
+   }
+  },
+  "testapigatewaysqsqueue8EDC3CAF": {
+   "Type": "AWS::SQS::Queue",
+   "Properties": {
+    "KmsMasterKeyId": "alias/aws/sqs",
+    "RedrivePolicy": {
+     "deadLetterTargetArn": {
+      "Fn::GetAtt": [
+       "testapigatewaysqsqueuedlq8A515F77",
+       "Arn"
+      ]
+     },
+     "maxReceiveCount": 15
+    }
+   },
+   "UpdateReplacePolicy": "Delete",
+   "DeletionPolicy": "Delete"
+  },
+  "testapigatewaysqsqueuePolicy8623EDE8": {
+   "Type": "AWS::SQS::QueuePolicy",
+   "Properties": {
+    "PolicyDocument": {
+     "Statement": [
+      {
+       "Action": [
+        "sqs:AddPermission",
+        "sqs:DeleteMessage",
+        "sqs:GetQueueAttributes",
+        "sqs:ReceiveMessage",
+        "sqs:RemovePermission",
+        "sqs:SendMessage",
+        "sqs:SetQueueAttributes"
+       ],
+       "Effect": "Allow",
+       "Principal": {
+        "AWS": {
+         "Fn::Join": [
+          "",
+          [
+           "arn:",
+           {
+            "Ref": "AWS::Partition"
+           },
+           ":iam::",
+           {
+            "Ref": "AWS::AccountId"
+           },
+           ":root"
+          ]
+         ]
+        }
+       },
+       "Resource": {
+        "Fn::GetAtt": [
+         "testapigatewaysqsqueue8EDC3CAF",
+         "Arn"
+        ]
+       },
+       "Sid": "QueueOwnerOnlyAccess"
+      },
+      {
+       "Action": "SQS:*",
+       "Condition": {
+        "Bool": {
+         "aws:SecureTransport": "false"
+        }
+       },
+       "Effect": "Deny",
+       "Principal": {
+        "AWS": "*"
+       },
+       "Resource": {
+        "Fn::GetAtt": [
+         "testapigatewaysqsqueue8EDC3CAF",
+         "Arn"
+        ]
+       },
+       "Sid": "HttpsOnly"
+      }
+     ],
+     "Version": "2012-10-17"
+    },
+    "Queues": [
+     {
+      "Ref": "testapigatewaysqsqueue8EDC3CAF"
+     }
+    ]
+   }
+  },
+  "testapigatewaysqsApiAccessLogGroup37AB0350": {
+   "Type": "AWS::Logs::LogGroup",
+   "UpdateReplacePolicy": "Retain",
+   "DeletionPolicy": "Retain",
+   "Metadata": {
+    "cfn_nag": {
+     "rules_to_suppress": [
+      {
+       "id": "W86",
+       "reason": "Retention period for CloudWatchLogs LogGroups are set to 'Never Expire' to preserve customer data indefinitely"
+      },
+      {
+       "id": "W84",
+       "reason": "By default CloudWatchLogs LogGroups data is encrypted using the CloudWatch server-side encryption keys (AWS Managed Keys)"
+      }
+     ]
+    }
+   }
+  },
+  "testapigatewaysqsRestApi557C7EDC": {
+   "Type": "AWS::ApiGateway::RestApi",
+   "Properties": {
+    "EndpointConfiguration": {
+     "Types": [
+      "EDGE"
+     ]
+    },
+    "Name": "RestApi"
+   }
+  },
+  "testapigatewaysqsRestApiDeploymentCA19D372a533abf5414c204f290523aaae9a51c0": {
+   "Type": "AWS::ApiGateway::Deployment",
+   "Properties": {
+    "Description": "Automatically created by the RestApi construct",
+    "RestApiId": {
+     "Ref": "testapigatewaysqsRestApi557C7EDC"
+    }
+   },
+   "DependsOn": [
+    "testapigatewaysqsRestApiapisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4C98634F8",
+    "testapigatewaysqsRestApiGET4AA265C9",
+    "testapigatewaysqsRestApiPOST26D15DBA",
+    "testapigatewaysqstestapigatewaysqsmodelapplicationjson94EAC0E9",
+    "testapigatewaysqstestapigatewaysqsmodelapplicationtext6A72CC47"
+   ],
+   "Metadata": {
+    "cfn_nag": {
+     "rules_to_suppress": [
+      {
+       "id": "W45",
+       "reason": "ApiGateway has AccessLogging enabled in AWS::ApiGateway::Stage resource, but cfn_nag checks for it in AWS::ApiGateway::Deployment resource"
+      }
+     ]
+    }
+   }
+  },
+  "testapigatewaysqsRestApiDeploymentStageprod1C007159": {
+   "Type": "AWS::ApiGateway::Stage",
+   "Properties": {
+    "AccessLogSetting": {
+     "DestinationArn": {
+      "Fn::GetAtt": [
+       "testapigatewaysqsApiAccessLogGroup37AB0350",
+       "Arn"
+      ]
+     },
+     "Format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"
+    },
+    "DeploymentId": {
+     "Ref": "testapigatewaysqsRestApiDeploymentCA19D372a533abf5414c204f290523aaae9a51c0"
+    },
+    "MethodSettings": [
+     {
+      "DataTraceEnabled": false,
+      "HttpMethod": "*",
+      "LoggingLevel": "INFO",
+      "ResourcePath": "/*"
+     }
+    ],
+    "RestApiId": {
+     "Ref": "testapigatewaysqsRestApi557C7EDC"
+    },
+    "StageName": "prod",
+    "TracingEnabled": true
+   },
+   "Metadata": {
+    "guard": {
+     "SuppressedRules": [
+      "API_GW_CACHE_ENABLED_AND_ENCRYPTED"
+     ]
+    }
+   }
+  },
+  "testapigatewaysqsRestApiPOST26D15DBA": {
+   "Type": "AWS::ApiGateway::Method",
+   "Properties": {
+    "AuthorizationType": "AWS_IAM",
+    "HttpMethod": "POST",
+    "Integration": {
+     "Credentials": {
+      "Fn::GetAtt": [
+       "testapigatewaysqsapigatewayrole07110CD6",
+       "Arn"
+      ]
+     },
+     "IntegrationHttpMethod": "POST",
+     "IntegrationResponses": [
+      {
+       "StatusCode": "200"
+      },
+      {
+       "ResponseTemplates": {
+        "text/html": "Error"
+       },
+       "SelectionPattern": "500",
+       "StatusCode": "500"
+      }
+     ],
+     "PassthroughBehavior": "NEVER",
+     "RequestParameters": {
+      "integration.request.header.Content-Type": "'application/x-www-form-urlencoded'"
+     },
+     "RequestTemplates": {
+      "application/json": "Action=SendMessage&MessageBody=$util.urlEncode(\"$input.body\")"
+     },
+     "Type": "AWS",
+     "Uri": {
+      "Fn::Join": [
+       "",
+       [
+        "arn:",
+        {
+         "Ref": "AWS::Partition"
+        },
+        ":apigateway:",
+        {
+         "Ref": "AWS::Region"
+        },
+        ":sqs:path/",
+        {
+         "Ref": "AWS::AccountId"
+        },
+        "/",
+        {
+         "Fn::GetAtt": [
+          "testapigatewaysqsqueue8EDC3CAF",
+          "QueueName"
+         ]
+        }
+       ]
+      ]
+     }
+    },
+    "MethodResponses": [
+     {
+      "ResponseParameters": {
+       "method.response.header.Content-Type": true
+      },
+      "StatusCode": "200"
+     },
+     {
+      "ResponseParameters": {
+       "method.response.header.Content-Type": true
+      },
+      "StatusCode": "500"
+     }
+    ],
+    "RequestModels": {
+     "application/json": {
+      "Ref": "testapigatewaysqstestapigatewaysqsmodelapplicationjson94EAC0E9"
+     },
+     "application/text": {
+      "Ref": "testapigatewaysqstestapigatewaysqsmodelapplicationtext6A72CC47"
+     }
+    },
+    "RequestValidatorId": {
+     "Ref": "testapigatewaysqsRestApiapisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4C98634F8"
+    },
+    "ResourceId": {
+     "Fn::GetAtt": [
+      "testapigatewaysqsRestApi557C7EDC",
+      "RootResourceId"
+     ]
+    },
+    "RestApiId": {
+     "Ref": "testapigatewaysqsRestApi557C7EDC"
+    }
+   }
+  },
+  "testapigatewaysqsRestApiGET4AA265C9": {
+   "Type": "AWS::ApiGateway::Method",
+   "Properties": {
+    "AuthorizationType": "AWS_IAM",
+    "HttpMethod": "GET",
+    "Integration": {
+     "Credentials": {
+      "Fn::GetAtt": [
+       "testapigatewaysqsapigatewayrole07110CD6",
+       "Arn"
+      ]
+     },
+     "IntegrationHttpMethod": "POST",
+     "IntegrationResponses": [
+      {
+       "StatusCode": "200"
+      },
+      {
+       "ResponseTemplates": {
+        "text/html": "Error"
+       },
+       "SelectionPattern": "500",
+       "StatusCode": "500"
+      }
+     ],
+     "PassthroughBehavior": "NEVER",
+     "RequestParameters": {
+      "integration.request.header.Content-Type": "'application/x-www-form-urlencoded'"
+     },
+     "RequestTemplates": {
+      "application/json": "Action=ReceiveMessage"
+     },
+     "Type": "AWS",
+     "Uri": {
+      "Fn::Join": [
+       "",
+       [
+        "arn:",
+        {
+         "Ref": "AWS::Partition"
+        },
+        ":apigateway:",
+        {
+         "Ref": "AWS::Region"
+        },
+        ":sqs:path/",
+        {
+         "Ref": "AWS::AccountId"
+        },
+        "/",
+        {
+         "Fn::GetAtt": [
+          "testapigatewaysqsqueue8EDC3CAF",
+          "QueueName"
+         ]
+        }
+       ]
+      ]
+     }
+    },
+    "MethodResponses": [
+     {
+      "ResponseParameters": {
+       "method.response.header.Content-Type": true
+      },
+      "StatusCode": "200"
+     },
+     {
+      "ResponseParameters": {
+       "method.response.header.Content-Type": true
+      },
+      "StatusCode": "500"
+     }
+    ],
+    "ResourceId": {
+     "Fn::GetAtt": [
+      "testapigatewaysqsRestApi557C7EDC",
+      "RootResourceId"
+     ]
+    },
+    "RestApiId": {
+     "Ref": "testapigatewaysqsRestApi557C7EDC"
+    }
+   }
+  },
+  "testapigatewaysqsRestApiUsagePlan2295EB95": {
+   "Type": "AWS::ApiGateway::UsagePlan",
+   "Properties": {
+    "ApiStages": [
+     {
+      "ApiId": {
+       "Ref": "testapigatewaysqsRestApi557C7EDC"
+      },
+      "Stage": {
+       "Ref": "testapigatewaysqsRestApiDeploymentStageprod1C007159"
+      },
+      "Throttle": {}
+     }
+    ]
+   }
+  },
+  "testapigatewaysqsRestApiapisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4C98634F8": {
+   "Type": "AWS::ApiGateway::RequestValidator",
+   "Properties": {
+    "RestApiId": {
+     "Ref": "testapigatewaysqsRestApi557C7EDC"
+    },
+    "ValidateRequestBody": true
+   }
+  },
+  "testapigatewaysqsLambdaRestApiCloudWatchRoleF10D0F78": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": "apigateway.amazonaws.com"
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    },
+    "Policies": [
+     {
+      "PolicyDocument": {
+       "Statement": [
+        {
+         "Action": [
+          "logs:CreateLogGroup",
+          "logs:CreateLogStream",
+          "logs:DescribeLogGroups",
+          "logs:DescribeLogStreams",
+          "logs:FilterLogEvents",
+          "logs:GetLogEvents",
+          "logs:PutLogEvents"
+         ],
+         "Effect": "Allow",
+         "Resource": {
+          "Fn::Join": [
+           "",
+           [
+            "arn:",
+            {
+             "Ref": "AWS::Partition"
+            },
+            ":logs:",
+            {
+             "Ref": "AWS::Region"
+            },
+            ":",
+            {
+             "Ref": "AWS::AccountId"
+            },
+            ":*"
+           ]
+          ]
+         }
+        }
+       ],
+       "Version": "2012-10-17"
+      },
+      "PolicyName": "LambdaRestApiCloudWatchRolePolicy"
+     }
+    ]
+   },
+   "Metadata": {
+    "guard": {
+     "SuppressedRules": [
+      "IAM_NO_INLINE_POLICY_CHECK"
+     ]
+    }
+   }
+  },
+  "testapigatewaysqsLambdaRestApiAccountACC6BE82": {
+   "Type": "AWS::ApiGateway::Account",
+   "Properties": {
+    "CloudWatchRoleArn": {
+     "Fn::GetAtt": [
+      "testapigatewaysqsLambdaRestApiCloudWatchRoleF10D0F78",
+      "Arn"
+     ]
+    }
+   },
+   "DependsOn": [
+    "testapigatewaysqsRestApi557C7EDC"
+   ]
+  },
+  "testapigatewaysqsapigatewayrole07110CD6": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": "apigateway.amazonaws.com"
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    }
+   }
+  },
+  "testapigatewaysqsapigatewayroleDefaultPolicy052E7AD5": {
+   "Type": "AWS::IAM::Policy",
+   "Properties": {
+    "PolicyDocument": {
+     "Statement": [
+      {
+       "Action": [
+        "sqs:ReceiveMessage",
+        "sqs:SendMessage"
+       ],
+       "Effect": "Allow",
+       "Resource": {
+        "Fn::GetAtt": [
+         "testapigatewaysqsqueue8EDC3CAF",
+         "Arn"
+        ]
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    },
+    "PolicyName": "testapigatewaysqsapigatewayroleDefaultPolicy052E7AD5",
+    "Roles": [
+     {
+      "Ref": "testapigatewaysqsapigatewayrole07110CD6"
+     }
+    ]
+   }
+  },
+  "testapigatewaysqstestapigatewaysqsmodelapplicationjson94EAC0E9": {
+   "Type": "AWS::ApiGateway::Model",
+   "Properties": {
+    "ContentType": "application/json",
+    "RestApiId": {
+     "Ref": "testapigatewaysqsRestApi557C7EDC"
+    },
+    "Schema": {
+     "$schema": "http://json-schema.org/draft-04/schema#",
+     "title": "pollResponse",
+     "type": "object",
+     "required": [
+      "state",
+      "greeting"
+     ],
+     "additionalProperties": false,
+     "properties": {
+      "state": {
+       "type": "string"
+      },
+      "greeting": {
+       "type": "string"
+      }
+     }
+    }
+   }
+  },
+  "testapigatewaysqstestapigatewaysqsmodelapplicationtext6A72CC47": {
+   "Type": "AWS::ApiGateway::Model",
+   "Properties": {
+    "ContentType": "application/text",
+    "RestApiId": {
+     "Ref": "testapigatewaysqsRestApi557C7EDC"
+    },
+    "Schema": {
+     "$schema": "http://json-schema.org/draft-04/schema#",
+     "title": "pollResponse",
+     "type": "object",
+     "additionalProperties": false,
+     "properties": {
+      "textstate": {
+       "type": "string"
+      },
+      "textgreeting": {
+       "type": "string"
+      }
+     }
+    }
+   }
+  }
+ },
+ "Outputs": {
+  "testapigatewaysqsRestApiEndpointD98015FF": {
+   "Value": {
+    "Fn::Join": [
+     "",
+     [
+      "https://",
+      {
+       "Ref": "testapigatewaysqsRestApi557C7EDC"
+      },
+      ".execute-api.",
+      {
+       "Ref": "AWS::Region"
+      },
+      ".",
+      {
+       "Ref": "AWS::URLSuffix"
+      },
+      "/",
+      {
+       "Ref": "testapigatewaysqsRestApiDeploymentStageprod1C007159"
+      },
+      "/"
+     ]
+    ]
+   }
+  }
+ },
+ "Parameters": {
+  "BootstrapVersion": {
+   "Type": "AWS::SSM::Parameter::Value<String>",
+   "Default": "/cdk-bootstrap/hnb659fds/version",
+   "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
+  }
+ },
+ "Rules": {
+  "CheckBootstrapVersion": {
+   "Assertions": [
+    {
+     "Assert": {
+      "Fn::Not": [
+       {
+        "Fn::Contains": [
+         [
+          "1",
+          "2",
+          "3",
+          "4",
+          "5"
+         ],
+         {
+          "Ref": "BootstrapVersion"
+         }
+        ]
+       }
+      ]
+     },
+     "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
+    }
+   ]
+  }
+ }
+}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.assets.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.assets.json
new file mode 100644
index 000000000..429ebb801
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.assets.json
@@ -0,0 +1,19 @@
+{
+  "version": "38.0.1",
+  "files": {
+    "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": {
+      "source": {
+        "path": "apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.template.json",
+        "packaging": "file"
+      },
+      "destinations": {
+        "current_account-current_region": {
+          "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
+          "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
+          "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
+        }
+      }
+    }
+  },
+  "dockerImages": {}
+}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.template.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.template.json
new file mode 100644
index 000000000..ad9d0fb73
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.template.json
@@ -0,0 +1,36 @@
+{
+ "Parameters": {
+  "BootstrapVersion": {
+   "Type": "AWS::SSM::Parameter::Value<String>",
+   "Default": "/cdk-bootstrap/hnb659fds/version",
+   "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
+  }
+ },
+ "Rules": {
+  "CheckBootstrapVersion": {
+   "Assertions": [
+    {
+     "Assert": {
+      "Fn::Not": [
+       {
+        "Fn::Contains": [
+         [
+          "1",
+          "2",
+          "3",
+          "4",
+          "5"
+         ],
+         {
+          "Ref": "BootstrapVersion"
+         }
+        ]
+       }
+      ]
+     },
+     "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
+    }
+   ]
+  }
+ }
+}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/cdk.out b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/cdk.out
new file mode 100644
index 000000000..c6e612584
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/cdk.out
@@ -0,0 +1,1 @@
+{"version":"38.0.1"}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/integ.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/integ.json
new file mode 100644
index 000000000..efa68b8c1
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/integ.json
@@ -0,0 +1,12 @@
+{
+  "version": "38.0.1",
+  "testCases": {
+    "apisqs-custom-request-model/Integ/DefaultTest": {
+      "stacks": [
+        "apisqs-custom-request-model"
+      ],
+      "assertionStack": "apisqs-custom-request-model/Integ/DefaultTest/DeployAssert",
+      "assertionStackName": "apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027"
+    }
+  }
+}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/manifest.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/manifest.json
new file mode 100644
index 000000000..c3031d97f
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/manifest.json
@@ -0,0 +1,232 @@
+{
+  "version": "38.0.1",
+  "artifacts": {
+    "apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.assets": {
+      "type": "cdk:asset-manifest",
+      "properties": {
+        "file": "apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.assets.json",
+        "requiresBootstrapStackVersion": 6,
+        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+      }
+    },
+    "apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027": {
+      "type": "aws:cloudformation:stack",
+      "environment": "aws://unknown-account/unknown-region",
+      "properties": {
+        "templateFile": "apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.template.json",
+        "terminationProtection": false,
+        "validateOnSynth": false,
+        "notificationArns": [],
+        "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
+        "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
+        "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
+        "requiresBootstrapStackVersion": 6,
+        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
+        "additionalDependencies": [
+          "apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.assets"
+        ],
+        "lookupRole": {
+          "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}",
+          "requiresBootstrapStackVersion": 8,
+          "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+        }
+      },
+      "dependencies": [
+        "apisqscustomrequestmodelIntegDefaultTestDeployAssert2EE4B027.assets"
+      ],
+      "metadata": {
+        "/apisqs-custom-request-model/Integ/DefaultTest/DeployAssert/BootstrapVersion": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "BootstrapVersion"
+          }
+        ],
+        "/apisqs-custom-request-model/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "CheckBootstrapVersion"
+          }
+        ]
+      },
+      "displayName": "apisqs-custom-request-model/Integ/DefaultTest/DeployAssert"
+    },
+    "apisqs-custom-request-model.assets": {
+      "type": "cdk:asset-manifest",
+      "properties": {
+        "file": "apisqs-custom-request-model.assets.json",
+        "requiresBootstrapStackVersion": 6,
+        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+      }
+    },
+    "apisqs-custom-request-model": {
+      "type": "aws:cloudformation:stack",
+      "environment": "aws://unknown-account/unknown-region",
+      "properties": {
+        "templateFile": "apisqs-custom-request-model.template.json",
+        "terminationProtection": false,
+        "validateOnSynth": false,
+        "notificationArns": [],
+        "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
+        "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
+        "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/0194d8d93f7ef8918132d1d509ff87c71a2fb5f6ebf3228bc6533ce637e6dc22.json",
+        "requiresBootstrapStackVersion": 6,
+        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
+        "additionalDependencies": [
+          "apisqs-custom-request-model.assets"
+        ],
+        "lookupRole": {
+          "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}",
+          "requiresBootstrapStackVersion": 8,
+          "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+        }
+      },
+      "dependencies": [
+        "apisqs-custom-request-model.assets"
+      ],
+      "metadata": {
+        "/apisqs-custom-request-model/test-api-gateway-sqs/queue-dlq/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsqueuedlq8A515F77"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/queue-dlq/Policy/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsqueuedlqPolicyB341351F"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/queue/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsqueue8EDC3CAF"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/queue/Policy/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsqueuePolicy8623EDE8"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/ApiAccessLogGroup/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsApiAccessLogGroup37AB0350"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApi557C7EDC"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Deployment/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApiDeploymentCA19D372a533abf5414c204f290523aaae9a51c0"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/RestApi/DeploymentStage.prod/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApiDeploymentStageprod1C007159"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Endpoint": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApiEndpointD98015FF"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Default/POST/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApiPOST26D15DBA"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Default/GET/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApiGET4AA265C9"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/RestApi/UsagePlan/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApiUsagePlan2295EB95"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/RestApi/apisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApiapisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4C98634F8"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/LambdaRestApiCloudWatchRole/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsLambdaRestApiCloudWatchRoleF10D0F78"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/LambdaRestApiAccount": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsLambdaRestApiAccountACC6BE82"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/api-gateway-role/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsapigatewayrole07110CD6"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/api-gateway-role/DefaultPolicy/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsapigatewayroleDefaultPolicy052E7AD5"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/test-api-gateway-sqs-model-applicationjson/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqstestapigatewaysqsmodelapplicationjson94EAC0E9"
+          }
+        ],
+        "/apisqs-custom-request-model/test-api-gateway-sqs/test-api-gateway-sqs-model-applicationtext/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqstestapigatewaysqsmodelapplicationtext6A72CC47"
+          }
+        ],
+        "/apisqs-custom-request-model/BootstrapVersion": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "BootstrapVersion"
+          }
+        ],
+        "/apisqs-custom-request-model/CheckBootstrapVersion": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "CheckBootstrapVersion"
+          }
+        ],
+        "testapigatewaysqsRestApiDeploymentCA19D3729ed4c2c9e3bb9d0e8c5b1e8d0c261087": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "testapigatewaysqsRestApiDeploymentCA19D3729ed4c2c9e3bb9d0e8c5b1e8d0c261087",
+            "trace": [
+              "!!DESTRUCTIVE_CHANGES: WILL_DESTROY"
+            ]
+          }
+        ]
+      },
+      "displayName": "apisqs-custom-request-model"
+    },
+    "Tree": {
+      "type": "cdk:tree",
+      "properties": {
+        "file": "tree.json"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/tree.json b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/tree.json
new file mode 100644
index 000000000..6d9214ba7
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.js.snapshot/tree.json
@@ -0,0 +1,1056 @@
+{
+  "version": "tree-0.1",
+  "tree": {
+    "id": "App",
+    "path": "",
+    "children": {
+      "apisqs-custom-request-model": {
+        "id": "apisqs-custom-request-model",
+        "path": "apisqs-custom-request-model",
+        "children": {
+          "test-api-gateway-sqs": {
+            "id": "test-api-gateway-sqs",
+            "path": "apisqs-custom-request-model/test-api-gateway-sqs",
+            "children": {
+              "queue-dlq": {
+                "id": "queue-dlq",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/queue-dlq",
+                "children": {
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/queue-dlq/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::SQS::Queue",
+                      "aws:cdk:cloudformation:props": {
+                        "kmsMasterKeyId": "alias/aws/sqs"
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_sqs.CfnQueue",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "Policy": {
+                    "id": "Policy",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/queue-dlq/Policy",
+                    "children": {
+                      "Resource": {
+                        "id": "Resource",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/queue-dlq/Policy/Resource",
+                        "attributes": {
+                          "aws:cdk:cloudformation:type": "AWS::SQS::QueuePolicy",
+                          "aws:cdk:cloudformation:props": {
+                            "policyDocument": {
+                              "Statement": [
+                                {
+                                  "Action": [
+                                    "sqs:AddPermission",
+                                    "sqs:DeleteMessage",
+                                    "sqs:GetQueueAttributes",
+                                    "sqs:ReceiveMessage",
+                                    "sqs:RemovePermission",
+                                    "sqs:SendMessage",
+                                    "sqs:SetQueueAttributes"
+                                  ],
+                                  "Effect": "Allow",
+                                  "Principal": {
+                                    "AWS": {
+                                      "Fn::Join": [
+                                        "",
+                                        [
+                                          "arn:",
+                                          {
+                                            "Ref": "AWS::Partition"
+                                          },
+                                          ":iam::",
+                                          {
+                                            "Ref": "AWS::AccountId"
+                                          },
+                                          ":root"
+                                        ]
+                                      ]
+                                    }
+                                  },
+                                  "Resource": {
+                                    "Fn::GetAtt": [
+                                      "testapigatewaysqsqueuedlq8A515F77",
+                                      "Arn"
+                                    ]
+                                  },
+                                  "Sid": "QueueOwnerOnlyAccess"
+                                },
+                                {
+                                  "Action": "SQS:*",
+                                  "Condition": {
+                                    "Bool": {
+                                      "aws:SecureTransport": "false"
+                                    }
+                                  },
+                                  "Effect": "Deny",
+                                  "Principal": {
+                                    "AWS": "*"
+                                  },
+                                  "Resource": {
+                                    "Fn::GetAtt": [
+                                      "testapigatewaysqsqueuedlq8A515F77",
+                                      "Arn"
+                                    ]
+                                  },
+                                  "Sid": "HttpsOnly"
+                                }
+                              ],
+                              "Version": "2012-10-17"
+                            },
+                            "queues": [
+                              {
+                                "Ref": "testapigatewaysqsqueuedlq8A515F77"
+                              }
+                            ]
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_sqs.CfnQueuePolicy",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_sqs.QueuePolicy",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_sqs.Queue",
+                  "version": "2.160.0"
+                }
+              },
+              "queue": {
+                "id": "queue",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/queue",
+                "children": {
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/queue/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::SQS::Queue",
+                      "aws:cdk:cloudformation:props": {
+                        "kmsMasterKeyId": "alias/aws/sqs",
+                        "redrivePolicy": {
+                          "deadLetterTargetArn": {
+                            "Fn::GetAtt": [
+                              "testapigatewaysqsqueuedlq8A515F77",
+                              "Arn"
+                            ]
+                          },
+                          "maxReceiveCount": 15
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_sqs.CfnQueue",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "Policy": {
+                    "id": "Policy",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/queue/Policy",
+                    "children": {
+                      "Resource": {
+                        "id": "Resource",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/queue/Policy/Resource",
+                        "attributes": {
+                          "aws:cdk:cloudformation:type": "AWS::SQS::QueuePolicy",
+                          "aws:cdk:cloudformation:props": {
+                            "policyDocument": {
+                              "Statement": [
+                                {
+                                  "Action": [
+                                    "sqs:AddPermission",
+                                    "sqs:DeleteMessage",
+                                    "sqs:GetQueueAttributes",
+                                    "sqs:ReceiveMessage",
+                                    "sqs:RemovePermission",
+                                    "sqs:SendMessage",
+                                    "sqs:SetQueueAttributes"
+                                  ],
+                                  "Effect": "Allow",
+                                  "Principal": {
+                                    "AWS": {
+                                      "Fn::Join": [
+                                        "",
+                                        [
+                                          "arn:",
+                                          {
+                                            "Ref": "AWS::Partition"
+                                          },
+                                          ":iam::",
+                                          {
+                                            "Ref": "AWS::AccountId"
+                                          },
+                                          ":root"
+                                        ]
+                                      ]
+                                    }
+                                  },
+                                  "Resource": {
+                                    "Fn::GetAtt": [
+                                      "testapigatewaysqsqueue8EDC3CAF",
+                                      "Arn"
+                                    ]
+                                  },
+                                  "Sid": "QueueOwnerOnlyAccess"
+                                },
+                                {
+                                  "Action": "SQS:*",
+                                  "Condition": {
+                                    "Bool": {
+                                      "aws:SecureTransport": "false"
+                                    }
+                                  },
+                                  "Effect": "Deny",
+                                  "Principal": {
+                                    "AWS": "*"
+                                  },
+                                  "Resource": {
+                                    "Fn::GetAtt": [
+                                      "testapigatewaysqsqueue8EDC3CAF",
+                                      "Arn"
+                                    ]
+                                  },
+                                  "Sid": "HttpsOnly"
+                                }
+                              ],
+                              "Version": "2012-10-17"
+                            },
+                            "queues": [
+                              {
+                                "Ref": "testapigatewaysqsqueue8EDC3CAF"
+                              }
+                            ]
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_sqs.CfnQueuePolicy",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_sqs.QueuePolicy",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_sqs.Queue",
+                  "version": "2.160.0"
+                }
+              },
+              "ApiAccessLogGroup": {
+                "id": "ApiAccessLogGroup",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/ApiAccessLogGroup",
+                "children": {
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/ApiAccessLogGroup/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::Logs::LogGroup",
+                      "aws:cdk:cloudformation:props": {}
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_logs.CfnLogGroup",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_logs.LogGroup",
+                  "version": "2.160.0"
+                }
+              },
+              "RestApi": {
+                "id": "RestApi",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi",
+                "children": {
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::ApiGateway::RestApi",
+                      "aws:cdk:cloudformation:props": {
+                        "endpointConfiguration": {
+                          "types": [
+                            "EDGE"
+                          ]
+                        },
+                        "name": "RestApi"
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_apigateway.CfnRestApi",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "Deployment": {
+                    "id": "Deployment",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Deployment",
+                    "children": {
+                      "Resource": {
+                        "id": "Resource",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Deployment/Resource",
+                        "attributes": {
+                          "aws:cdk:cloudformation:type": "AWS::ApiGateway::Deployment",
+                          "aws:cdk:cloudformation:props": {
+                            "description": "Automatically created by the RestApi construct",
+                            "restApiId": {
+                              "Ref": "testapigatewaysqsRestApi557C7EDC"
+                            }
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_apigateway.CfnDeployment",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_apigateway.Deployment",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "DeploymentStage.prod": {
+                    "id": "DeploymentStage.prod",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/DeploymentStage.prod",
+                    "children": {
+                      "Resource": {
+                        "id": "Resource",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/DeploymentStage.prod/Resource",
+                        "attributes": {
+                          "aws:cdk:cloudformation:type": "AWS::ApiGateway::Stage",
+                          "aws:cdk:cloudformation:props": {
+                            "accessLogSetting": {
+                              "destinationArn": {
+                                "Fn::GetAtt": [
+                                  "testapigatewaysqsApiAccessLogGroup37AB0350",
+                                  "Arn"
+                                ]
+                              },
+                              "format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"
+                            },
+                            "deploymentId": {
+                              "Ref": "testapigatewaysqsRestApiDeploymentCA19D372a533abf5414c204f290523aaae9a51c0"
+                            },
+                            "methodSettings": [
+                              {
+                                "httpMethod": "*",
+                                "resourcePath": "/*",
+                                "dataTraceEnabled": false,
+                                "loggingLevel": "INFO"
+                              }
+                            ],
+                            "restApiId": {
+                              "Ref": "testapigatewaysqsRestApi557C7EDC"
+                            },
+                            "stageName": "prod",
+                            "tracingEnabled": true
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_apigateway.CfnStage",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_apigateway.Stage",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "Endpoint": {
+                    "id": "Endpoint",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Endpoint",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.CfnOutput",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "Default": {
+                    "id": "Default",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Default",
+                    "children": {
+                      "POST": {
+                        "id": "POST",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Default/POST",
+                        "children": {
+                          "Validator": {
+                            "id": "Validator",
+                            "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Default/POST/Validator",
+                            "constructInfo": {
+                              "fqn": "constructs.Construct",
+                              "version": "10.3.0"
+                            }
+                          },
+                          "Resource": {
+                            "id": "Resource",
+                            "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Default/POST/Resource",
+                            "attributes": {
+                              "aws:cdk:cloudformation:type": "AWS::ApiGateway::Method",
+                              "aws:cdk:cloudformation:props": {
+                                "authorizationType": "AWS_IAM",
+                                "httpMethod": "POST",
+                                "integration": {
+                                  "type": "AWS",
+                                  "uri": {
+                                    "Fn::Join": [
+                                      "",
+                                      [
+                                        "arn:",
+                                        {
+                                          "Ref": "AWS::Partition"
+                                        },
+                                        ":apigateway:",
+                                        {
+                                          "Ref": "AWS::Region"
+                                        },
+                                        ":sqs:path/",
+                                        {
+                                          "Ref": "AWS::AccountId"
+                                        },
+                                        "/",
+                                        {
+                                          "Fn::GetAtt": [
+                                            "testapigatewaysqsqueue8EDC3CAF",
+                                            "QueueName"
+                                          ]
+                                        }
+                                      ]
+                                    ]
+                                  },
+                                  "integrationHttpMethod": "POST",
+                                  "requestParameters": {
+                                    "integration.request.header.Content-Type": "'application/x-www-form-urlencoded'"
+                                  },
+                                  "requestTemplates": {
+                                    "application/json": "Action=SendMessage&MessageBody=$util.urlEncode(\"$input.body\")"
+                                  },
+                                  "passthroughBehavior": "NEVER",
+                                  "integrationResponses": [
+                                    {
+                                      "statusCode": "200"
+                                    },
+                                    {
+                                      "statusCode": "500",
+                                      "responseTemplates": {
+                                        "text/html": "Error"
+                                      },
+                                      "selectionPattern": "500"
+                                    }
+                                  ],
+                                  "credentials": {
+                                    "Fn::GetAtt": [
+                                      "testapigatewaysqsapigatewayrole07110CD6",
+                                      "Arn"
+                                    ]
+                                  }
+                                },
+                                "methodResponses": [
+                                  {
+                                    "statusCode": "200",
+                                    "responseParameters": {
+                                      "method.response.header.Content-Type": true
+                                    }
+                                  },
+                                  {
+                                    "statusCode": "500",
+                                    "responseParameters": {
+                                      "method.response.header.Content-Type": true
+                                    }
+                                  }
+                                ],
+                                "requestModels": {
+                                  "application/json": {
+                                    "Ref": "testapigatewaysqstestapigatewaysqsmodelapplicationjson94EAC0E9"
+                                  },
+                                  "application/text": {
+                                    "Ref": "testapigatewaysqstestapigatewaysqsmodelapplicationtext6A72CC47"
+                                  }
+                                },
+                                "requestValidatorId": {
+                                  "Ref": "testapigatewaysqsRestApiapisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4C98634F8"
+                                },
+                                "resourceId": {
+                                  "Fn::GetAtt": [
+                                    "testapigatewaysqsRestApi557C7EDC",
+                                    "RootResourceId"
+                                  ]
+                                },
+                                "restApiId": {
+                                  "Ref": "testapigatewaysqsRestApi557C7EDC"
+                                }
+                              }
+                            },
+                            "constructInfo": {
+                              "fqn": "aws-cdk-lib.aws_apigateway.CfnMethod",
+                              "version": "2.160.0"
+                            }
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_apigateway.Method",
+                          "version": "2.160.0"
+                        }
+                      },
+                      "GET": {
+                        "id": "GET",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Default/GET",
+                        "children": {
+                          "Resource": {
+                            "id": "Resource",
+                            "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/Default/GET/Resource",
+                            "attributes": {
+                              "aws:cdk:cloudformation:type": "AWS::ApiGateway::Method",
+                              "aws:cdk:cloudformation:props": {
+                                "authorizationType": "AWS_IAM",
+                                "httpMethod": "GET",
+                                "integration": {
+                                  "type": "AWS",
+                                  "uri": {
+                                    "Fn::Join": [
+                                      "",
+                                      [
+                                        "arn:",
+                                        {
+                                          "Ref": "AWS::Partition"
+                                        },
+                                        ":apigateway:",
+                                        {
+                                          "Ref": "AWS::Region"
+                                        },
+                                        ":sqs:path/",
+                                        {
+                                          "Ref": "AWS::AccountId"
+                                        },
+                                        "/",
+                                        {
+                                          "Fn::GetAtt": [
+                                            "testapigatewaysqsqueue8EDC3CAF",
+                                            "QueueName"
+                                          ]
+                                        }
+                                      ]
+                                    ]
+                                  },
+                                  "integrationHttpMethod": "POST",
+                                  "requestParameters": {
+                                    "integration.request.header.Content-Type": "'application/x-www-form-urlencoded'"
+                                  },
+                                  "requestTemplates": {
+                                    "application/json": "Action=ReceiveMessage"
+                                  },
+                                  "passthroughBehavior": "NEVER",
+                                  "integrationResponses": [
+                                    {
+                                      "statusCode": "200"
+                                    },
+                                    {
+                                      "statusCode": "500",
+                                      "responseTemplates": {
+                                        "text/html": "Error"
+                                      },
+                                      "selectionPattern": "500"
+                                    }
+                                  ],
+                                  "credentials": {
+                                    "Fn::GetAtt": [
+                                      "testapigatewaysqsapigatewayrole07110CD6",
+                                      "Arn"
+                                    ]
+                                  }
+                                },
+                                "methodResponses": [
+                                  {
+                                    "statusCode": "200",
+                                    "responseParameters": {
+                                      "method.response.header.Content-Type": true
+                                    }
+                                  },
+                                  {
+                                    "statusCode": "500",
+                                    "responseParameters": {
+                                      "method.response.header.Content-Type": true
+                                    }
+                                  }
+                                ],
+                                "resourceId": {
+                                  "Fn::GetAtt": [
+                                    "testapigatewaysqsRestApi557C7EDC",
+                                    "RootResourceId"
+                                  ]
+                                },
+                                "restApiId": {
+                                  "Ref": "testapigatewaysqsRestApi557C7EDC"
+                                }
+                              }
+                            },
+                            "constructInfo": {
+                              "fqn": "aws-cdk-lib.aws_apigateway.CfnMethod",
+                              "version": "2.160.0"
+                            }
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_apigateway.Method",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_apigateway.ResourceBase",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "UsagePlan": {
+                    "id": "UsagePlan",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/UsagePlan",
+                    "children": {
+                      "Resource": {
+                        "id": "Resource",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/UsagePlan/Resource",
+                        "attributes": {
+                          "aws:cdk:cloudformation:type": "AWS::ApiGateway::UsagePlan",
+                          "aws:cdk:cloudformation:props": {
+                            "apiStages": [
+                              {
+                                "apiId": {
+                                  "Ref": "testapigatewaysqsRestApi557C7EDC"
+                                },
+                                "stage": {
+                                  "Ref": "testapigatewaysqsRestApiDeploymentStageprod1C007159"
+                                },
+                                "throttle": {}
+                              }
+                            ]
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_apigateway.CfnUsagePlan",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_apigateway.UsagePlan",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "apisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4": {
+                    "id": "apisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/apisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4",
+                    "children": {
+                      "Resource": {
+                        "id": "Resource",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/RestApi/apisqscustomrequestmodeltestapigatewaysqsRestApiPOSTValidator83A54BA4/Resource",
+                        "attributes": {
+                          "aws:cdk:cloudformation:type": "AWS::ApiGateway::RequestValidator",
+                          "aws:cdk:cloudformation:props": {
+                            "restApiId": {
+                              "Ref": "testapigatewaysqsRestApi557C7EDC"
+                            },
+                            "validateRequestBody": true
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_apigateway.CfnRequestValidator",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_apigateway.RequestValidator",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_apigateway.RestApi",
+                  "version": "2.160.0"
+                }
+              },
+              "LambdaRestApiCloudWatchRole": {
+                "id": "LambdaRestApiCloudWatchRole",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/LambdaRestApiCloudWatchRole",
+                "children": {
+                  "ImportLambdaRestApiCloudWatchRole": {
+                    "id": "ImportLambdaRestApiCloudWatchRole",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/LambdaRestApiCloudWatchRole/ImportLambdaRestApiCloudWatchRole",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Resource",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/LambdaRestApiCloudWatchRole/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::IAM::Role",
+                      "aws:cdk:cloudformation:props": {
+                        "assumeRolePolicyDocument": {
+                          "Statement": [
+                            {
+                              "Action": "sts:AssumeRole",
+                              "Effect": "Allow",
+                              "Principal": {
+                                "Service": "apigateway.amazonaws.com"
+                              }
+                            }
+                          ],
+                          "Version": "2012-10-17"
+                        },
+                        "policies": [
+                          {
+                            "policyName": "LambdaRestApiCloudWatchRolePolicy",
+                            "policyDocument": {
+                              "Statement": [
+                                {
+                                  "Action": [
+                                    "logs:CreateLogGroup",
+                                    "logs:CreateLogStream",
+                                    "logs:DescribeLogGroups",
+                                    "logs:DescribeLogStreams",
+                                    "logs:FilterLogEvents",
+                                    "logs:GetLogEvents",
+                                    "logs:PutLogEvents"
+                                  ],
+                                  "Effect": "Allow",
+                                  "Resource": {
+                                    "Fn::Join": [
+                                      "",
+                                      [
+                                        "arn:",
+                                        {
+                                          "Ref": "AWS::Partition"
+                                        },
+                                        ":logs:",
+                                        {
+                                          "Ref": "AWS::Region"
+                                        },
+                                        ":",
+                                        {
+                                          "Ref": "AWS::AccountId"
+                                        },
+                                        ":*"
+                                      ]
+                                    ]
+                                  }
+                                }
+                              ],
+                              "Version": "2012-10-17"
+                            }
+                          }
+                        ]
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_iam.CfnRole",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_iam.Role",
+                  "version": "2.160.0"
+                }
+              },
+              "LambdaRestApiAccount": {
+                "id": "LambdaRestApiAccount",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/LambdaRestApiAccount",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::ApiGateway::Account",
+                  "aws:cdk:cloudformation:props": {
+                    "cloudWatchRoleArn": {
+                      "Fn::GetAtt": [
+                        "testapigatewaysqsLambdaRestApiCloudWatchRoleF10D0F78",
+                        "Arn"
+                      ]
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_apigateway.CfnAccount",
+                  "version": "2.160.0"
+                }
+              },
+              "api-gateway-role": {
+                "id": "api-gateway-role",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/api-gateway-role",
+                "children": {
+                  "Importapi-gateway-role": {
+                    "id": "Importapi-gateway-role",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/api-gateway-role/Importapi-gateway-role",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Resource",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/api-gateway-role/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::IAM::Role",
+                      "aws:cdk:cloudformation:props": {
+                        "assumeRolePolicyDocument": {
+                          "Statement": [
+                            {
+                              "Action": "sts:AssumeRole",
+                              "Effect": "Allow",
+                              "Principal": {
+                                "Service": "apigateway.amazonaws.com"
+                              }
+                            }
+                          ],
+                          "Version": "2012-10-17"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_iam.CfnRole",
+                      "version": "2.160.0"
+                    }
+                  },
+                  "DefaultPolicy": {
+                    "id": "DefaultPolicy",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/api-gateway-role/DefaultPolicy",
+                    "children": {
+                      "Resource": {
+                        "id": "Resource",
+                        "path": "apisqs-custom-request-model/test-api-gateway-sqs/api-gateway-role/DefaultPolicy/Resource",
+                        "attributes": {
+                          "aws:cdk:cloudformation:type": "AWS::IAM::Policy",
+                          "aws:cdk:cloudformation:props": {
+                            "policyDocument": {
+                              "Statement": [
+                                {
+                                  "Action": [
+                                    "sqs:ReceiveMessage",
+                                    "sqs:SendMessage"
+                                  ],
+                                  "Effect": "Allow",
+                                  "Resource": {
+                                    "Fn::GetAtt": [
+                                      "testapigatewaysqsqueue8EDC3CAF",
+                                      "Arn"
+                                    ]
+                                  }
+                                }
+                              ],
+                              "Version": "2012-10-17"
+                            },
+                            "policyName": "testapigatewaysqsapigatewayroleDefaultPolicy052E7AD5",
+                            "roles": [
+                              {
+                                "Ref": "testapigatewaysqsapigatewayrole07110CD6"
+                              }
+                            ]
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_iam.CfnPolicy",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_iam.Policy",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_iam.Role",
+                  "version": "2.160.0"
+                }
+              },
+              "test-api-gateway-sqs-model-applicationjson": {
+                "id": "test-api-gateway-sqs-model-applicationjson",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/test-api-gateway-sqs-model-applicationjson",
+                "children": {
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/test-api-gateway-sqs-model-applicationjson/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::ApiGateway::Model",
+                      "aws:cdk:cloudformation:props": {
+                        "contentType": "application/json",
+                        "restApiId": {
+                          "Ref": "testapigatewaysqsRestApi557C7EDC"
+                        },
+                        "schema": {
+                          "$schema": "http://json-schema.org/draft-04/schema#",
+                          "title": "pollResponse",
+                          "type": "object",
+                          "required": [
+                            "state",
+                            "greeting"
+                          ],
+                          "additionalProperties": false,
+                          "properties": {
+                            "state": {
+                              "type": "string"
+                            },
+                            "greeting": {
+                              "type": "string"
+                            }
+                          }
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_apigateway.CfnModel",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_apigateway.Model",
+                  "version": "2.160.0"
+                }
+              },
+              "test-api-gateway-sqs-model-applicationtext": {
+                "id": "test-api-gateway-sqs-model-applicationtext",
+                "path": "apisqs-custom-request-model/test-api-gateway-sqs/test-api-gateway-sqs-model-applicationtext",
+                "children": {
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "apisqs-custom-request-model/test-api-gateway-sqs/test-api-gateway-sqs-model-applicationtext/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::ApiGateway::Model",
+                      "aws:cdk:cloudformation:props": {
+                        "contentType": "application/text",
+                        "restApiId": {
+                          "Ref": "testapigatewaysqsRestApi557C7EDC"
+                        },
+                        "schema": {
+                          "$schema": "http://json-schema.org/draft-04/schema#",
+                          "title": "pollResponse",
+                          "type": "object",
+                          "additionalProperties": false,
+                          "properties": {
+                            "textstate": {
+                              "type": "string"
+                            },
+                            "textgreeting": {
+                              "type": "string"
+                            }
+                          }
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_apigateway.CfnModel",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_apigateway.Model",
+                  "version": "2.160.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "constructs.Construct",
+              "version": "10.3.0"
+            }
+          },
+          "Integ": {
+            "id": "Integ",
+            "path": "apisqs-custom-request-model/Integ",
+            "children": {
+              "DefaultTest": {
+                "id": "DefaultTest",
+                "path": "apisqs-custom-request-model/Integ/DefaultTest",
+                "children": {
+                  "Default": {
+                    "id": "Default",
+                    "path": "apisqs-custom-request-model/Integ/DefaultTest/Default",
+                    "constructInfo": {
+                      "fqn": "constructs.Construct",
+                      "version": "10.3.0"
+                    }
+                  },
+                  "DeployAssert": {
+                    "id": "DeployAssert",
+                    "path": "apisqs-custom-request-model/Integ/DefaultTest/DeployAssert",
+                    "children": {
+                      "BootstrapVersion": {
+                        "id": "BootstrapVersion",
+                        "path": "apisqs-custom-request-model/Integ/DefaultTest/DeployAssert/BootstrapVersion",
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.CfnParameter",
+                          "version": "2.160.0"
+                        }
+                      },
+                      "CheckBootstrapVersion": {
+                        "id": "CheckBootstrapVersion",
+                        "path": "apisqs-custom-request-model/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion",
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.CfnRule",
+                          "version": "2.160.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Stack",
+                      "version": "2.160.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase",
+                  "version": "2.160.0-alpha.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "@aws-cdk/integ-tests-alpha.IntegTest",
+              "version": "2.160.0-alpha.0"
+            }
+          },
+          "BootstrapVersion": {
+            "id": "BootstrapVersion",
+            "path": "apisqs-custom-request-model/BootstrapVersion",
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.CfnParameter",
+              "version": "2.160.0"
+            }
+          },
+          "CheckBootstrapVersion": {
+            "id": "CheckBootstrapVersion",
+            "path": "apisqs-custom-request-model/CheckBootstrapVersion",
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.CfnRule",
+              "version": "2.160.0"
+            }
+          }
+        },
+        "constructInfo": {
+          "fqn": "aws-cdk-lib.Stack",
+          "version": "2.160.0"
+        }
+      },
+      "Tree": {
+        "id": "Tree",
+        "path": "Tree",
+        "constructInfo": {
+          "fqn": "constructs.Construct",
+          "version": "10.3.0"
+        }
+      }
+    },
+    "constructInfo": {
+      "fqn": "aws-cdk-lib.App",
+      "version": "2.160.0"
+    }
+  }
+}
\ No newline at end of file
diff --git a/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.ts b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.ts
new file mode 100644
index 000000000..e8d36a568
--- /dev/null
+++ b/source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/test/integ.apisqs-custom-request-model.ts
@@ -0,0 +1,58 @@
+/**
+ *  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
+ *  with the License. A copy of the License is located at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
+ *  OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
+ *  and limitations under the License.
+ */
+
+// Imports
+import { App, Stack } from "aws-cdk-lib";
+import { ApiGatewayToSqs, ApiGatewayToSqsProps } from "../lib";
+import { generateIntegStackName } from '@aws-solutions-constructs/core';
+import { IntegTest } from '@aws-cdk/integ-tests-alpha';
+import * as api from 'aws-cdk-lib/aws-apigateway';
+// Setup
+const app = new App();
+const stack = new Stack(app, generateIntegStackName(__filename));
+stack.templateOptions.description = 'Integration Test for aws-apigateway-sqs';
+
+// Definitions
+const props: ApiGatewayToSqsProps = {
+  allowCreateOperation: true,
+  messageSchema: {
+    "application/json": {
+      schema: api.JsonSchemaVersion.DRAFT4,
+      title: 'pollResponse',
+      type: api.JsonSchemaType.OBJECT,
+      required: ['state', 'greeting'],
+      additionalProperties: false,
+      properties: {
+        state: { type: api.JsonSchemaType.STRING },
+        greeting: { type: api.JsonSchemaType.STRING }
+      }
+    },
+    "application/text": {
+      schema: api.JsonSchemaVersion.DRAFT4,
+      title: 'pollResponse',
+      type: api.JsonSchemaType.OBJECT,
+      additionalProperties: false,
+      properties: {
+        textstate: { type: api.JsonSchemaType.STRING },
+        textgreeting: { type: api.JsonSchemaType.STRING }
+      }
+    }
+  }
+};
+
+new ApiGatewayToSqs(stack, 'test-api-gateway-sqs', props);
+
+// Synth
+new IntegTest(stack, 'Integ', { testCases: [
+  stack
+] });
diff --git a/source/patterns/@aws-solutions-constructs/core/test/utils.test.ts b/source/patterns/@aws-solutions-constructs/core/test/utils.test.ts
index 8d7639868..9d3df1502 100644
--- a/source/patterns/@aws-solutions-constructs/core/test/utils.test.ts
+++ b/source/patterns/@aws-solutions-constructs/core/test/utils.test.ts
@@ -340,4 +340,14 @@ test('test addCfnGuardSuppressRules', () => {
   const bucket = template.findResources("AWS::S3::Bucket");
   expect(bucket.testbucketE6E05ABE.Metadata.guard.SuppressedRules[0]).toEqual("ADDED_TO_BUCKET");
   expect(bucket.testbucketE6E05ABE.Metadata.guard.SuppressedRules[1]).toEqual("ADDED_TO_CFN_RESOURCE");
-});
\ No newline at end of file
+});
+
+test('Test removeNonAlphanumeric', () => {
+  const source = '\\this&&is%a#stringg@';
+  const desiredResult = 'thisisastringg';
+
+  const result = defaults.removeNonAlphanumeric(source);
+
+  expect(result).toEqual(desiredResult);
+
+});