# Get an experience

`GET /api/v1/experiences/{id}`

One experience by id. Requires the "experiences:read" scope.

Scope: `experiences:read`

## Parameters

- `id` (path, string, required) — Awrora id (UUID) for the experience.

## Responses

- `200` — The experience.
- `401` — Missing, invalid, revoked or expired API key — codes "api_key_missing", "api_key_invalid", "api_key_revoked", "api_key_expired".
- `403` — The API app is off, the plan does not include the API, or the key lacks the required scope — codes "app_not_enabled", "plan_upgrade_required", "insufficient_scope" (the last carries "required_scope").
- `404` — No such resource. The same response is returned for a resource that belongs to another organization — code "not_found".
- `429` — Rate limit exceeded — code "rate_limited". See the x-ratelimit-* headers.
- `500` — Something went wrong on our side — code "internal_error".

## Response `200`

- `id` (string, required) — Awrora id (UUID) for the experience.
- `slug` (string, required) — URL slug, unique within the organization.
- `title` (string, required) — Public title.
- `is_published` (boolean, required) — True when the experience is visible on the storefront. Unpublished experiences are returned too — filter with ?published=.
- `excerpt` (string | null, required) — Short teaser text, or null.
- `duration_minutes` (integer | null, required) — Length of the experience in minutes, or null when unset. This is the source: `duration` is derived display text, and a departure without `ends_at` runs this long.
- `duration` (string | null, required) — Duration as display text, e.g. "3 timmar". Derived from duration_minutes.
- `difficulty` (string | null, required) — Difficulty as written by the merchant, or null.
- `address` (string | null, required) — Meeting point address, or null.
- `latitude` (number | null, required) — WGS84 latitude of the meeting point, or null.
- `longitude` (number | null, required) — WGS84 longitude of the meeting point, or null.
- `image_url` (string | null, required) — Cover image URL, or null.
- `languages` (string[], required) — Language codes the experience is offered in. May be empty.
- `tags` (string[], required) — Merchant-defined tags. May be empty.
- `price_from` (Money | null, required) — Lowest advertised price, or null when the merchant published no machine-readable amount.
- `price_tiers` (object[], required) — The bookable price tiers. Use the "id" of one of these as "tier_id" when creating a booking. An experience with no configured tiers reports a single "standard" tier built from its advertised price.
- `min_participants` (integer | null, required) — Minimum participants for a departure to run, or null when not set.
- `hours_before_booking_closes` (integer | null, required) — Lead time in hours before departure when booking closes. Null means the organization default applies.
- `created_at` (string, required) — ISO 8601 timestamp with offset.
- `updated_at` (string, required) — ISO 8601 timestamp with offset.

## Example

```bash
curl -X GET "https://your-site.awrora.app/api/v1/experiences/id_8f2k3n" \
  -H "Authorization: Bearer $AWRORA_API_KEY"
```