Skip to main content
PATCH
/
experiences
/
{experience_id}
curl -X PATCH \
  -H "X-API-KEY: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sunset Yoga — Premium",
    "pricing": { "model": "per_session", "currency": "EUR", "amount": 35 },
    "scheduling_rules": { "booking_window": { "min_hours_before": 2, "max_days_ahead": 90 } }
  }' \
  "https://www.gomry.com/api/v1/experiences/AbCdEfGhIjKlMnOpQrSt"
{
  "data": {
    "id": "AbCdEfGhIjKlMnOpQrSt",
    "name": "Sunset Yoga — Premium",
    "status": "active",
    "registration_status": "open",
    "duration_minutes": 60,
    "default_capacity": 20,
    "pricing": { "model": "per_session", "currency": "eur", "amount": 35 },
    "scheduling_rules": {
      "booking_window": { "min_hours_before": 2, "max_days_ahead": 90 },
      "cancellation_policy": { "refundable_until_hours_before": 24 }
    },
    "created_at": "2025-07-15T10:00:00.000Z",
    "updated_at": "2025-07-15T11:00:00.000Z"
  }
}

Update Experience

Partially updates an experience. Only the fields supplied in the body are written — omitted fields are left unchanged. The experience must belong to the organization associated with the API key; cross-org requests return 404 Not Found with no information leak. Requires the experiences:write scope.

Path Parameters

experience_id
string
required
Experience ID (the service catalog document ID).

Request Body

At least one field is required. Unknown fields are rejected with 400.
name
string
Experience name (1–120 chars).
description
string
Long-form description shown on the public booking page.
duration_minutes
integer
Length of one session in minutes (1..1440).
default_capacity
integer
Maximum attendees per session (1..10000).
location
object
Replace the location object. type is required when location is supplied.
pricing
object
Replace the pricing object. Currency is normalised to lowercase before persistence. When the currency changes, all child ticket classes have their pricing currency cascaded automatically — booking flows that validate parent/child currency equality continue to work.
scheduling_rules
object
Partial scheduling rules. Each nested object (booking_window, cancellation_policy) is replaced wholesale if supplied; omit a nested object to keep its existing values. Invariants (min_hours_before >= 0, max_days_ahead > 0, refundable_until_hours_before >= 0) are enforced on the merged result.
providers
string[]
Replace the providers list. Pass [] to remove all providers.
required_contact_method
enum
none, email, or email_and_phone.
max_booking_quantity
integer
Upper bound on seats per single booking (1..50).
status
enum
active or inactive. Inactive experiences are hidden from the public catalog and reject new bookings.
registration_status
enum
open or closed. When closed the experience stays publicly visible but the booking CTA is hidden.

Response

Returns the updated experience as serialized by GET /experiences/{experience_id}.
curl -X PATCH \
  -H "X-API-KEY: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sunset Yoga — Premium",
    "pricing": { "model": "per_session", "currency": "EUR", "amount": 35 },
    "scheduling_rules": { "booking_window": { "min_hours_before": 2, "max_days_ahead": 90 } }
  }' \
  "https://www.gomry.com/api/v1/experiences/AbCdEfGhIjKlMnOpQrSt"
{
  "data": {
    "id": "AbCdEfGhIjKlMnOpQrSt",
    "name": "Sunset Yoga — Premium",
    "status": "active",
    "registration_status": "open",
    "duration_minutes": 60,
    "default_capacity": 20,
    "pricing": { "model": "per_session", "currency": "eur", "amount": 35 },
    "scheduling_rules": {
      "booking_window": { "min_hours_before": 2, "max_days_ahead": 90 },
      "cancellation_policy": { "refundable_until_hours_before": 24 }
    },
    "created_at": "2025-07-15T10:00:00.000Z",
    "updated_at": "2025-07-15T11:00:00.000Z"
  }
}