Skip to content

[bug]: Cloudflare blocks POST/PATCH/DELETE to api.plane.so (403) — breaks API/MCP writes #9721

Description

@joao-jlcm

Summary
Since roughly 2026-08-28, POST/PATCH/DELETE requests to the Plane Cloud public API (https://api.plane.so/api/v1/...) are intermittently rejected with an HTTP 403 HTML page from Cloudflare ("Attention Required! | blocked"). GET requests succeed (HTTP 200). The block hits both plain curl and the official plane-mcp-server, so any programmatic/agent write access fails while reads work.

Repro (minimal)

  1. Generate a personal access token.
  2. curl -I -X POST "https://api.plane.so/api/v1/workspaces/<slug>/projects/<id>/issues/" with a valid X-API-Key.
  3. Response is HTTP 403 with the Cloudflare challenge page (Attention Required! | blocked).
  4. The same request as GET on /work-items/ returns HTTP 200.

Observed

  • POST → HTTP 403 (Cloudflare HTML challenge, not a Platform JSON error).
  • GET → HTTP 200.
  • Waiting past the documented rate limit (60 req/min per key, per the docs) does NOT clear it — returns the CF 403 page, never the app-level 429.
  • Occurs from multiple independent IPs and both X-API-Key and Bearer auth.

Expected
A public API is always consumed by bots/scripts and authenticates via API key. Cloudflare bot-management/JS-challenge should not be applied to /api/v1/* (or should skip requests carrying a valid key). Abuse should be handled by the app-level rate limit (X-RateLimit-* headers / HTTP 429), which a programmatic client can handle — a Cloudflare JS challenge cannot be solved by an API client.

Impact
Breaks all programmatic write access to Plane Cloud (MCP server, scripts, agents) — the core use case of a public REST API.

Suggested fix
Exclude /api/v1/* from Cloudflare bot-management/JS challenge, or exempt requests with a valid X-API-Key. Alternatively, surface a machine-readable 429 instead of serving the CF HTML challenge on the API host.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    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