# MethodOptions

Extends: MethodOptions
Used as props by: ApiEventSource

- Source: [`aws-apigateway/lib/method.ts`](https://github.com/aws/aws-cdk/blob/v2.277.0/packages/aws-cdk-lib/aws-apigateway/lib/method.ts#L27)

## Example

```ts
    declare const api: apigateway.RestApi;
    declare const userLambda: lambda.Function;

    const userModel: apigateway.Model = api.addModel('UserModel', {
        schema: {
            type: apigateway.JsonSchemaType.OBJECT,
            properties: {
                userId: {
                    type: apigateway.JsonSchemaType.STRING
                },
                name: {
                    type: apigateway.JsonSchemaType.STRING
                }
            },
            required: ['userId']
        }
    });
    api.root.addResource('user').addMethod('POST',
        new apigateway.LambdaIntegration(userLambda), {
            requestModels: {
                'application/json': userModel
            }
        }
    );
```

## Properties

- `apiKeyRequired`: boolean = false — Indicates whether the method requires clients to submit a valid API key.

- `authorizationScopes`: string[] — A list of authorization scopes configured on the method.

  **Default:** no authorization scopes

  The scopes are used with
  a COGNITO_USER_POOLS authorizer to authorize the method invocation.

- `authorizationType`: [AuthorizationType](/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.AuthorizationType.html) — Method authorization. If the value is set of `Custom`, an `authorizer` must also be specified.

  **Default:** open access unless `authorizer` is specified

  If you're using one of the authorizers that are available via the `Authorizer` class, such as `Authorizer#token()`,
  it is recommended that this option not be specified. The authorizer will take care of setting the correct authorization type.
  However, specifying an authorization type using this property that conflicts with what is expected by the `Authorizer`
  will result in an error.

- `authorizer`: [IAuthorizer](/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IAuthorizer.html) — If `authorizationType` is `Custom`, this specifies the ID of the method authorizer resource.

  If specified, the value of `authorizationType` must be set to `Custom`

- `methodResponses`: [MethodResponse](/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)[] — The responses that can be sent to the client who calls the method.

  **Default:** None This property is not required, but if these are not supplied for a Lambda proxy integration, the Lambda function must return a value of the correct format, for the integration response to be correctly mapped to a response to the client.

- `operationName`: string — A friendly operation name for the method.

  For example, you can assign the
  OperationName of ListPets for the GET /pets method.

- `requestModels`: { [key: string]: [IModel](/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IModel.html) } — The models which describe data structure of request payload.

  When
  combined with `requestValidator` or `requestValidatorOptions`, the service
  will validate the API request payload before it reaches the API's Integration (including proxies).
  Specify `requestModels` as key-value pairs, with a content type
  (e.g. `'application/json'`) as the key and an API Gateway Model as the value.

  ```ts
      declare const api: apigateway.RestApi;
      declare const userLambda: lambda.Function;

      const userModel: apigateway.Model = api.addModel('UserModel', {
          schema: {
              type: apigateway.JsonSchemaType.OBJECT,
              properties: {
                  userId: {
                      type: apigateway.JsonSchemaType.STRING
                  },
                  name: {
                      type: apigateway.JsonSchemaType.STRING
                  }
              },
              required: ['userId']
          }
      });
      api.root.addResource('user').addMethod('POST',
          new apigateway.LambdaIntegration(userLambda), {
              requestModels: {
                  'application/json': userModel
              }
          }
      );
  ```

- `requestParameters`: { [key: string]: boolean } = None — The request parameters that API Gateway accepts.

  Specify request parameters
  as key-value pairs (string-to-Boolean mapping), with a source as the key and
  a Boolean as the value. The Boolean specifies whether a parameter is required.
  A source must match the format method.request.location.name, where the location
  is querystring, path, or header, and name is a valid, unique parameter name.

- `requestValidator`: [IRequestValidator](/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IRequestValidator.html) — The ID of the associated request validator.

  **Default:** No default validator

  Only one of `requestValidator` or `requestValidatorOptions` must be specified.
  Works together with `requestModels` or `requestParameters` to validate
  the request before it reaches integration like Lambda Proxy Integration.

- `requestValidatorOptions`: [RequestValidatorOptions](/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RequestValidatorOptions.html) — Request validator options to create new validator Only one of `requestValidator` or `requestValidatorOptions` must be specified.

  **Default:** No default validator

  Works together with `requestModels` or `requestParameters` to validate
  the request before it reaches integration like Lambda Proxy Integration.
