Skip to content

Commit 6486109

Browse files
committed
Merge branch 'master' of github.com:makeplane/developer-docs into update-manage-licenses
2 parents b4c9348 + 0e43f6d commit 6486109

File tree

8 files changed

+292
-83
lines changed

8 files changed

+292
-83
lines changed

docs/.vitepress/config.mts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,7 @@ export default withMermaid(
717717
{ text: "Overview", link: "/api-reference/members/overview" },
718718
{ text: "Get Workspace Members", link: "/api-reference/members/get-workspace-members" },
719719
{ text: "Get Project Members", link: "/api-reference/members/get-project-members" },
720+
{ text: "Remove Workspace Members", link: "/api-reference/members/remove-workspace-member" },
720721
],
721722
},
722723
{

docs/.vitepress/theme/components/CookieConsent.vue

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
<script setup lang="ts">
22
import { ref, onMounted } from "vue";
33
4+
declare global {
5+
interface Window {
6+
gtag?: (...args: any[]) => void;
7+
posthog?: {
8+
opt_in_capturing?: () => void;
9+
opt_out_capturing?: () => void;
10+
};
11+
}
12+
}
13+
414
const STORAGE_KEY = "plane-docs-cookie-consent";
515
const showBanner = ref(false);
616
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
---
2+
title: Remove workspace member
3+
description: Remove a member from a workspace via Plane API. HTTP POST request to deactivate users across projects and teamspaces.
4+
keywords: plane api, remove member, delete member, workspace members, user management, rest api, api integration
5+
---
6+
7+
# Remove workspace member
8+
9+
<div class="api-endpoint-badge">
10+
<span class="method post">POST</span>
11+
<span class="path">/api/v1/workspaces/{slug}/members/remove/</span>
12+
</div>
13+
14+
<div class="api-two-column">
15+
<div class="api-left">
16+
17+
Removes a member from a workspace. This deactivates them across all projects, removes them from teamspaces and pages, and optionally reduces seat count.
18+
19+
<div class="params-section">
20+
21+
### Path parameters
22+
23+
<div class="params-list">
24+
25+
<ApiParam name="slug" type="string" :required="true">
26+
27+
The unique identifier (slug) for the workspace.
28+
29+
</ApiParam>
30+
31+
</div>
32+
</div>
33+
34+
<div class="params-section">
35+
36+
### Body Parameters
37+
38+
<div class="params-list">
39+
40+
<ApiParam name="email" type="string" :required="true">
41+
42+
Email address of the member to remove.
43+
44+
</ApiParam>
45+
46+
<ApiParam name="remove_seat" type="boolean" :required="false">
47+
48+
Reduce purchased seat count by 1. Defaults to `false`.
49+
50+
</ApiParam>
51+
52+
</div>
53+
</div>
54+
55+
<div class="params-section">
56+
57+
### Scopes
58+
59+
`write` or `workspaces:members:write`
60+
61+
</div>
62+
63+
<div class="params-section">
64+
65+
### Responses
66+
67+
| Status | Description |
68+
| ------ | -------------------------------------- |
69+
| 204 | Member removed successfully (no body) |
70+
| 400 | Validation error (see below) |
71+
| 403 | You are not a member of this workspace |
72+
| 404 | Workspace or member not found |
73+
74+
**400 Validation Errors:**
75+
76+
- `email` field is required.
77+
- Cannot remove yourself. You'll need leave the workspace from the application.
78+
- Cannot remove a member with a higher role than yours.
79+
- Member is the sole admin of one or more projects — promote another admin first.
80+
81+
</div>
82+
83+
<div class="params-section">
84+
85+
### What happens
86+
87+
- Member is deactivated in all projects.
88+
- Member is removed from all teamspaces and shared pages
89+
- If `remove_seat` is `true` and unused seats exist, one seat is removed from your plan.
90+
</div>
91+
92+
</div>
93+
<div class="api-right">
94+
95+
<CodePanel title="Remove workspace member" :languages="['cURL', 'Python', 'JavaScript']">
96+
<template #curl>
97+
98+
```bash
99+
curl -X POST \
100+
"https://api.plane.so/api/v1/workspaces/my-workspace/members/remove/" \
101+
-H "X-API-Key: $PLANE_API_KEY" \
102+
# Or use -H "Authorization: Bearer $PLANE_OAUTH_TOKEN" \
103+
-H "Content-Type: application/json" \
104+
-d '{
105+
"email": "jane@example.com",
106+
"remove_seat": true
107+
}'
108+
```
109+
110+
</template>
111+
<template #python>
112+
113+
```python
114+
import requests
115+
116+
response = requests.post(
117+
"https://api.plane.so/api/v1/workspaces/my-workspace/members/remove/",
118+
headers={"X-API-Key": "your-api-key"},
119+
json={
120+
"email": "jane@example.com",
121+
"remove_seat": True
122+
}
123+
)
124+
print(response.status_code) # 204 on success
125+
```
126+
127+
</template>
128+
<template #javascript>
129+
130+
```javascript
131+
const response = await fetch("https://api.plane.so/api/v1/workspaces/my-workspace/members/remove/", {
132+
method: "POST",
133+
headers: {
134+
"X-API-Key": "your-api-key",
135+
"Content-Type": "application/json",
136+
},
137+
body: JSON.stringify({
138+
email: "jane@example.com",
139+
remove_seat: true,
140+
}),
141+
});
142+
console.log(response.status); // 204 on success
143+
```
144+
145+
</template>
146+
</CodePanel>
147+
148+
<ResponsePanel status="204">
149+
150+
```json
151+
No Content
152+
```
153+
154+
</ResponsePanel>
155+
156+
</div>
157+
</div>

docs/self-hosting/govern/environment-variables.md

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,16 @@ This is where you'll make all configuration changes. Remember to restart the ins
7777

7878
### Database settings
7979

80-
| Variable | Description | Default Value |
81-
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
82-
| **PGHOST** | Hostname or IP address of your PostgreSQL server. | plane-db |
83-
| **PGDATABASE** | Name of the PostgreSQL database Plane will use. | plane |
84-
| **POSTGRES_USER** | Username for PostgreSQL authentication. | plane |
85-
| **POSTGRES_PASSWORD** | Password for PostgreSQL authentication. **Critical:** Use a strong, unique password here. | plane |
86-
| **POSTGRES_DB** | Same as PGDATABASE - the name of the PostgreSQL database. | plane |
87-
| **POSTGRES_PORT** | TCP port your PostgreSQL server is listening on. | 5432 |
88-
| **PGDATA** | Directory path where PostgreSQL data is stored. Only relevant if you're managing PostgreSQL within the same container/system. | /var/lib/postgresql/data |
89-
| **DATABASE_URL** | Full connection string for PostgreSQL. If provided, this takes precedence over individual connection parameters. Format: `postgresql://username:password@host:port/dbname` | |
90-
| **FOLLOWER_POSTGRES_URI** | Connection string for a PostgreSQL read replica. Used for read-heavy operations to reduce load on the primary database. | Same as DATABASE_URL |
91-
| **PLANE_PI_DATABASE_URL** | Connection string for the Plane Intelligence database. A separate database used by the PI service. | postgresql://plane:plane@plane-db/plane_pi |
80+
| Variable | Description | Default Value |
81+
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
82+
| **PGHOST** | Hostname or IP address of your PostgreSQL server. | plane-db |
83+
| **PGDATABASE** | Name of the PostgreSQL database Plane will use. | plane |
84+
| **POSTGRES_USER** | Username for PostgreSQL authentication. | plane |
85+
| **POSTGRES_PASSWORD** | Password for PostgreSQL authentication. **Critical:** Use a strong, unique password here. | plane |
86+
| **POSTGRES_DB** | Same as PGDATABASE - the name of the PostgreSQL database. | plane |
87+
| **POSTGRES_PORT** | TCP port your PostgreSQL server is listening on. | 5432 |
88+
| **PGDATA** | Directory path where PostgreSQL data is stored. Only relevant if you're managing PostgreSQL within the same container/system. | /var/lib/postgresql/data |
89+
| **DATABASE_URL** | Full connection string for PostgreSQL. If provided, this takes precedence over individual connection parameters. Format: `postgresql://username:password@host:port/dbname` | |
9290

9391
### Redis settings
9492

@@ -164,14 +162,13 @@ This is where you'll make all configuration changes. Remember to restart the ins
164162

165163
### OpenSearch
166164

167-
| Variable | Description | Default Value |
168-
| --------------------------- | --------------------------------------------------------------- | ------------------------------------ |
169-
| **OPENSEARCH_ENABLED** | Enable OpenSearch integration | 1 |
170-
| **OPENSEARCH_URL** | OpenSearch endpoint URL | https://opensearch.example.com:9200/ |
171-
| **OPENSEARCH_USERNAME** | Authentication username | admin |
172-
| **OPENSEARCH_PASSWORD** | Authentication password | your-secure-password |
173-
| **OPENSEARCH_INDEX_PREFIX** | Prefix for all index names (useful for multi-tenant setups) | (empty) |
174-
| **OPENSEARCH_ML_MODEL_ID** | OpenSearch ML model ID used for embedding-based search features | (empty) |
165+
| Variable | Description | Default Value |
166+
| --------------------------- | ----------------------------------------------------------- | ------------------------------------ |
167+
| **OPENSEARCH_ENABLED** | Enable OpenSearch integration | 1 |
168+
| **OPENSEARCH_URL** | OpenSearch endpoint URL | https://opensearch.example.com:9200/ |
169+
| **OPENSEARCH_USERNAME** | Authentication username | admin |
170+
| **OPENSEARCH_PASSWORD** | Authentication password | your-secure-password |
171+
| **OPENSEARCH_INDEX_PREFIX** | Prefix for all index names (useful for multi-tenant setups) | (empty) |
175172

176173
### Plane AI
177174

@@ -186,22 +183,34 @@ To start Plane AI services, set each replica count to `1`:
186183
| **PI_WORKER_REPLICAS** | Plane AI Worker replica count | Yes |
187184
| **PI_MIGRATOR_REPLICAS** | Plane AI Migrator replica count | Yes |
188185

186+
#### Database settings
187+
188+
::: info Plane AI database
189+
Plane AI uses a separate PostgreSQL database. Create a new database (e.g. `plane_pi`) on your PostgreSQL server, then set **PLANE_PI_DATABASE_URL** to its connection string. Example: `postgresql://user:password@host:5432/plane_pi`
190+
:::
191+
192+
| Variable | Description | Default Value |
193+
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
194+
| **PLANE_PI_DATABASE_URL** | Connection string for the Plane AI database. A separate database used by the PI service. | postgresql://plane:plane@plane-db/plane_pi |
195+
| **FOLLOWER_POSTGRES_URI** | Connection string for a Plane PostgreSQL DB read replica. Used for read-heavy operations to reduce load on the primary database. | Same as DATABASE_URL |
196+
189197
#### LLM provider API keys
190198

191199
Plane AI supports multiple LLM providers. Configure one or more by adding their API keys.
192200

193-
| Variable | Description | Required |
194-
| -------------------------- | --------------------------------------------------------------- | -------- |
195-
| **OPENAI_API_KEY** | API key for OpenAI models | Optional |
196-
| **CLAUDE_API_KEY** | API key for Anthropic models | Optional |
197-
| **GROQ_API_KEY** | API key for speech-to-text features | Optional |
198-
| **CUSTOM_LLM_ENABLED** | Set to `true` to use a custom LLM with an OpenAI-compatible API | Optional |
199-
| **CUSTOM_LLM_MODEL_KEY** | Identifier key for the custom model | Optional |
200-
| **CUSTOM_LLM_BASE_URL** | Base URL of the custom model's OpenAI-compatible endpoint | Optional |
201-
| **CUSTOM_LLM_API_KEY** | API key for the custom endpoint | Optional |
202-
| **CUSTOM_LLM_NAME** | Display name for the custom model | Optional |
203-
| **CUSTOM_LLM_DESCRIPTION** | Description of the custom model | Optional |
204-
| **CUSTOM_LLM_MAX_TOKENS** | Maximum token limit for the custom model | Optional |
201+
| Variable | Description | Required |
202+
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
203+
| **OPENAI_API_KEY** | API key for OpenAI models | Optional |
204+
| **CLAUDE_API_KEY** | API key for Anthropic models | Optional |
205+
| **GROQ_API_KEY** | API key for speech-to-text features | Optional |
206+
| **CUSTOM_LLM_ENABLED** | Set to `true` to enable a custom LLM. Supports OpenAI-compatible endpoints and AWS Bedrock. | Optional |
207+
| **CUSTOM_LLM_PROVIDER** | Backend provider for the custom model. Accepted values: `openai` (default), `bedrock`. | Optional |
208+
| **CUSTOM_LLM_MODEL_KEY** | Identifier key for the custom model (e.g. a model ID or name). | Optional |
209+
| **CUSTOM_LLM_BASE_URL** | Base URL of the custom model's OpenAI-compatible endpoint. Required when `CUSTOM_LLM_PROVIDER=openai`. | Optional |
210+
| **CUSTOM_LLM_API_KEY** | API key for authenticating with the custom endpoint. Required for `openai` provider; used as the AWS access key ID when `CUSTOM_LLM_PROVIDER=bedrock`. | Optional |
211+
| **CUSTOM_LLM_AWS_REGION** | AWS region for the Bedrock model (e.g. `us-east-1`). Required when `CUSTOM_LLM_PROVIDER=bedrock`. | Optional |
212+
| **CUSTOM_LLM_NAME** | Display name for the custom model shown in the UI. Defaults to `Custom LLM`. | Optional |
213+
| **CUSTOM_LLM_MAX_TOKENS** | Maximum token limit for the custom model. Defaults to `128000`. | Optional |
205214

206215
#### Provider base URLs
207216

0 commit comments

Comments
 (0)