[Yandex Cloud documentation](../../index.md) > [Yandex API Gateway](../index.md) > [Step-by-step guides](index.md) > Creating an API gateway

# Creating an API gateway

Before you start, prepare an API specification file based on the [OpenAPI 3.0](https://github.com/OAI/OpenAPI-Specification) standard.

{% cut "Example of the `hello-world.yaml` specification file" %}

```yaml
openapi: "3.0.0"
info:
  version: 1.0.0
  title: Test API
paths:
  /hello:
    get:
      summary: Say hello
      operationId: hello
      parameters:
        - name: user
          in: query
          description: User name to appear in greetings.
          required: false
          schema:
            type: string
            default: 'world'
      responses:
        '200':
          description: Greeting.
          content:
            'text/plain':
                schema:
                  type: "string"
      x-yc-apigateway-integration:
        type: dummy
        http_code: 200
        http_headers:
          'Content-Type': "text/plain"
        content:
          'text/plain': "Hello, {user}!\n"
```

{% endcut %}

{% list tabs group=instructions %}

- Management console {#console}

  1. In the [management console](https://console.yandex.cloud), go to the [folder](../../resource-manager/concepts/resources-hierarchy.md#folder) where you want to create an [API gateway](../concepts/index.md).
  1. Navigate to **API Gateway**.
  1. Click **Create API gateway**.
  1. Enter a name for the API gateway in the **Name** field.
  1. Optionally, in the **Description** field, enter a description for the API gateway.
  1. In the **Request execution timeout** field, specify the execution timeout. The value must not exceed the specified [limit](../concepts/limits.md#api-gw-limits).
  1. Under **Specification**, add the text of the [OpenAPI specifications](https://en.wikipedia.org/wiki/OpenAPI_Specification).

      To add the [x-yc-apigateway-integration extension](../concepts/extensions/index.md#integration) to a specification, you can use the [specification constructor](spec-constructor/index.md).

  1. Configure additional API gateway settings if needed.
  1. Click **Create**.

- CLI {#cli}

  If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../cli/quickstart.md#install).

  The folder used by default is the one specified when [creating](../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

  To create an [API gateway](../concepts/index.md):
  1. View the description of the CLI command for creating an API gateway:

     ```bash
     yc serverless api-gateway create --help
     ```

  1. Specify API gateway parameters in the create command (not all the supported parameters are listed):

     ```bash
     yc serverless api-gateway create \
       --name <API_gateway_name> \
       --execution-timeout <request_execution_timeout> \
       --spec=<specification_file_path>
     ```

     Where:
     * `--name`: API gateway name:

         * Length: between 3 and 63 characters.
         * It can only contain lowercase Latin letters, numbers, and hyphens.
         * It must start with a letter and cannot end with a hyphen.
     * `--execution-timeout`: Request execution timeout, The value is specified in seconds and must not exceed the specified [limit](../concepts/limits.md#api-gw-limits). This is an optional setting. The default value is `300` seconds.
     * `--spec`: Path to the specification file you created earlier.

- Terraform {#tf}

  With [Terraform](https://www.terraform.io/), you can quickly create a cloud infrastructure in Yandex Cloud and manage it using configuration files. These files store the infrastructure description written in HashiCorp Configuration Language (HCL). If you change the configuration files, Terraform automatically detects which part of your configuration is already deployed, and what should be added or removed.
  
  Terraform is distributed under the [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE). The [Yandex Cloud provider for Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) is distributed under the [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) license.
  
  For more information about the provider resources, see the guides on the [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) website or [its mirror](../../terraform/index.md).

  If you do not have Terraform yet, [install it and configure the Yandex Cloud provider](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  To manage infrastructure using Terraform under a service account or user accounts (a Yandex account, a federated account, or a local user), [authenticate](../../terraform/authentication.md) using the appropriate method.

  To create an API gateway:
  
  1. Specify the `yandex_api_gateway` properties in the configuration file:
  
     * `name`: API gateway name. The name format is as follows:
  
        * Length: between 3 and 63 characters.
        * It can only contain lowercase Latin letters, numbers, and hyphens.
        * It must start with a letter and cannot end with a hyphen.
  
     * `description`: API gateway description.
     * `labels`: [Labels](../../resource-manager/concepts/labels.md) for the API gateway. Specify a key-value pair.
     * `execution_timeout`: Request execution timeout. The value is specified in seconds and must not exceed the set [limit](../concepts/limits.md#api-gw-limits). This is an optional parameter. The default value is `300` seconds.
     * `spec`: API gateway specification.
  
     Here is an example of the configuration file structure:
  
     ```hcl
     resource "yandex_api_gateway" "test-api-gateway" {
       name        = "<API_gateway_name>"
       description = "<API_gateway_description>"
       labels      = {
         label       = "label"
         empty-label = ""
       }
       execution_timeout = "<request_execution_timeout>"
       spec              = <<-EOT
         openapi: "3.0.0"
         info:
           version: 1.0.0
           title: Test API
         paths:
           /hello:
             get:
               summary: Say hello
               operationId: hello
               parameters:
                 - name: user
                   in: query
                   description: User name to appear in greetings
                   required: false
                   schema:
                     type: string
                     default: 'world'
               responses:
                 '200':
                   description: Greeting
                   content:
                     'text/plain':
                       schema:
                         type: "string"
               x-yc-apigateway-integration:
                 type: dummy
                 http_code: 200
                 http_headers:
                   'Content-Type': "text/plain"
                 content:
                   'text/plain': "Hello, {user}!\n"
       EOT
     }
     ```
  
     For more on the properties of resources in Terraform, see [this provider guide](../../terraform/resources/api_gateway.md).
  
  1. Make sure the configuration files are correct.
  
     1. In the terminal, navigate to the directory where you created your configuration file.
     1. Run a check using this command:
  
        ```
        terraform plan
        ```
  
     If the configuration is correct, the terminal will display a list of the resources and their settings. Otherwise, Terraform will show any detected errors. 
  
  1. Deploy the cloud resources.
  
     1. If the configuration is correct, run this command:
  
        ```
        terraform apply
        ```
  
     1. Confirm creating the resources by typing `yes` and pressing **Enter**.
  
        This will create all the resources you need in the specified folder. You can check the new resources and their settings using the [management console](https://console.yandex.cloud) or these [CLI](../../cli/quickstart.md) commands:
  
        ```
        yc serverless api-gateway get <API_gateway_name>
        ```

- API {#api}

  To create an [API gateway](../concepts/index.md), use the [create](../apigateway/api-ref/ApiGateway/create.md) REST API method for the [ApiGateway](../apigateway/api-ref/ApiGateway/index.md) resource or the [ApiGatewayService/Create](../apigateway/api-ref/grpc/ApiGateway/create.md) gRPC API call.


{% endlist %}