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

# Workspace settings

> Manage themes, webhooks, custom domains, and API keys, and view IP restrictions and audit logs.

These commands cover settings that belong to the whole workspace. For fields and response details, see the API reference for [themes](https://apidocs.neetoform.com/api/themes/list.md), [webhooks](https://apidocs.neetoform.com/api/webhooks/list.md), [IP restrictions](https://apidocs.neetoform.com/api/ip-restriction/show.md), [custom domains](https://apidocs.neetoform.com/api/custom-domains/list.md), [API keys](https://apidocs.neetoform.com/api/api-keys/list.md) and [audit logs](https://apidocs.neetoform.com/api/audit-logs/list.md).

## List themes

This command lists the themes you can use, including the ones that come with NeetoForm. Use this to find a theme's ID.

```bash theme={"system"}
neetoform themes list --json
```

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--page` | `int` | | `0` | Page number |
| `--page-size` | `int` | | `0` | Items per page (max 100) |

```json Sample output (--json) theme={"system"}
{
  "data": [
    {
      "id": "3b0d5c1e-2f7a-4c4e-9d1b-6a8f2e7c9b10",
      "name": "Brand",
      "is_system_theme": false
    }
  ],
  "breadcrumbs": [
    {
      "label": "Show",
      "command": "neetoform themes show <id>"
    }
  ],
  "pagination": {
    "current_page_number": 1,
    "total_pages": 1,
    "total_records": 1,
    "page_size": 30
  }
}
```

## Show a theme

This command shows one theme with all its properties.

```bash theme={"system"}
neetoform themes show 3b0d5c1e-2f7a-4c4e-9d1b-6a8f2e7c9b10 --json
```

**Required arguments:**

* `<id>` - The theme's UUID, from `neetoform themes list`

## Create a theme

This command creates a workspace theme. Use this when you want your own colors and fonts. Start from another theme with `--base-theme-id`, or from the default theme when you leave it out.

```bash theme={"system"}
neetoform themes create \
  --name Brand \
  --property background_color=#ffffff \
  --property question_color=#123456
```

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--base-theme-id` | `string` | | | Theme to copy; the default theme when omitted |
| `--json-file` | `string` | | | Path to a JSON file with the theme fields; e.g. \{"name": "Brand", "properties": \{"question\_color": "#123456"}}. Flags override the file |
| `--name` | `string` | | | Theme name |
| `--property` | `stringArray` | | `[]` | Theme property as key=value, repeatable; e.g. --property background\_color=#ffffff. Editable keys: eui\_font\_family, question\_color, background\_color, button\_text\_color, button\_background\_color, button\_border\_radius, welcome\_text\_alignment, questions\_text\_alignment, thank\_you\_text\_alignment (left, center or right) |

Pass `--property` once for each property. To keep the values in a file, use `--json-file` with a file like this. Flags override the file.

```json theme={"system"}
{
  "name": "Brand",
  "properties": { "question_color": "#123456" }
}
```

Only the property keys listed for `--property` can be set. Any other key is rejected.

## Update a theme

This command changes a workspace theme. Only the fields you pass change. Themes that come with NeetoForm cannot be changed.

```bash theme={"system"}
neetoform themes update 3b0d5c1e-2f7a-4c4e-9d1b-6a8f2e7c9b10 --property button_background_color=#1a2b3c
```

**Required arguments:**

* `<id>` - The theme's UUID, from `neetoform themes list`

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--json-file` | `string` | | | Path to a JSON file with the theme fields; e.g. \{"name": "Brand", "properties": \{"question\_color": "#123456"}}. Flags override the file |
| `--name` | `string` | | | New theme name |
| `--property` | `stringArray` | | `[]` | Theme property as key=value, repeatable; e.g. --property background\_color=#ffffff. Editable keys: eui\_font\_family, question\_color, background\_color, button\_text\_color, button\_background\_color, button\_border\_radius, welcome\_text\_alignment, questions\_text\_alignment, thank\_you\_text\_alignment (left, center or right) |

## Delete a theme

This command deletes a workspace theme. It runs at once and does not ask first. Themes that come with NeetoForm cannot be deleted.

```bash theme={"system"}
neetoform themes delete 3b0d5c1e-2f7a-4c4e-9d1b-6a8f2e7c9b10
```

**Required arguments:**

* `<id>` - The theme's UUID, from `neetoform themes list`

```text Sample output theme={"system"}
Theme deleted.
```

## List webhooks

This command lists the webhooks that fire for the whole workspace.

```bash theme={"system"}
neetoform webhooks list --json
```

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--page` | `int` | | `0` | Page number |
| `--page-size` | `int` | | `0` | Items per page (max 100) |

```json Sample output (--json) theme={"system"}
{
  "data": [
    {
      "id": "7c1e9b2a-4f3d-4a8e-9b61-2d0f5e8c3a17",
      "endpoint": "https://example.com/hook",
      "is_active": true,
      "version": "v2",
      "version_expired": false,
      "entity_type": "Organization",
      "events": ["submit"],
      "form_id": null,
      "created_at": "2026-10-01T09:00:00.000Z"
    }
  ],
  "breadcrumbs": [
    {
      "label": "Show",
      "command": "neetoform webhooks show <id>"
    }
  ],
  "pagination": {
    "current_page_number": 1,
    "total_pages": 1,
    "total_records": 1,
    "page_size": 30
  }
}
```

## Show a webhook

This command shows one webhook.

```bash theme={"system"}
neetoform webhooks show 7c1e9b2a-4f3d-4a8e-9b61-2d0f5e8c3a17 --json
```

**Required arguments:**

* `<id>` - The webhook's UUID, from `neetoform webhooks list`

## Create a webhook

This command creates a workspace webhook. NeetoForm calls your endpoint when a submission arrives.

```bash theme={"system"}
neetoform webhooks create \
  --endpoint https://example.com/hook \
  --events submit \
  --secret my-signing-secret
```

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--endpoint` | `string` | Yes | | URL that receives the webhook calls |
| `--events` | `string` | | | Comma-separated events to fire on: submit. All events when omitted |
| `--secret` | `string` | | | Secret used to sign calls; never shown again |

The secret is saved but is never shown again, so keep a copy.

## Delete a webhook

This command deletes a webhook. It runs at once and does not ask first.

```bash theme={"system"}
neetoform webhooks delete 7c1e9b2a-4f3d-4a8e-9b61-2d0f5e8c3a17
```

**Required arguments:**

* `<id>` - The webhook's UUID, from `neetoform webhooks list`

```text Sample output theme={"system"}
Webhook deleted.
```

## List form webhooks

This command lists the webhooks of one form.

```bash theme={"system"}
neetoform forms webhooks list 0b6f2d4e-91a3-4c57-8e2f-6a9d1c3b5e70 --json
```

**Required arguments:**

* `<form-id>` - The form's UUID, from `neetoform forms list`

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--page` | `int` | | `0` | Page number |
| `--page-size` | `int` | | `0` | Items per page (max 100) |

## Create a form webhook

This command creates a webhook that fires for one form only.

```bash theme={"system"}
neetoform forms webhooks create 0b6f2d4e-91a3-4c57-8e2f-6a9d1c3b5e70 \
  --endpoint https://example.com/hook
```

**Required arguments:**

* `<form-id>` - The form's UUID, from `neetoform forms list`

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--endpoint` | `string` | Yes | | URL that receives the webhook calls |
| `--events` | `string` | | | Comma-separated events to fire on: submit. All events when omitted |
| `--secret` | `string` | | | Secret used to sign calls; never shown again |

## Show IP restrictions

This command shows whether the workspace only accepts traffic from certain IP ranges, and lists the allowed ranges. You can only read this setting from the CLI.

```bash theme={"system"}
neetoform ip-restrictions show --json
```

## List custom domains

This command lists the custom domains of your workspace.

```bash theme={"system"}
neetoform custom-domains list --json
```

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--page` | `int` | | `0` | Page number |
| `--page-size` | `int` | | `0` | Items per page (max 100) |

## Show a custom domain

This command shows one custom domain with its setup status and the DNS records to create. Use this after `create` to check if the domain is ready.

```bash theme={"system"}
neetoform custom-domains show forms.example.com --json
```

**Required arguments:**

* `<hostname>` - The domain name, from `neetoform custom-domains list`

```json Sample output (--json) theme={"system"}
{
  "data": {
    "custom_domain": {
      "id": "5f1c2a9e-7b4d-4e3a-8c6f-1d2e3f4a5b6c",
      "hostname": "forms.example.com",
      "status": "pending",
      "status_reason": null,
      "created_at": "2026-10-01T09:00:00.000Z",
      "dns_target": "neetodeployapp.com",
      "dns_target_ip": "98.89.128.226"
    }
  }
}
```

Create a CNAME record that points the hostname to `dns_target`. For a root domain, create an A record that points to `dns_target_ip`.

## Add a custom domain

This command adds a custom domain. Add the DNS records it shows, then run `custom-domains show` to check the status.

```bash theme={"system"}
neetoform custom-domains create forms.example.com
```

**Required arguments:**

* `<hostname>` - The domain name to add

## Remove a custom domain

This command removes a custom domain. Forms stop opening on that domain, so any link that uses it breaks. It runs at once and does not ask first.

```bash theme={"system"}
neetoform custom-domains delete forms.example.com
```

**Required arguments:**

* `<hostname>` - The domain name, from `neetoform custom-domains list`

```text Sample output theme={"system"}
Custom domain removed.
```

## List API keys

This command lists the API keys of your workspace. Use this to find a key's ID, or pass `--search` to filter by the key label. The key value itself is never shown.

```bash theme={"system"}
neetoform api-keys list --json
```

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--page` | `int` | | `0` | Page number |
| `--page-size` | `int` | | `0` | Items per page (max 100) |
| `--search` | `string` | | | Filter by key label |

## Revoke an API key

This command revokes an API key. Anything that uses the key stops working at once, and this cannot be undone. The command does not ask first.

```bash theme={"system"}
neetoform api-keys delete 1c9e4a7b-5d2f-4b8a-9c3e-7f6a1b2d3e4f
```

**Required arguments:**

* `<id>` - The API key's UUID, from `neetoform api-keys list`

```text Sample output theme={"system"}
API key revoked.
```

## List audit logs

This command lists the audit log of your workspace, newest first. Use this to see who changed what. Limit it to a period with `--created-after` and `--created-before`.

```bash theme={"system"}
neetoform audit-logs list --created-after 2026-10-01 --json
```

| Flag | Type | Required | Default | Description |
| - | - | - | - | - |
| `--created-after` | `string` | | | Only entries created on or after this ISO 8601 date or date-time |
| `--created-before` | `string` | | | Only entries created before this ISO 8601 date or date-time |
| `--page` | `int` | | `0` | Page number |
| `--page-size` | `int` | | `0` | Items per page (max 100) |

```json Sample output (--json) theme={"system"}
{
  "data": [
    {
      "id": "5e6f7a8b-9c0d-4e1f-2a3b-4c5d6e7f8a9b",
      "key": "audit_logs.organization.updated_user",
      "metadata": {
        "status": "success",
        "via": "neetoform",
        "email": "sam.smith@example.com"
      },
      "created_at": "2026-10-12T08:15:00.000Z",
      "performer": {
        "name": "Oliver Smith",
        "email": "oliver@example.com"
      }
    }
  ],
  "pagination": {
    "current_page_number": 1,
    "total_pages": 1,
    "total_records": 1,
    "page_size": 30
  }
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.