# Get experience

Get an experience by its ID.

Endpoint: GET /v1/experiences/{experienceId}
Security: OAuth2

## Security:

  - `OAuth2` (unknown)
    oauth2 scopes: experience.read

## Path parameters:

  - `experienceId` (string, required)
    The unique identifier of the experience.

## Header parameters:

  - `Accept-Language` (string, required)

## Response 200:

  - `200` (unknown)
    OK

## Response 200 fields (application/json):

  - `id` (string, required)
    The unique identifier of the experience.

  - `state` (string, required)
    The lifecycle state of the experience.
- `ACTIVE` — bookable; the default operational state.
- `INACTIVE` — temporarily not bookable, but still managed by the company. Can transition back to `ACTIVE`.
- `ARCHIVED` — terminal state. The experience is hidden from active management; it is no longer bookable and cannot transition back.
- `DELETED` — terminal state. The experience has been deleted; it is no longer bookable and cannot transition back.
- `UNKNOWN` — defensive default; should not appear on a correctly configured experience.
    Enum: "ACTIVE", "INACTIVE", "ARCHIVED", "DELETED", "UNKNOWN"

  - `name` (string, required)
    The display name of the experience, returned in the language negotiated via the `Accept-Language` header.

  - `description` (string)
    Markdown formatted text.
This is a string that contains markdown syntax.

  - `tag_ids` (array)
    Opaque tag identifiers associated with the experience.

Use them to group or filter experiences in your own UI; the IDs are not resolved to tag entities by this API.

  - `media` (array)
    Media items (images and videos) attached to the experience, ordered as configured by the company.

  - `media.type` (string, required)
    Discriminator value identifying this media item as an image.
    Enum: "IMAGE"

  - `media.url` (string, required)
    URL where the image can be fetched.

  - `media.mime_type` (string, required)
    IANA media type of the image, e.g. `image/jpeg` or `image/png`.

  - `media.type` (string, required)
    Discriminator value identifying this media item as a video.
    Enum: "VIDEO"

  - `media.url` (string, required)
    URL where the video can be fetched.

  - `created_at` (string, required)
    Timestamp of when the experience was created.

  - `updated_at` (string, required)
    Timestamp of when the experience was last modified.

Includes both content edits and lifecycle transitions (state changes, archival, deletion).

  - `metadata` (object)
    Example: {"key1":"value1","key2":"value2"}

## Response 403:

  - `403` (unknown)
    Forbidden - insufficient permissions.

## Response 403 fields (application/json):

  - `code` (string, required)
    Machine-readable error code. Each code always comes with the same HTTP status:
`BAD_REQUEST` (400), `UNAUTHORIZED` (401), `FORBIDDEN` (403), `NOT_FOUND` (404),
`CONFLICT` (409), `PRECONDITION_FAILED` (412), `TOO_MANY_REQUESTS` (429),
`INTERNAL_SERVER_ERROR` (500), `NOT_IMPLEMENTED` (501), `SERVICE_UNAVAILABLE` (503)
and `GATEWAY_TIMEOUT` (504).
The list is extensible: handle an unknown code by its HTTP status.
    Example: BAD_REQUEST

  - `message` (string, required)
    Human-readable description of the error, and how to resolve it where possible.

## Response 404:

  - `404` (unknown)
    Experience not found.

## Response 404 fields (application/json):

  - `code` (string, required)
    Machine-readable error code. Each code always comes with the same HTTP status:
`BAD_REQUEST` (400), `UNAUTHORIZED` (401), `FORBIDDEN` (403), `NOT_FOUND` (404),
`CONFLICT` (409), `PRECONDITION_FAILED` (412), `TOO_MANY_REQUESTS` (429),
`INTERNAL_SERVER_ERROR` (500), `NOT_IMPLEMENTED` (501), `SERVICE_UNAVAILABLE` (503)
and `GATEWAY_TIMEOUT` (504).
The list is extensible: handle an unknown code by its HTTP status.
    Example: BAD_REQUEST

  - `message` (string, required)
    Human-readable description of the error, and how to resolve it where possible.

## Response default:

  - `default` (unknown)
    Unexpected error.
This will be a 5XX status code.

## Response default fields (application/json):

  - `code` (string, required)
    Machine-readable error code. Each code always comes with the same HTTP status:
`BAD_REQUEST` (400), `UNAUTHORIZED` (401), `FORBIDDEN` (403), `NOT_FOUND` (404),
`CONFLICT` (409), `PRECONDITION_FAILED` (412), `TOO_MANY_REQUESTS` (429),
`INTERNAL_SERVER_ERROR` (500), `NOT_IMPLEMENTED` (501), `SERVICE_UNAVAILABLE` (503)
and `GATEWAY_TIMEOUT` (504).
The list is extensible: handle an unknown code by its HTTP status.
    Example: BAD_REQUEST

  - `message` (string, required)
    Human-readable description of the error, and how to resolve it where possible.

