---
title: "Update experience"
method: PATCH
path: "/experiences/{id_or_slug}"
tags: ["Experiences"]
---

# Update experience

`PATCH /experiences/{id_or_slug}`

## Request

- Base URL: `https://api.crevio.co/v1`
- URL: `https://api.crevio.co/v1/experiences/{id_or_slug}`
- Auth: API key in header `Authorization`

Updates an experience's base fields and, via `details`, its type-specific item fields. Collection content (chapters, lessons, link items, posts, event sessions) has its own nested endpoints and is not touched here.

## Path parameters

- `id_or_slug` string, required

## Request body

- ExperienceUpdateRequest
  - `name` string
  - `description` string, nullable: Short description (max 200 chars)
  - `access_type` 'secret' | 'open': `secret` (access via grant/purchase) or `open` (visible to members)
  - `slug` string: URL slug, unique within the account
  - `details` union: Type-specific fields. The accepted shape is determined by the experience's `type` (see the per-type schemas). Collection content (chapters, link items, topics, posts, event sessions) has its own nested endpoints. Link, Discord, Telegram, and Event types take no `details`.
    - CourseDetailsRequest
      - `description` string, nullable
      - `require_lesson_completion` boolean: Require each lesson be completed before the next unlocks
      - `instructor` object
        - `name` string
        - `title` string, nullable
        - `bio` string, nullable
    - DigitalDownloadDetailsRequest
      - `watermark_enabled` boolean: Stamp the buyer's email onto delivered PDFs
    - WrittenContentDetailsRequest
      - `title` string, nullable
      - `html_content` string, nullable
    - WebsiteEmbedDetailsRequest
      - `url` string: Page to embed; must be live and allow framing
    - ForumDetailsRequest
      - `title` string, nullable
      - `description` string, nullable
      - `layout` 'feed' | 'list' | 'card'
      - `admin_only_posting` boolean
      - `admin_only_commenting` boolean
    - EventTypeDetailsRequest
      - `duration_minutes` integer
      - `capacity` integer
      - `location_type` 'google_meet' | 'zoom' | 'custom_link' | 'physical' | 'phone'
      - `location_details` string, nullable
      - `buffer_before_minutes` integer
      - `buffer_after_minutes` integer
      - `min_notice_minutes` integer
      - `booking_window_days` integer
      - `max_per_day` integer, nullable
      - `reminder_minutes` integer[]: Minutes-before-start to remind the attendee
      - `schedule_id` string, nullable: Availability schedule (`sched_…`) that makes this bookable; "" detaches
      - `form_id` string, nullable: Intake form (`form_…`) shown at booking; "" detaches

## Response `200`

Experience updated

- Experience
  - `id` string, required
  - `object` string, required
  - `name` string, required
  - `slug` string, required
  - `description` string, nullable, required
  - `access_type` 'secret' | 'open', required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `type` string, required
  - `active_grants_count` integer, required
  - `details` object, required: Type-specific fields, shaped by the experience's `type`. Mirrors what PATCH accepts under `details` (see the per-type *DetailsRequest schemas), plus read-only collections (e.g. a course's `chapters`).

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `422`: Validation error
- `429`: Rate limit exceeded — 600 requests per minute per credential. Retry after the number of seconds in `Retry-After`.
- `500`: Internal server error

---

[API](https://skmtc.dev/crevio/apis/crevio-api-v1.md) · [All operations](https://skmtc.dev/crevio/apis/crevio-api-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/crevio/apis/crevio-api-v1/revisions/2219f18ad651?raw)
