---
title: "Share a project by link"
method: POST
path: "/projects/{projectId}/share"
tags: ["Projects"]
---

# Share a project by link

`POST /projects/{projectId}/share`

## Request

- Base URL: `https://app.flora.ai/api/v1`
- URL: `https://app.flora.ai/api/v1/projects/{projectId}/share`
- Auth: HTTP bearer

Shares the project the way the canvas Share tab does and returns the link: opens link sharing at the requested access (`view` or `edit`) and returns the reusable link for that access, creating it on first use. Escalate-only — sharing for `view` never downgrades a project already shared for `edit`; use PATCH /projects/{project_id}/sharing to lower or restrict access. `edit` requires the workspace plan to include editable sharing and returns `paid_plan_required` otherwise; a caller who may not manage the project's sharing gets `forbidden`. Anyone holding the returned link gets its role. Mutating public API requests support an optional Idempotency-Key header for client retries; duplicate keys within two hours return idempotency_duplicate.

## Path parameters

- `projectId` string, required: Project identifier

## Request body

- object
  - `access` 'view' | 'edit', required: What the link should grant. `edit` needs the workspace plan to include editable sharing (otherwise `paid_plan_required`). Never downgrades: a project already shared for editing stays that way and its view link is returned.
  - `allow_comments` boolean: Whether visitors arriving through the link may leave comments. Omit to keep the current setting (on by default).
  - `passphrase` string: Require this passphrase before the link resolves. Stored hashed; omit to keep the current setting. Whitespace-only values are rejected.

## Response `200`

Project shared; link returned.

- object
  - `project_id` string, required: Project identifier
  - `workspace_id` string, required: Workspace identifier
  - `url` string, uri, required: Link into the project. Anyone who has it gets the link's role, so treat it as a secret.
  - `role` 'guest' | 'editor', required: What the link grants: `guest` can view (and comment when allowed), `editor` can edit
  - `sharing_mode` 'restricted' | 'view' | 'edit', required: Link sharing mode: `restricted` (no links; members only), `view` (anyone with the link can view), `edit` (anyone with the link can edit)
  - `created` boolean, required: True when this call created the link; false when an existing link was returned
  - `canvas_url` string, uri, required: Project canvas URL

## Other responses

- `400`: 400
- `401`: 401
- `402`: 402
- `403`: 403
- `404`: 404
- `409`: 409
- `429`: 429
- `500`: 500
- `503`: 503

## Changes

- **2026-10-28** `a8351619f225`: 9 warning
  - added the new `not_configured` enum value to the `error/code` response property for the response status `400`
  - added the new `not_configured` enum value to the `error/code` response property for the response status `401`
  - added the new `not_configured` enum value to the `error/code` response property for the response status `402`
  - added the new `not_configured` enum value to the `error/code` response property for the response status `403`
  - …5 more
- **2026-10-16** `e54130373b10`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/florafauna-ai/apis/flora-ai-api/changes/projects/:projectId/share/post.md)

---

[API](https://skmtc.dev/florafauna-ai/apis/flora-ai-api.md) - [All operations](https://skmtc.dev/florafauna-ai/apis/flora-ai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/florafauna-ai/apis/flora-ai-api/revisions/87cfe2c4ac29?raw)
