Skip to content

OpenAPI Specification

Plane uses drf-spectacular to generate an OpenAPI 3.0 specification for the public REST API (/api/v1/).

Download the published spec

The specification is published with these docs — point code generators, API clients, and AI agents at either file:

FormatURL
JSONdevelopers.plane.so/openapi.json
YAMLdevelopers.plane.so/openapi.yaml

The published spec lists https://api.plane.so (Plane Cloud) as the production server. When self-hosting, replace it with your own domain, or generate the spec from your own instance as described below.

Generate the spec from a self-hosted instance

The schema endpoints are disabled by default and must be explicitly enabled.

Enable the OpenAPI spec

Add the following to your .env file (at the project root or apps/api/.env):

ini
ENABLE_DRF_SPECTACULAR=1

Then restart the API server so it picks up the new variable.

VariableRequired valueDefaultDescription
ENABLE_DRF_SPECTACULAR10Activates drf-spectacular and registers the schema endpoints

No other environment variables are needed — everything else (schema path prefix, tags, auth schemes, servers) is pre-configured in apps/api/plane/settings/openapi.py.

Access the OpenAPI spec

Replace {domain_name} below with your self-hosted Plane domain (e.g. plane.example.com).

Once the API server is running with the variable enabled, three endpoints are available:

EndpointURLDescription
GET /api/schema/https://{domain_name}/api/schema/Raw OpenAPI schema (YAML)
GET /api/schema/swagger-ui/https://{domain_name}/api/schema/swagger-ui/Interactive Swagger UI
GET /api/schema/redoc/https://{domain_name}/api/schema/redoc/ReDoc documentation viewer

Download the OpenAPI spec

Browser

Open https://{domain_name}/api/schema/ and save the page. The default format is YAML.

For JSON, append the format query parameter:

text
https://{domain_name}/api/schema/?format=openapi-json

curl

bash
# YAML
curl -o openapi.yaml https://{domain_name}/api/schema/

# JSON
curl -o openapi.json https://{domain_name}/api/schema/?format=openapi-json

Management command (offline, no running server required)

bash
# From apps/api/
ENABLE_DRF_SPECTACULAR=1 python manage.py spectacular --file openapi.yaml
ENABLE_DRF_SPECTACULAR=1 python manage.py spectacular --file openapi.json --format openapi-json