# REST API: Rules

This endpoint allows an adminisrator to manage Rules.

## API Documentation

### GET /v0/rules

#### Example

```bash
$ curl -i \
  -X GET "https://{firezone_host}/v0/rules" \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {api_token}' \

HTTP/1.1 200
Content-Type: application/json; charset=utf-8

{
  "data": [
    {
      "action": "drop",
      "destination": "10.3.2.1",
      "id": "2a136a17-4d29-4d8b-a6d4-f35ee3051105",
      "inserted_at": "2023-03-29T15:11:47.482818Z",
      "port_range": null,
      "port_type": null,
      "updated_at": "2023-03-29T15:11:47.482818Z",
      "user_id": null
    },
    {
      "action": "drop",
      "destination": "10.3.2.2",
      "id": "7a4961bf-6b2b-4217-b87b-ffd1deb448ac",
      "inserted_at": "2023-03-29T15:11:47.483506Z",
      "port_range": null,
      "port_type": null,
      "updated_at": "2023-03-29T15:11:47.483506Z",
      "user_id": null
    },
    {
      "action": "drop",
      "destination": "10.3.2.3",
      "id": "6dffbc74-ec58-43ca-8700-d0c572baa198",
      "inserted_at": "2023-03-29T15:11:47.484107Z",
      "port_range": null,
      "port_type": null,
      "updated_at": "2023-03-29T15:11:47.484107Z",
      "user_id": null
    },
    {
      "action": "drop",
      "destination": "10.3.2.4",
      "id": "9bba129d-cdad-4efe-8296-b78ba50f3ef4",
      "inserted_at": "2023-03-29T15:11:47.484759Z",
      "port_range": null,
      "port_type": null,
      "updated_at": "2023-03-29T15:11:47.484759Z",
      "user_id": null
    },
    {
      "action": "drop",
      "destination": "10.3.2.5",
      "id": "df142fde-922c-4a6d-a8e4-0b145a875624",
      "inserted_at": "2023-03-29T15:11:47.485540Z",
      "port_range": null,
      "port_type": null,
      "updated_at": "2023-03-29T15:11:47.485540Z",
      "user_id": null
    }
  ]
}
```

### POST /v0/rules

#### Example

```bash
$ curl -i \
  -X POST "https://{firezone_host}/v0/rules" \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {api_token}' \
  --data-binary @- << EOF
{
  "rule": {
    "action": "accept",
    "destination": "1.1.1.1/24",
    "port_range": "1 - 2",
    "port_type": "udp",
    "user_id": "def4dacc-6367-4320-a0fb-4675b9b571cf"
  }
}
EOF

HTTP/1.1 201
Content-Type: application/json; charset=utf-8
Location: /v0/rules/c52efbe6-5ed0-4514-97df-93f6013dd52b

{
  "data": {
    "action": "accept",
    "destination": "1.1.1.1/24",
    "id": "c52efbe6-5ed0-4514-97df-93f6013dd52b",
    "inserted_at": "2023-03-29T15:11:47.185000Z",
    "port_range": "1 - 2",
    "port_type": "udp",
    "updated_at": "2023-03-29T15:11:47.185000Z",
    "user_id": "def4dacc-6367-4320-a0fb-4675b9b571cf"
  }
}
```

### GET /v0/rules/\{id\}

#### Example

**URI Parameters:**

- `id`: `dd39b339-2ac4-4c83-96e5-9b29516dd85e`

```bash
$ curl -i \
  -X GET "https://{firezone_host}/v0/rules/{id}" \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {api_token}' \

HTTP/1.1 200
Content-Type: application/json; charset=utf-8

{
  "data": {
    "action": "drop",
    "destination": "10.10.10.0/24",
    "id": "dd39b339-2ac4-4c83-96e5-9b29516dd85e",
    "inserted_at": "2023-03-29T15:11:47.447659Z",
    "port_range": null,
    "port_type": null,
    "updated_at": "2023-03-29T15:11:47.447659Z",
    "user_id": null
  }
}
```

### PATCH /v0/rules/\{id\}

#### Example

**URI Parameters:**

- `id`: `720fdab6-32af-4487-bce5-e72fa76be829`

```bash
$ curl -i \
  -X PUT "https://{firezone_host}/v0/rules/{id}" \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {api_token}' \
  --data-binary @- << EOF
{
  "rule": {
    "action": "accept",
    "destination": "1.1.1.1/24",
    "port_range": "1 - 2",
    "port_type": "udp"
  }
}
EOF

HTTP/1.1 200
Content-Type: application/json; charset=utf-8

{
  "data": {
    "action": "accept",
    "destination": "1.1.1.1/24",
    "id": "720fdab6-32af-4487-bce5-e72fa76be829",
    "inserted_at": "2023-03-29T15:11:47.243306Z",
    "port_range": "1 - 2",
    "port_type": "udp",
    "updated_at": "2023-03-29T15:11:47.251589Z",
    "user_id": null
  }
}
```

### DELETE /v0/rules/\{id\}

#### Example

**URI Parameters:**

- `id`: `f5f10a6e-cfdd-47ea-ae23-264195b3503c`

```bash
$ curl -i \
  -X DELETE "https://{firezone_host}/v0/rules/{id}" \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {api_token}' \

HTTP/1.1 204
```
