> For the complete documentation index, see [llms.txt](https://docs.visualsentinel.com/llms.txt)

# Organization API

Organization settings, members, invitations, and branding. This page lists all 24 endpoints in the Organization area of the Visual Sentinel REST API.

Base URL: `https://visualsentinel.com`. Unless an endpoint says otherwise it accepts an API key or a session cookie, see [Authentication](https://docs.visualsentinel.com/guides/authentication.md). Most error responses use the [ErrorResponse](https://docs.visualsentinel.com/reference/models/error-response.md) shape, see [Errors](https://docs.visualsentinel.com/guides/errors.md) and [Rate limits](https://docs.visualsentinel.com/guides/rate-limits.md).

## Endpoints

- [Get organization](#get-organization): `GET /api/organization`
- [Update organization](#update-organization): `PUT /api/organization`
- [Delete organization](#delete-organization): `DELETE /api/organization`
- [Get organization settings](#get-organization-settings): `GET /api/organization/settings`
- [Update organization settings](#update-organization-settings): `PATCH /api/organization/settings`
- [Get organization member](#get-organization-member): `GET /api/organization/members/{id}`
- [Update member role](#update-member-role): `PUT /api/organization/members/{id}`
- [Remove organization member](#remove-organization-member): `DELETE /api/organization/members/{id}`
- [List invitations](#list-invitations): `GET /api/organization/invitations`
- [Send invitation](#send-invitation): `POST /api/organization/invitations`
- [Cancel invitation](#cancel-invitation): `DELETE /api/organization/invitations/{id}`
- [Accept invitation](#accept-invitation): `POST /api/organization/invitations/accept`
- [Verify invitation token](#verify-invitation): `GET /api/organization/invitations/verify`
- [Get branding settings](#get-branding): `GET /api/organization/branding`
- [Update branding](#update-branding): `PUT /api/organization/branding`
- [Reset branding](#reset-branding): `DELETE /api/organization/branding`
- [Report a problem to Visual Sentinel](#send-feedback-report): `POST /api/organization/feedback`
- [Upload logo](#upload-logo): `POST /api/organization/logo`
- [Delete logo](#delete-logo): `DELETE /api/organization/logo`
- [Get SMTP settings](#get-smtp-settings): `GET /api/organization/smtp`
- [Test SMTP settings](#test-smtp-settings): `POST /api/organization/smtp`
- [Update SMTP settings](#update-smtp-settings): `PUT /api/organization/smtp`
- [Delete SMTP settings](#delete-smtp-settings): `DELETE /api/organization/smtp`
- [Leave organization](#leave-organization): `POST /api/organization/leave`

## Get organization

`GET /api/organization`

Get the current organization's profile.

**Responses**

- `200`: Organization profile. Body: [Organization](https://docs.visualsentinel.com/reference/models/organization.md).

## Update organization

`PUT /api/organization`

Update the organization's profile (name, slug, logo, website, timezone).

Request body (required): object.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | No | Max length 100. |
| `slug` | string | No | Max length 50. |
| `logo` | string | No |   |
| `website` | string (uri) | No |   |
| `description` | string | No | Max length 500. |
| `timezone` | string | No |   |
| `billingEmail` | string (email) | No |   |

**Responses**

- `200`: Organization updated.

## Delete organization

`DELETE /api/organization`

Permanently delete the organization and all its data. Requires OWNER role.

Authentication: session cookie only. API keys are refused.

**Responses**

- `200`: Organization deleted.

## Get organization settings

`GET /api/organization/settings`

Get organization-level settings (alert defaults, preferences).

**Responses**

- `200`: Organization settings.

## Update organization settings

`PATCH /api/organization/settings`

Update organization-level settings.

**Responses**

- `200`: Settings updated.

## Get organization member

`GET /api/organization/members/{id}`

Get details of a specific organization member.

**Parameters**

- `id` (path, string (uuid), required)

**Responses**

- `200`: Member details.

## Update member role

`PUT /api/organization/members/{id}`

Update an organization member's role.

Authentication: session cookie only. API keys are refused.

**Parameters**

- `id` (path, string (uuid), required)

Request body (required): object.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `role` | string | Yes | One of: `ADMIN`, `MEMBER`, `VIEWER`. |

**Responses**

- `200`: Member role updated.

## Remove organization member

`DELETE /api/organization/members/{id}`

Remove a member from the organization.

Authentication: session cookie only. API keys are refused.

**Parameters**

- `id` (path, string (uuid), required)

**Responses**

- `200`: Member removed.

## List invitations

`GET /api/organization/invitations`

Get all pending invitations for the organization.

**Responses**

- `200`: Pending invitations.

## Send invitation

`POST /api/organization/invitations`

Send an invitation to join the organization.

Authentication: session cookie only. API keys are refused.

Request body (required): object.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `email` | string (email) | Yes |   |
| `role` | string | Yes | One of: `ADMIN`, `MEMBER`, `VIEWER`. |

**Responses**

- `201`: Invitation sent.

## Cancel invitation

`DELETE /api/organization/invitations/{id}`

Cancel a pending invitation.

Authentication: session cookie only. API keys are refused.

**Parameters**

- `id` (path, string (uuid), required)

**Responses**

- `200`: Invitation cancelled.

## Accept invitation

`POST /api/organization/invitations/accept`

Accept an organization invitation using the invitation token.

Authentication: no session or API key needed.

Request body (required): object.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `token` | string | Yes |   |

**Responses**

- `200`: Invitation accepted.

## Verify invitation token

`GET /api/organization/invitations/verify`

Verify an invitation token is valid and return invitation details.

Authentication: no session or API key needed.

**Parameters**

- `token` (query, string, required)

**Responses**

- `200`: Invitation details.
- `400`: Invalid or expired token.

## Get branding settings

`GET /api/organization/branding`

Get white-label branding configuration.

**Responses**

- `200`: Branding settings.

## Update branding

`PUT /api/organization/branding`

Update white-label branding configuration (colors, logo, custom domain).

**Responses**

- `200`: Branding updated.

## Reset branding

`DELETE /api/organization/branding`

Reset branding to default Visual Sentinel branding.

**Responses**

- `200`: Branding reset.

## Report a problem to Visual Sentinel

`POST /api/organization/feedback`

Send the Visual Sentinel team a report about a false alert, a bug or a missing feature, optionally for one monitor or incident of the workspace. The monitor and incident must belong to the workspace. 20 reports an hour per workspace. Needs the organization:write scope.

Request body (required): object.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string | Yes | One of: `false_positive`, `bug`, `missing_feature`. |
| `note` | string | Yes | Min length 3, max length 1000. |
| `monitorId` | string | No |   |
| `incidentId` | string | No |   |

**Responses**

- `201`: Report received. Body: object.
- `400`: Validation failed, or the incident belongs to another monitor.
- `404`: Monitor or incident not found in this workspace.
- `429`: Rate limit exceeded.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `report` | object | No |   |
| `report.id` | string | No |   |
| `report.type` | string | No | One of: `false_positive`, `bug`, `missing_feature`. |
| `report.monitorId` | string or null | No |   |
| `report.incidentId` | string or null | No |   |
| `report.createdAt` | string (date-time) | No |   |
| `message` | string | No |   |

## Upload logo

`POST /api/organization/logo`

Upload an organization logo image.

Request body (required): object (`multipart/form-data`).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `file` | string (binary) | No |   |

**Responses**

- `200`: Logo uploaded.

## Delete logo

`DELETE /api/organization/logo`

Remove the organization logo.

**Responses**

- `200`: Logo deleted.

## Get SMTP settings

`GET /api/organization/smtp`

Get custom SMTP configuration for sending emails.

**Responses**

- `200`: SMTP settings.

## Test SMTP settings

`POST /api/organization/smtp`

Send a test email using the provided SMTP configuration.

Authentication: session cookie only. API keys are refused.

**Responses**

- `200`: Test email sent.

## Update SMTP settings

`PUT /api/organization/smtp`

Update custom SMTP configuration.

Authentication: session cookie only. API keys are refused.

**Responses**

- `200`: SMTP settings updated.

## Delete SMTP settings

`DELETE /api/organization/smtp`

Remove custom SMTP configuration and revert to default.

Authentication: session cookie only. API keys are refused.

**Responses**

- `200`: SMTP settings removed.

## Leave organization

`POST /api/organization/leave`

Leave the current organization. Owners cannot leave; they must transfer ownership to another member first. After leaving, the user is switched to their next available organization. Session only: an API key gets 403 with code `SESSION_REQUIRED`.

Authentication: session cookie only. API keys are refused.

**Responses**

- `200`: Successfully left the organization. Body: object.
- `400`: Owners cannot leave. Transfer ownership first.
- `404`: Not a member of this organization.
- `503`: Database unavailable.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `success` | boolean | No |   |
| `message` | string | No |   |
| `switchTo` | string (uuid) or null (uuid) | No | Organization ID to switch to, or null if no other memberships |

## Data models

Request and response shapes these endpoints use: [Organization](https://docs.visualsentinel.com/reference/models/organization.md).

Generated from the OpenAPI 3.1 specification at [https://docs.visualsentinel.com/openapi.json](https://docs.visualsentinel.com/openapi.json), the same file the interactive reference reads.
