> For the complete documentation index, see [llms.txt](https://syticks.gitbook.io/merpi-by-syticks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://syticks.gitbook.io/merpi-by-syticks/api-reference/experience-ticketing-events-parties-conference-comedy-and-more/get-experience-details.md).

# Get Experience Details

This endpoint returns complete details about a single regular experience (events like concerts, parties, festivals, shows, etc.). Regular experiences are one-time or limited-duration events with specific start and end dates.

**Note:** This documentation covers **regular experiences only** (`cinema: false`). For cinema experiences (movies), see the [**Get Cinema Experience Details**](/merpi-by-syticks/api-reference/cinema-ticketing-cinema-movies-available-days-purchase-etc/get-cinema-experience-details.md) page.

## Retrieve a Single Regular Experience

> Fetch detailed information about a specific regular experience using the experience ID. \
> Regular experiences are one-time or limited-duration events with specific start and end dates.\
> \
> \*\*IMPORTANT:\*\* Always validate that the \`end\_date\` has NOT passed before allowing customers to purchase tickets.<br>

```json
{"openapi":"3.0.0","info":{"title":"Get Regular Experience Details API","version":"1.0.0"},"paths":{"/api/v1/merpi/experience/v/{experience_id}":{"get":{"summary":"Retrieve a Single Regular Experience","description":"Fetch detailed information about a specific regular experience using the experience ID. \nRegular experiences are one-time or limited-duration events with specific start and end dates.\n\n**IMPORTANT:** Always validate that the `end_date` has NOT passed before allowing customers to purchase tickets.\n","parameters":[{"name":"experience_id","in":"path","required":true,"description":"Unique identifier for the experience (UUID format)","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Successfully retrieved experience details","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"status":{"type":"integer","description":"HTTP status code (200 for success)."},"message":{"type":"string","description":"Human-readable description of the response."},"data":{"$ref":"#/components/schemas/RegularExperience"}}}}}},"400":{"description":"Bad Request - Invalid experience ID format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - Experience doesn't exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["Experience Details"]}}},"components":{"schemas":{"RegularExperience":{"type":"object","description":"Regular experience (non-cinema event) details","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for the experience."},"title":{"type":"string","description":"Name/title of the experience."},"start_date":{"type":"string","description":"Start date and time in readable format (Day, DD Mon YYYY HH:MM:SS)."},"end_date":{"type":"string","description":"End date and time in readable format (Day, DD Mon YYYY HH:MM:SS).\n**CRITICAL:** Always validate this has not passed before allowing ticket purchases.\n"},"description":{"type":"string","description":"Complete detailed description of the experience."},"featured":{"type":"boolean","description":"Indicates if the experience is featured on the platform."},"cinema":{"type":"boolean","description":"Always false for regular experiences.","enum":[false]},"address":{"$ref":"#/components/schemas/Address"},"image":{"type":"array","description":"Array of experience images.","items":{"$ref":"#/components/schemas/Image"}},"business":{"$ref":"#/components/schemas/Business"},"category":{"$ref":"#/components/schemas/Category"},"created_on":{"type":"string","description":"Timestamp when the experience was created (Day, DD Mon YYYY HH:MM:SS)."}},"required":["id","title","start_date","end_date","cinema"]},"Address":{"type":"object","description":"Venue location details","properties":{"street":{"type":"string","description":"Street address of the venue."},"town":{"type":"string","description":"Town or locality."},"city":{"type":"string","description":"City where the experience takes place."},"country":{"type":"string","description":"Country name (typically \"Nigeria\")."}}},"Image":{"type":"object","properties":{"image":{"type":"string","format":"uri","description":"Full HTTPS URL to the experience image."}}},"Business":{"type":"object","description":"Business/organizer information","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for the business."},"name":{"type":"string","description":"Business/organizer name."},"photo":{"type":"string","format":"uri","nullable":true,"description":"URL to the business profile photo. May be null if no photo uploaded."},"slug":{"type":"string","description":"URL-friendly identifier for the business."},"type":{"type":"string","description":"Type of business (e.g., \"entertainment\")."}}},"Category":{"type":"object","description":"Category classification","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for the category."},"slug":{"type":"string","description":"URL-friendly identifier for the category."},"name":{"type":"string","description":"Display name of the category."}}},"ErrorResponse":{"type":"object","properties":{"success":{"type":"boolean"},"status":{"type":"integer"},"message":{"type":"string"}}}}}}
```

## Path Parameters

| Parameter       | Type          | Required | Description                                                                        |
| --------------- | ------------- | -------- | ---------------------------------------------------------------------------------- |
| `experience_id` | string (UUID) | Yes      | Unique identifier for the experience. Obtained from the list experiences endpoint. |

## Response Format

#### Root Response Object

| Field     | Type    | Description                                     |
| --------- | ------- | ----------------------------------------------- |
| `success` | boolean | Indicates whether the request was successful.   |
| `status`  | integer | HTTP status code (200 for successful requests). |
| `message` | string  | Human-readable description of the response.     |
| `data`    | object  | Experience details object.                      |

#### Data Object (Experience Details)

| Field         | Type          | Description                                                                                   |
| ------------- | ------------- | --------------------------------------------------------------------------------------------- |
| `id`          | string (UUID) | Unique identifier for the experience.                                                         |
| `title`       | string        | Name/title of the experience.                                                                 |
| `start_date`  | string        | Start date and time of the experience in readable format (`"Day, DD Mon YYYY HH:MM:SS"`).     |
| `end_date`    | string        | End date and time of the experience in readable format (`"Day, DD Mon YYYY HH:MM:SS"`).       |
| `description` | string        | Complete detailed description of the experience. May contain HTML or plain text.              |
| `featured`    | boolean       | Indicates if the experience is featured on the platform.                                      |
| `cinema`      | boolean       | Will always be `false` for regular experiences.                                               |
| `address`     | object        | Complete venue location details.                                                              |
| `image`       | array         | Array of image objects. All promotional images for the experience.                            |
| `business`    | object        | Information about the business/organizer hosting the experience.                              |
| `category`    | object        | Category classification of the experience.                                                    |
| `created_on`  | string        | Timestamp when the experience was created in readable format (`"Day, DD Mon YYYY HH:MM:SS"`). |

#### Address Object

| Field     | Type   | Description                            |
| --------- | ------ | -------------------------------------- |
| `street`  | string | Street address of the venue.           |
| `town`    | string | Town or locality.                      |
| `city`    | string | City where the experience takes place. |
| `country` | string | Country name (typically "Nigeria").    |

#### Image Object

| Field   | Type         | Description                             |
| ------- | ------------ | --------------------------------------- |
| `image` | string (URL) | Full HTTPS URL to the experience image. |

#### Business Object

| Field   | Type                | Description                                                            |
| ------- | ------------------- | ---------------------------------------------------------------------- |
| `id`    | string (UUID)       | Unique identifier for the business.                                    |
| `name`  | string              | Business/organizer name.                                               |
| `photo` | string (URL) / null | URL to the business profile photo. May be `null` if no photo uploaded. |
| `slug`  | string              | URL-friendly identifier for the business.                              |
| `type`  | string              | Type of business (e.g., "entertainment").                              |

#### Category Object

| Field  | Type          | Description                                                              |
| ------ | ------------- | ------------------------------------------------------------------------ |
| `id`   | string (UUID) | Unique identifier for the category.                                      |
| `slug` | string        | URL-friendly identifier for the category.                                |
| `name` | string        | Display name of the category (e.g., "Parties", "Concerts", "Festivals"). |

## Request Examples

#### Basic request

```http
GET /api/v1/merpi/experience/v/223f279b-28b2-4b72-8020-cfc2c02b95cb HTTP/1.1
Host: api.syticks.com
Accept: application/json
```

#### Using cURL

```bash
curl -X GET "https://api.syticks.com/api/v1/merpi/experience/v/223f279b-28b2-4b72-8020-cfc2c02b95cb" \
  -H "Accept: application/json"
```

#### Using JavaScript (Fetch)

```javascript
const experienceId = '223f279b-28b2-4b72-8020-cfc2c02b95cb';

fetch(`https://api.syticks.com/api/v1/merpi/experience/v/${experienceId}`, {
  method: 'GET',
  headers: {
    'Accept': 'application/json'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
```

#### Using Python (Requests)

```python
import requests

experience_id = '223f279b-28b2-4b72-8020-cfc2c02b95cb'
url = f'https://api.syticks.com/api/v1/merpi/experience/v/{experience_id}'

response = requests.get(url, headers={'Accept': 'application/json'})
data = response.json()
print(data)
```

## Validating Experience Availability

{% hint style="warning" %}
**CRITICAL - Ticket Sales Validation**
{% endhint %}

Always validate that the experience `end_date` has NOT passed before allowing customers to purchase tickets. Selling tickets for expired events results in poor customer experience and potential refund issues.

**Implementation requirement:**

* Compare current date/time with `end_date`
* If current time > `end_date`, the experience has ended
* Block ticket purchases and display "Event has ended" message
* Consider hiding or marking expired experiences in listings {% endhint %}

#### JavaScript Validation Example

```javascript
function canPurchaseTickets(experience) {
  const endDate = new Date(experience.end_date);
  const now = new Date();
  
  if (now > endDate) {
    return {
      canPurchase: false,
      reason: 'This event has ended'
    };
  }
  
  return {
    canPurchase: true,
    reason: null
  };
}

// Usage
const experience = data.data;
const validation = canPurchaseTickets(experience);

if (!validation.canPurchase) {
  alert(validation.reason);
  disableBookingButton();
} else {
  enableBookingButton();
}
```

#### Python Validation Example

```python
from datetime import datetime

def can_purchase_tickets(experience):
    # Parse the date string
    end_date_str = experience['end_date']
    end_date = datetime.strptime(end_date_str, "%a, %d %b %Y %H:%M:%S")
    now = datetime.now()
    
    if now > end_date:
        return {
            'can_purchase': False,
            'reason': 'This event has ended'
        }
    
    return {
        'can_purchase': True,
        'reason': None
    }

# Usage
experience = data['data']
validation = can_purchase_tickets(experience)

if not validation['can_purchase']:
    print(f"Error: {validation['reason']}")
else:
    # Proceed with ticket purchase
    pass
```

#### Complete Validation with Start Date

```javascript
function getExperienceStatus(experience) {
  const now = new Date();
  const startDate = new Date(experience.start_date);
  const endDate = new Date(experience.end_date);
  
  if (now < startDate) {
    return {
      status: 'upcoming',
      canPurchase: true,
      message: 'Tickets available for upcoming event'
    };
  }
  
  if (now >= startDate && now <= endDate) {
    return {
      status: 'ongoing',
      canPurchase: true,
      message: 'Event is currently happening - tickets may still be available'
    };
  }
  
  if (now > endDate) {
    return {
      status: 'expired',
      canPurchase: false,
      message: 'This event has ended'
    };
  }
}
```

## Understanding Date Formats

This endpoint returns dates in a human-readable format rather than ISO 8601:

**Format:** `"Day, DD Mon YYYY HH:MM:SS"`

**Examples:**

* `"Wed, 29 Jan 2025 04:41:00"`
* `"Sat, 15 Dec 2024 18:30:00"`

#### Parsing Dates in Your Application

**JavaScript**

```javascript
const dateString = "Wed, 29 Jan 2025 04:41:00";
const date = new Date(dateString);
console.log(date.toISOString()); // Converts to ISO format
```

**Python**

```python
from datetime import datetime

date_string = "Wed, 29 Jan 2025 04:41:00"
date_obj = datetime.strptime(date_string, "%a, %d %b %Y %H:%M:%S")
print(date_obj.isoformat())  # Converts to ISO format
```

## Common Use Cases

#### Display Event Details Page

```javascript
async function loadEventDetails(experienceId) {
  const response = await fetch(`/api/v1/merpi/experience/v/${experienceId}`);
  const data = await response.json();
  
  if (data.success) {
    const experience = data.data;
    
    // Validate if event is still active
    const status = getExperienceStatus(experience);
    
    // Display title
    document.getElementById('title').textContent = experience.title;
    
    // Display dates
    document.getElementById('start').textContent = experience.start_date;
    document.getElementById('end').textContent = experience.end_date;
    
    // Display description
    document.getElementById('description').innerHTML = experience.description;
    
    // Display venue
    const address = experience.address;
    document.getElementById('venue').textContent = 
      `${address.street}, ${address.town}, ${address.city}, ${address.country}`;
    
    // Display images
    experience.image.forEach(img => {
      const imgElement = document.createElement('img');
      imgElement.src = img.image;
      document.getElementById('gallery').appendChild(imgElement);
    });
    
    // Show/hide booking button based on status
    if (!status.canPurchase) {
      document.getElementById('bookButton').disabled = true;
      document.getElementById('statusMessage').textContent = status.message;
    }
  }
}
```

#### Filtering Out Expired Events

```javascript
async function getActiveExperiences() {
  const response = await fetch('/api/v1/merpi/experience');
  const data = await response.json();
  
  if (data.success) {
    // Filter out experiences that have ended
    const activeExperiences = data.data.experiences.filter(exp => {
      const endDate = new Date(exp.end_date);
      return new Date() <= endDate;
    });
    
    return activeExperiences;
  }
}
```

## Key Differences from Cinema Experiences

Regular experiences differ from cinema experiences in the following ways:

| Feature              | Regular Experience           | Cinema Experience                  |
| -------------------- | ---------------------------- | ---------------------------------- |
| `cinema` field       | Always `false`               | Always `true`                      |
| `cinema_info` object | Not present                  | Present with `showing` and `times` |
| Duration             | Fixed start and end dates    | Recurring showtimes                |
| Ticket types         | Event-based                  | Showtime-based                     |
| Booking flow         | Book for entire event period | Select specific showtime           |

{% hint style="warning" %}
**Important:** If you receive a response where `cinema: true`, you should handle it differently as it contains additional `cinema_info` data with showtimes. Refer to the **Get Cinema Experience Details** documentation for proper handling.
{% endhint %}

## Next Steps

After fetching experience details, you can:

1. **Validate availability** - Check if `end_date` has passed before allowing purchases
2. **Get ticket types and pricing** - Use the tickets endpoint with the `experience_id`
3. **Book tickets** - Use the booking endpoint to reserve tickets (only if event hasn't ended)
4. **Share experience** - Use the `slug` from business object to create shareable links
5. **Get directions** - Use the `address` object to integrate with maps services

## Related Endpoints

* **Get List of Experiences** - Browse all experiences with filtering
* **Get Ticket Types** - Fetch available ticket types for this experience
* **Create Booking** - Book tickets for this experience
* **Get Cinema Experience Details** - For cinema-specific experiences
