---
title: "Create Project Grant"
method: POST
path: "/api/v1/projects/{project_id}/grants"
tags: ["project-sharing"]
---

# Create Project Grant

`POST /api/v1/projects/{project_id}/grants`

## Path parameters

- `project_id` string, uuid, required

## Request body

- CreateProjectGrantRequest — Internal sharing only: the grantee must already be a member of the project's org. External guests arrive through project invites (PR3).
  - `user_id` string, uuid, required

## Response `201`

Successful Response

- ProjectSharing — The whole sharing state of one project — what the share dialog renders.
  - `visibility` 'org' | 'restricted', required — Mirrors the `projects.visibility` CHECK constraint (ADR-0142). `org`: every member of the owning org may read it. `restricted`: only org owners/admins and explicit grantees. Set only through the fenced sharing service — `authenticated` holds no UPDATE grant on this column.
  - `grants` ProjectGrant[], required
    - `user_id` string, uuid, required
    - `email` string, nullable, required
    - `display_name` string, nullable, required
    - `granted_by` string, uuid, nullable, required
    - `created_at` string, date-time, required

## Other responses

- `4XX` — Client Error
- `5XX` — Server Error

---

[API](https://skmtc.dev/rudus/apis/rudus-api.md) · [All operations](https://skmtc.dev/rudus/apis/rudus-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/rudus/rudus-api/revisions/f149124a4d80/schema)
