Skip to content

[bug]: Plain description is not rendered when creating intake issues via API on Community self-hosted #9180

@Danielllira

Description

@Danielllira

Is there an existing issue for this?

  • I have searched the existing issues

Current behavior

Environment

  • Plane edition: Community Edition
  • Deployment: Self-hosted
  • Setup: Docker Compose
  • Version: v1.3.1

Current behavior

When creating an intake issue through the API on Plane Community self-hosted using only name, description, and priority, the plain text description does not render correctly in the UI.

The intake issue is created successfully, and the title/priority are saved correctly. However, the description is not displayed as expected in the Plane UI.

Looking at the database, the plain string sent in issue.description appears to be stored in description_json, while the renderable description fields such as description_html and description_stripped remain empty/default.

Example observed result:

  • description_json = "Description created via API to validate the Intake"
  • description_html = "<p></p>"
  • description_stripped = ""

When creating an intake issue manually through the UI, description_json remains as {} and the description is rendered correctly through the appropriate description fields.

Expected behavior

When creating an intake issue through the documented API payload, a plain string passed as issue.description should render correctly in the Plane UI.

For plain text descriptions, the API should not store the string directly as description_json. Instead, it should keep description_json as an object, for example {}, and populate the renderable/plain description fields accordingly.

Expected result:

  • description_json = {}
  • description_html = "<p>Description created via API to validate the Intake</p>"
  • description_stripped = "Description created via API to validate the Intake"

If description is provided as a structured object/list, or if description_json is provided explicitly, the existing structured description behavior should be preserved.

Steps to reproduce

Steps to reproduce

  1. Run Plane Community Edition self-hosted using Docker Compose.

  2. Create an intake issue through the API using only name, description, and priority:

curl -X POST \
  "https://<domain>/api/v1/workspaces/<workspace_slug>/projects/<project_id>/intake-issues/" \
  -H "X-API-Key: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "issue": {
      "name": "API test",
      "description": "Description created via API to validate the Intake",
      "priority": "medium"
    }
  }'
  1. Open the created intake issue in the Plane UI.

  2. Check whether the description is displayed.

  3. Optionally, inspect the created issue in the database and compare description_json, description_html, and description_stripped.

Additional context

The documented API example allows sending description as part of the issue payload when creating an intake issue.

The behavior seems to happen because the intake creation flow accepts both description and description_json, but a plain string passed as description can end up being assigned to description_json instead of being converted into renderable HTML/plain text fields.

Environment

Production

Browser

Google Chrome

Variant

Self-hosted

Version

v1.3.1

Metadata

Metadata

Assignees

Labels

planesync issues to Plane🐛bugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions