---
title: "Create Grant External"
method: POST
path: "/decks/{deck_id}/grants"
tags: ["decks"]
---

# Create Grant External

`POST /decks/{deck_id}/grants`

## Request

- Base URL: `https://api.presentations.ai/api/v1`
- URL: `https://api.presentations.ai/api/v1/decks/{deck_id}/grants`
- Auth: HTTP bearer

Create or update a grant on a deck.

## Path parameters

- `deck_id` string, uuid, required

## Request body

- DeckGrantCreate: Create or update a per-deck grant.
  - `subject` string, required
  - `role` 'VIEW' | 'COMMENT' | 'EDIT', required: Per-deck grant role for sharing decks independently of project membership.
  - `workspace_role` 'OWNER' | 'ADMIN' | 'MEMBER' | 'GUEST': Workspace membership role; higher roles subsume lower ones for hierarchy checks.

## Response `201`

Successful Response

- DeckGrantResponse: Wire representation of a DeckGrant.
  - `id` string, uuid, required
  - `deck_id` string, uuid, required
  - `subject_type` 'USER' | 'EMAIL', required: What kind of subject a deck grant targets.
  - `subject_user_id` string, uuid, nullable
  - `subject_email` string, nullable
  - `subject` UserInfo: Public profile of a referenced user.
    - `id` string, uuid, required
    - `display_name` string, required
    - `avatar_url` string, nullable, required
  - `role` 'VIEW' | 'COMMENT' | 'EDIT', required: Per-deck grant role for sharing decks independently of project membership.
  - `granted_by` string, uuid, required
  - `created_at` string, date-time, required
  - `membership_status` 'member' | 'non_member' | 'pending_request' | 'invited', nullable
  - `workspace_role` 'OWNER' | 'ADMIN' | 'MEMBER' | 'GUEST': Workspace membership role; higher roles subsume lower ones for hierarchy checks.

## Other responses

- `401`: Missing, malformed, expired, or revoked Bearer API key.
- `403`: The API key, workspace role, project scope, or plan lacks permission.
- `404`: The resource does not exist or is outside the caller's scope.
- `422`: A path, query, header, or request-body field failed validation.
- `429`: The caller exceeded the API rate limit.
- `500`: Unexpected server failure. Retry only idempotent operations and retain trace_id.

---

[API](https://skmtc.dev/presentations/apis/presentation-services-api.md) · [All operations](https://skmtc.dev/presentations/apis/presentation-services-api/llms.txt) · [OpenAPI document](https://skmtc.dev/presentations/apis/presentation-services-api/revisions/da06cb2e2f32?raw)
