> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gcore.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create firewall rule



## OpenAPI

````yaml /api-reference/services_docs_mintlify_enriched/waap_api.yaml post /waap/v1/domains/{domain_id}/firewall-rules
openapi: 3.1.0
info:
  title: Gcore OpenAPI – WAAP API
  description: >-
    This OpenAPI is an aggregated OpenAPI specification that unifies all Gcore
    products into a single file. It covers Cloud, CDN, DNS, WAAP, DDoS
    Protection, Object Storage, Streaming, and FastEdge services.
  contact:
    email: support@gcore.com
  version: bc9130169b96
servers:
  - url: https://api.gcore.com
security:
  - APIKey: []
tags:
  - name: API Discovery
  - name: Advanced Rules
  - name: Analytics
  - name: Custom Page Sets
  - name: Custom Rules
  - name: Domains
  - name: Filter Templates
  - name: Firewall Rules
  - name: IP Reputation
  - name: IP Spotlight
  - name: Network Organizations
  - name: Policies
  - name: Policy Overrides
  - name: Pre-billing
  - name: Security Insights
  - name: Tags
  - name: WAAP Service
paths:
  /waap/v1/domains/{domain_id}/firewall-rules:
    post:
      tags:
        - Firewall Rules
      summary: Create firewall rule
      operationId: create_firewall_rule_v1_domains__domain_id__firewall_rules_post
      parameters:
        - name: domain_id
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: 0
            description: The domain ID
            title: Domain Id
          description: The domain ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FirewallRule'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FirewallRuleResponse'
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
              example:
                type: http-bad-request
                title: Bad Request
                status: 400
                detail: 'Invalid domain name: '''''''''
          description: Bad Request
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              example:
                detail: Auth token is missing or invalid
        '403':
          description: Quota limit exceeded
          content:
            application/problem+json:
              example:
                title: Quota limit exceeded
                type: quota-check-limit-exceeded
                status: 403
                detail: >-
                  You have reached the maximum limit allowed for your current
                  plan. Please upgrade your plan to add more.
        '404':
          description: Resource not found
          content:
            application/problem+json:
              example:
                title: Resource not found
                type: quota-check-no-resource
                status: 404
                detail: >-
                  The quota resource requested does not exist. Cannot enable
                  WAAP for this domain. Please reach out to our support team.
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APICompositeError'
              example:
                type: request-validation-failed
                title: Request validation error.
                status: 422
                detail: One or more fields have validation errors.
                errors:
                  - loc:
                      - body
                      - name
                    detail: Input should be a valid string
                  - loc:
                      - body
                      - date
                    detail: Field required
                  - loc:
                      - query
                      - limit
                    detail: Field required
          description: Unprocessable Entity
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
              example:
                type: internal-server-error
                title: Internal server error.
                status: 500
                detail: >-
                  An unexpected condition was encountered which prevented the
                  server from fulfilling the request.
          description: Internal Server Error
      x-codeSamples:
        - lang: Python
          source: |-
            import os
            from gcore import Gcore

            client = Gcore(
                api_key=os.environ.get("GCORE_API_KEY"),  # This is the default and can be omitted
            )
            waap_firewall_rule = client.waap.domains.firewall_rules.create(
                domain_id=1,
                action={},
                conditions=[{}],
                enabled=True,
                name="Block foobar bot",
            )
            print(waap_firewall_rule.id)
        - lang: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/G-Core/gcore-go\"\n\t\"github.com/G-Core/gcore-go/option\"\n\t\"github.com/G-Core/gcore-go/waap\"\n)\n\nfunc main() {\n\tclient := gcore.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\twaapFirewallRule, err := client.Waap.Domains.FirewallRules.New(\n\t\tcontext.TODO(),\n\t\t1,\n\t\twaap.DomainFirewallRuleNewParams{\n\t\t\tAction:     waap.DomainFirewallRuleNewParamsAction{},\n\t\t\tConditions: []waap.DomainFirewallRuleNewParamsCondition{{}},\n\t\t\tEnabled:    true,\n\t\t\tName:       \"Block foobar bot\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", waapFirewallRule.ID)\n}\n"
components:
  schemas:
    FirewallRule:
      properties:
        name:
          type: string
          maxLength: 100
          minLength: 1
          pattern: ^[A-Za-z0-9\s.:'";<>?&|\\_-]+$
          title: Name
          description: The name assigned to the rule
          example: Block foobar bot
          examples:
            - Block foobar bot
        description:
          type: string
          maxLength: 100
          title: Description
          description: A human-readable description.
          default: ''
        enabled:
          type: boolean
          title: Enabled
          description: Whether or not the rule is enabled
        action:
          $ref: '#/components/schemas/FirewallRuleAction'
          description: The action that the rule takes when triggered
        conditions:
          items:
            $ref: '#/components/schemas/FirewallRuleCondition'
          type: array
          maxItems: 1
          minItems: 1
          title: Conditions
          description: The condition required for the WAAP engine to trigger the rule.
      type: object
      required:
        - name
        - enabled
        - action
        - conditions
      title: FirewallRule
    FirewallRuleResponse:
      properties:
        name:
          type: string
          maxLength: 100
          minLength: 1
          pattern: ^[A-Za-z0-9\s.:'";<>?&|\\_-]+$
          title: Name
          description: The name assigned to the rule
          example: Block foobar bot
          examples:
            - Block foobar bot
        description:
          type: string
          maxLength: 100
          title: Description
          description: A human-readable description.
          default: ''
        enabled:
          type: boolean
          title: Enabled
          description: Whether or not the rule is enabled
        action:
          $ref: '#/components/schemas/FirewallRuleAction'
          description: The action that the rule takes when triggered
        conditions:
          items:
            $ref: '#/components/schemas/FirewallRuleCondition'
          type: array
          maxItems: 1
          minItems: 1
          title: Conditions
          description: The condition required for the WAAP engine to trigger the rule.
        id:
          type: integer
          title: Id
          description: The unique identifier of the rule
      type: object
      required:
        - name
        - enabled
        - action
        - conditions
        - id
      title: FirewallRuleResponse
    APIError:
      properties:
        type:
          type: string
          title: Type
          description: A URI identifier that categorizes the type of error.
        title:
          type: string
          title: Title
          description: A brief, human-readable title for the error.
        status:
          type: integer
          title: Status
          description: The HTTP status code applicable to this error.
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
          description: A detailed human-readable explanation of the error.
      type: object
      required:
        - type
        - title
        - status
        - detail
      title: APIError
    APICompositeError:
      properties:
        type:
          type: string
          title: Type
          description: A URI identifier that categorizes the type of error.
        title:
          type: string
          title: Title
          description: A brief, human-readable title for the error.
        status:
          type: integer
          title: Status
          description: The HTTP status code applicable to this error.
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
          description: A detailed human-readable explanation of the error.
        errors:
          items:
            $ref: '#/components/schemas/APIFieldError'
          type: array
          title: Errors
          description: A list of detailed errors for individual fields.
      type: object
      required:
        - type
        - title
        - status
        - detail
        - errors
      title: APICompositeError
    FirewallRuleAction:
      properties:
        allow:
          anyOf:
            - $ref: '#/components/schemas/RuleAllowAction'
            - type: 'null'
        block:
          anyOf:
            - $ref: '#/components/schemas/RuleBlockAction'
            - type: 'null'
      additionalProperties: false
      type: object
      title: FirewallRuleAction
      description: The action that a firewall rule takes when triggered
    FirewallRuleCondition:
      properties:
        ip:
          $ref: '#/components/schemas/IpCondition'
        ip_range:
          $ref: '#/components/schemas/IpRangeCondition'
      additionalProperties: false
      type: object
      title: FirewallRuleCondition
      description: >-
        The criteria of an incoming web request and the models of the various
        values those criteria can take
    APIFieldError:
      properties:
        loc:
          anyOf:
            - items:
                anyOf:
                  - type: integer
                  - type: string
              type: array
            - {}
          title: Loc
          description: The location of the field or a character number causing the error.
        detail:
          type: string
          title: Detail
          description: A human-readable message describing the error.
      type: object
      required:
        - loc
        - detail
      title: APIFieldError
    RuleAllowAction:
      properties: {}
      additionalProperties: true
      type: object
      title: RuleAllowAction
      description: The WAAP allows the request
    RuleBlockAction:
      properties:
        status_code:
          $ref: '#/components/schemas/RuleBlockStatusCode'
          description: >-
            An HTTP status code that the WAAP returns if a rule blocks a
            request.
          default: 403
        action_duration:
          type: string
          maxLength: 10
          minLength: 1
          pattern: ^[1-9][0-9]*[smhd]?$
          title: Action Duration
          description: >-
            How long a rule's block action will apply to subsequent requests.
            Can be specified in seconds or by using a numeral followed by 's',
            'm', 'h', or 'd' to represent time format (seconds, minutes, hours,
            or days). Empty time intervals are not allowed. If not specified,
            the action is applied only to the request that triggers the rule.
          example: 12h
          examples:
            - 12h
            - 60s
            - '30'
      additionalProperties: false
      type: object
      title: RuleBlockAction
      description: >-
        WAAP block action behavior could be configured with response status code
        and action duration.
    IpCondition:
      properties:
        negation:
          type: boolean
          title: Negation
          description: >-
            Whether or not to apply a boolean NOT operation to the rule's
            condition
          default: false
        ip_address:
          type: string
          format: ipvanyaddress
          title: Ip Address
          description: A single IPv4 or IPv6 address
      type: object
      required:
        - ip_address
      title: IpCondition
      description: Match the incoming request against a single IP address
    IpRangeCondition:
      properties:
        negation:
          type: boolean
          title: Negation
          description: >-
            Whether or not to apply a boolean NOT operation to the rule's
            condition
          default: false
        lower_bound:
          type: string
          format: ipvanyaddress
          title: Lower Bound
          description: The lower bound IPv4 or IPv6 address to match against
        upper_bound:
          type: string
          format: ipvanyaddress
          title: Upper Bound
          description: The upper bound IPv4 or IPv6 address to match against
      type: object
      required:
        - lower_bound
        - upper_bound
      title: IpRangeCondition
      description: Match the incoming request against an IP range
    RuleBlockStatusCode:
      type: integer
      enum:
        - 403
        - 405
        - 418
        - 429
      title: RuleBlockStatusCode
      description: Designates the HTTP status code to deliver when a request is blocked.
  securitySchemes:
    APIKey:
      description: >-
        API key for authentication. Make sure to include the word `apikey`,
        followed by a single space and then your token.

        Example: `apikey 1234_abcdef`
      type: apiKey
      in: header
      name: Authorization

````