Skip to content

Commit f3de005

Browse files
Sentry integration, Epics endpoints, SSL configuration, and other fixes #173
2 parents 426678d + 7e77dc5 commit f3de005

File tree

17 files changed

+718
-8
lines changed

17 files changed

+718
-8
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
title: Retrieve an epic
3+
description: Retrieves the details of an existing epic by its ID.
4+
api: GET /api/v1/workspaces/{workspace_slug}/projects/{project_id}/epics/{epic_id}/
5+
---
6+
7+
## Path parameters
8+
9+
<ParamField path="workspace_slug" type="string" required>
10+
The workspace_slug represents the unique workspace identifier for a workspace in Plane. It can be found in the URL. For example, in the URL `https://app.plane.so/my-team/projects/`, the workspace slug is `my-team`.
11+
</ParamField>
12+
13+
<ParamField path="project_id" type="string" required>
14+
The unique identifier for the project.
15+
</ParamField>
16+
17+
<ParamField path="epic_id" type="string" required>
18+
The unique identifier for the epic.
19+
</ParamField>
20+

api-reference/epics/list-epics.mdx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
title: List all epics
3+
description: Returns a list of all epics in a project.
4+
api: GET /api/v1/workspaces/{workspace_slug}/projects/{project_id}/epics/
5+
---
6+
7+
## Path parameters
8+
9+
<ParamField path="workspace_slug" type="string" required>
10+
The workspace_slug represents the unique workspace identifier for a workspace in Plane. It can be found in the URL. For example, in the URL `https://app.plane.so/my-team/projects/`, the workspace slug is `my-team`.
11+
</ParamField>
12+
13+
<ParamField path="project_id" type="string" required>
14+
The unique identifier for the project.
15+
</ParamField>
16+
17+
## Query parameters
18+
19+
<ParamField query="limit" type="number">
20+
Number of results to return per page.
21+
</ParamField>
22+
23+
<ParamField query="offset" type="number">
24+
Number of results to skip for pagination.
25+
</ParamField>
26+

api-reference/epics/overview.mdx

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
---
2+
title: Overview
3+
---
4+
5+
Epics help you group related tasks into a larger work item, providing a hierarchical structure for managing complex projects. Use epics to break down major objectives into smaller, manageable pieces while keeping everything organized.
6+
[Learn more about Epics](https://docs.plane.so/core-concepts/issues/epics).
7+
8+
## The Epics object
9+
**Attributes**
10+
11+
- `id` string
12+
13+
Unique identifier for the epic.
14+
15+
- `name` string
16+
17+
Name of the epic.
18+
19+
- `description` object
20+
21+
JSON representation of the epic description.
22+
23+
- `description_html` string
24+
25+
HTML-formatted description of the epic.
26+
27+
- `description_stripped` string
28+
29+
Plain text version of the description.
30+
31+
- `description_binary` string
32+
33+
Binary representation of the description.
34+
35+
- `state` string
36+
37+
ID of the state (status) of the epic.
38+
39+
- `priority` string
40+
41+
Priority level. Possible values: `none`, `urgent`, `high`, `medium`, `low`.
42+
43+
- `assignees` array
44+
45+
Array of user IDs assigned to the epic.
46+
47+
- `labels` array
48+
49+
Array of label IDs applied to the epic.
50+
51+
- `type` string
52+
53+
ID of the work item type for the epic.
54+
55+
- `estimate_point` string
56+
57+
ID of the estimate point, or null if not estimated.
58+
59+
- `point` integer
60+
61+
Point value for the epic, or null.
62+
63+
- `start_date` string
64+
65+
Start date of the epic in YYYY-MM-DD format.
66+
67+
- `target_date` string
68+
69+
Target completion date in YYYY-MM-DD format.
70+
71+
- `parent` string
72+
73+
ID of the parent work item, or null if no parent.
74+
75+
- `sequence_id` integer
76+
77+
Auto-generated sequential identifier for the epic within the project.
78+
79+
- `sort_order` number
80+
81+
Auto-generated sort order for display purposes.
82+
83+
- `is_draft` boolean
84+
85+
Whether the epic is a draft.
86+
87+
- `completed_at` timestamp
88+
89+
Time at which the epic was completed, or null if not completed.
90+
91+
- `archived_at` timestamp
92+
93+
Time at which the epic was archived, or null if not archived.
94+
95+
- `project` string
96+
97+
ID of the project containing this epic.
98+
99+
- `workspace` string
100+
101+
ID of the workspace containing this epic.
102+
103+
- `external_id` string
104+
105+
External identifier if imported from another system, or null.
106+
107+
- `external_source` string
108+
109+
Name of the source system if imported, or null.
110+
111+
- `deleted_at` timestamp
112+
113+
Time at which the epic was deleted, or null if not deleted.
114+
115+
- `created_at` timestamp
116+
117+
Time at which the epic was created.
118+
119+
- `updated_at` timestamp
120+
121+
Time at which the epic was last updated.
122+
123+
- `created_by` string
124+
125+
ID of the user who created the epic.
126+
127+
- `updated_by` string
128+
129+
ID of the user who last updated the epic.
130+
131+
<ResponseExample>
132+
```json EPICS OBJECT
133+
{
134+
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
135+
"name": "Develop Mobile Application Framework",
136+
"description": {},
137+
"description_html": "<p class=\"editor-paragraph-block\">Create a cross-platform mobile application framework that supports all core system functionalities with native-like performance and user experience</p>",
138+
"description_stripped": "Create a cross-platform mobile application framework that supports all core system functionalities with native-like performance and user experience",
139+
"description_binary": null,
140+
"state": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
141+
"priority": "medium",
142+
"assignees": [],
143+
"labels": [
144+
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
145+
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
146+
],
147+
"type": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
148+
"estimate_point": null,
149+
"point": null,
150+
"start_date": "2025-02-28",
151+
"target_date": "2025-06-20",
152+
"parent": null,
153+
"sequence_id": 57,
154+
"sort_order": 605535.0,
155+
"is_draft": false,
156+
"completed_at": null,
157+
"archived_at": null,
158+
"project": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
159+
"workspace": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
160+
"external_id": null,
161+
"external_source": null,
162+
"deleted_at": null,
163+
"created_at": "2025-03-01T21:23:54.645263+05:30",
164+
"updated_at": "2025-03-03T10:38:44.667276+05:30",
165+
"created_by": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
166+
"updated_by": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
167+
}
168+
```
169+
</ResponseExample>

api-reference/initiative/overview.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Initiatives are high-level strategic goals that help organize and track work acr
66

77
[Learn more about Initiatives](https://docs.plane.so/core-concepts/projects/initiatives)
88

9-
## The Initiative object
9+
## The Initiatives object
1010

1111
**Attributes**
1212

mint.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,15 @@
115115
"self-hosting/govern/configure-dns-email-service",
116116
"self-hosting/govern/database-and-storage",
117117
"self-hosting/govern/custom-domain",
118+
"self-hosting/govern/configure-ssl",
118119
"self-hosting/govern/private-bucket",
119120
{
120121
"group": "Integrations",
121122
"pages": [
122123
"self-hosting/govern/integrations/github",
123-
"self-hosting/govern/integrations/slack",
124-
"self-hosting/govern/integrations/gitlab"
124+
"self-hosting/govern/integrations/gitlab",
125+
"self-hosting/govern/integrations/sentry",
126+
"self-hosting/govern/integrations/slack"
125127
]
126128
},
127129
"self-hosting/govern/external-secrets",
@@ -358,6 +360,14 @@
358360
"api-reference/worklogs/delete-worklog"
359361
]
360362
},
363+
{
364+
"group": "Epics",
365+
"pages": [
366+
"api-reference/epics/overview",
367+
"api-reference/epics/list-epics",
368+
"api-reference/epics/get-epic-detail"
369+
]
370+
},
361371
{
362372
"group": "Initiatives",
363373
"pages": [
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
---
2+
title: Set up SSL • Commercial Edition
3+
sidebarTitle: Configure SSL
4+
---
5+
6+
This guide shows you how to configure SSL/TLS certificates for your self-hosted Plane instance. Plane handles certificate provisioning and renewal automatically using Let's Encrypt.
7+
8+
<Note>
9+
**Applies to:** Docker deployments of Plane Commercial Edition without an external reverse proxy.
10+
11+
If you're using an external reverse proxy (nginx, Caddy, Traefik) or a load balancer, configure SSL there instead and skip this guide.
12+
</Note>
13+
14+
## Before you begin
15+
16+
Ensure you have:
17+
- A registered domain name pointing to your Plane server
18+
- DNS records configured (A or CNAME record pointing to your server's IP)
19+
- Ports 80 and 443 open on your server's firewall
20+
- Prime CLI installed (included with Plane Commercial Edition)
21+
22+
<Warning>
23+
**DNS must be configured first.** Let's Encrypt validates domain ownership by making HTTP requests to your domain. Ensure your domain resolves to your server's IP address before proceeding.
24+
</Warning>
25+
26+
## Configure SSL settings
27+
28+
### Open the configuration file
29+
30+
Edit your Plane environment configuration:
31+
```bash
32+
vim /opt/plane/plane.env
33+
```
34+
35+
### Set required variables
36+
37+
Add or update these environment variables:
38+
```bash
39+
# SSL Configuration
40+
41+
SITE_ADDRESS=plane.yourcompany.com
42+
WEB_URL=https://plane.yourcompany.com
43+
```
44+
45+
**Variable explanations:**
46+
47+
**CERT_EMAIL**
48+
A valid email address for Let's Encrypt certificate registration. Let's Encrypt uses this to send renewal reminders and important notices about your certificates.
49+
50+
**SITE_ADDRESS**
51+
Your domain name **without** protocol. Use only the domain (e.g., `plane.company.com`), not `https://plane.company.com`. Plane's built-in proxy uses this to request certificates from Let's Encrypt.
52+
53+
**WEB_URL**
54+
Your full Plane URL **with** the `https://` protocol. This tells Plane services how to construct URLs for redirects, emails, and API responses.
55+
56+
### DNS provider configuration (optional)
57+
58+
If you're using Cloudflare or another DNS provider with API access, you can use DNS validation instead of HTTP validation. This is useful if:
59+
- Your server is behind a firewall that blocks port 80
60+
- You need wildcard certificates
61+
- HTTP validation isn't working due to network restrictions
62+
63+
**For Cloudflare:**
64+
```bash
65+
CERT_ACME_DNS=acme_dns cloudflare <cloudflare-api-token>
66+
```
67+
68+
Replace `<cloudflare-api-token>` with your Cloudflare API token. Create one at **Cloudflare Dashboard****My Profile****API Tokens** with **Zone:DNS:Edit** permissions.
69+
70+
**For other DNS providers:**
71+
72+
Check the [acme.sh DNS API documentation](https://github.com/acmesh-official/acme.sh/wiki/dnsapi) for provider-specific configuration.
73+
74+
## Apply SSL configuration
75+
76+
Restart Plane to apply the SSL settings:
77+
```bash
78+
sudo prime-cli restart
79+
```
80+
81+
Prime CLI will:
82+
1. Stop all Plane services
83+
2. Request a new SSL certificate from Let's Encrypt
84+
3. Configure the built-in proxy to use HTTPS
85+
4. Restart all services with SSL enabled
86+
87+
This process typically takes 30-60 seconds.
88+
89+
## Verify SSL is working
90+
91+
Check that your Plane instance is accessible via HTTPS:
92+
```bash
93+
curl -I https://plane.yourcompany.com
94+
```
95+
96+
You should see a response with `HTTP/2 200` or `HTTP/1.1 200` and SSL-related headers.
97+
98+
Visit your Plane instance in a browser at `https://plane.yourcompany.com`. You should see a secure connection (padlock icon) without certificate warnings.
99+
100+
101+
## Using custom SSL certificates
102+
103+
Custom SSL certificates (from a corporate CA or purchased certificates) are not currently supported in Plane's deployment.
104+

self-hosting/govern/database-and-storage.mdx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ sidebarTitle: External database and storage
66

77
The Prime CLI lets you easily configure your Commercial Edition instance, providing options to customize the PostgreSQL database, Redis, external storage, and other advanced settings.
88

9-
1. Run the Prime CLI with ↓:
9+
<Warning>
10+
**Prime CLI is for Docker installations only.** These commands only work on Plane instances originally installed using `prime-cli`.
11+
</Warning>
12+
13+
1. Run the Prime CLI with ↓:
14+
1015
```sudo prime-cli```
1116

1217
2. Once the CLI is running, enter `configure`, which will guide you through a step-by-step form where you can specify the following:

0 commit comments

Comments
 (0)