> ## Documentation Index
> Fetch the complete documentation index at: https://learn.social.plus/llms.txt
> Use this file to discover all available pages before exploring further.

# Events & Activities

> Create structured events with RSVP, attendance tracking, event discovery, and calendar integration.

<Info>**SDK v7.x** · Last verified March 2026 · iOS · Android · Web</Info>

<Accordion title="Speed run — just the code" icon="forward">
  ```typescript theme={null}
  // 1. Create an event
  const { data: event } = await EventRepository.createEvent({
    title: 'Community Meetup', description: 'Monthly gathering',
    startDate: '2026-04-01T18:00:00Z', endDate: '2026-04-01T20:00:00Z',
    targetType: 'community', targetId: 'communityId',
  });

  // 2. RSVP — called on the event linked object
  const rsvp = await event.createRSVP(AmityEventResponseStatus.Going);

  // 3. Query upcoming events
  EventRepository.getEvents({ status: 'upcoming', limit: 10 },
    ({ data }) => { /* render */ }
  );
  ```

  Full walkthrough below ↓
</Accordion>

<Tip>
  **Platform note** — code samples below use TypeScript. Every method has an equivalent in the iOS (Swift), Android (Kotlin), and Flutter (Dart) SDKs — see the linked SDK reference in each step.
</Tip>

Events give communities and users a way to organize real-world and virtual activities. social.plus supports three event types — **livestream**, **external link** (virtual), and **in-person** — each with RSVP tracking, attendee lists, and push notification reminders.

<CardGroup cols={3}>
  <Card title="Livestream" icon="video">
    Go live directly within the app — attendees watch and chat in real time.
  </Card>

  <Card title="Virtual (External Link)" icon="link">
    Redirect attendees to Zoom, Google Meet, or any external URL.
  </Card>

  <Card title="In-Person" icon="location-dot">
    Physical gatherings with an address field and map support.
  </Card>
</CardGroup>

This guide covers creating events, managing RSVPs, querying attendees, admin console management, and building an event discovery experience.

```mermaid theme={null}
graph TD
    A[User creates event] --> B[Event published to community]
    B --> C[Members see event in feed or calendar]
    C --> D{Member response}
    D -->|Going| E[RSVP: going]
    D -->|Not going| F[RSVP: not_going]
    D -->|Interested| G[RSVP: interested]
    E & G --> H[Attendee list grows]
    H --> I[Event creator sees attendance stats]
    B --> J[Push notification to community members]

    classDef action fill:#e1f5fe,stroke:#0288d1,color:#01579b
    classDef decision fill:#fff8e1,stroke:#f9a825,color:#f57f17
    classDef process fill:#f3e5f5,stroke:#7b1fa2,color:#4a148c
    classDef outcome fill:#e8f5e9,stroke:#388e3c,color:#1b5e20

    class A action
    class D decision
    class B,C,E,F,G,J process
    class H,I outcome
```

<Info>
  **Prerequisites**: SDK installed and authenticated. A `communityId` is required — events are always attached to a community.

  **Also recommended:** Complete [Community Platform](/use-cases/social/community-platform) first — events live inside communities.
</Info>

<Note>
  **After completing this guide you'll have:**

  * Event creation with title, description, date/time, and location
  * RSVP (going / not going) flow with attendee list
  * Events discoverable in community feeds and a dedicated events list
</Note>

***

## Quick Start: Create an Event

```typescript TypeScript theme={null}
import {
  AmityEventOriginType,
  AmityEventType,
  EventRepository,
} from '@amityco/ts-sdk';

const { data: event } = await EventRepository.createEvent({
  title: 'Community Workshop',
  description: 'A live workshop for community members.',
  type: AmityEventType.Virtual,
  startTime: '2026-08-01T09:00:00.000Z',
  endTime: '2026-08-01T10:00:00.000Z',
  originType: AmityEventOriginType.Community,
  originId: communityId,
  externalUrl: 'https://example.com/live',
  tags: ['workshop'],
  metadata: { timezone: 'UTC' },
});

showSuccessMessage(event.eventId);
```

***

## Step-by-Step Implementation

<Steps>
  <Step title="Query events in a community">
    Query events for a specific community, filtered by status and sort order. Results are returned as a live collection.

    ```typescript TypeScript theme={null}
    import { EventRepository, AmityEventOriginType, AmityEventSortOption, AmityEventOrderOption } from '@amityco/ts-sdk';

    const unsubscribe = EventRepository.getEvents(
      {
        originType: AmityEventOriginType.Community,
        originId: 'community-123',
        sortBy: AmityEventSortOption.StartTime,
        orderBy: AmityEventOrderOption.Ascending,
      },
      ({ data: events, loading }) => {
        if (events) {
          events.forEach(event => console.log(event.title, event.startTime));
        }
      },
    );
    ```

    Full reference → [Manage Events](/social-plus-sdk/social/events/manage-events)
  </Step>

  <Step title="RSVP to an event">
    Let users respond with `going`, `not_going`, or `interested`. Users can change their RSVP at any time before the event starts.

    ```typescript TypeScript theme={null}
    import { EventRepository, AmityEventResponseStatus } from '@amityco/ts-sdk';

    const unsubscribe = EventRepository.getEvent(
      'event-123',
      async ({ data: event }) => {
        if (event) {
          const rsvp = await event.createRSVP(AmityEventResponseStatus.Going);
          console.log('RSVP:', rsvp?.status);
        }
      },
    );
    ```

    Full reference → [Event RSVP](/social-plus-sdk/social/events/event-rsvp)
  </Step>

  <Step title="Query event attendees">
    Query the list of attendees filtered by RSVP status. Use this to show who's going, display an attendee count, or build an attendee list screen.

    ```typescript TypeScript theme={null}
    import { EventRepository, AmityEventResponseStatus } from '@amityco/ts-sdk';

    const unsubscribe = EventRepository.getEvent('event-123', ({ data: event }) => {
      if (event) {
        event.getRSVPs(
          { status: AmityEventResponseStatus.Going },
          ({ data: responses }) => {
            if (responses) {
              responses.forEach(rsvp => console.log('Attendee:', rsvp.user?.displayName));
            }
          },
        );
      }
    });
    ```

    Full reference → [Event RSVP](/social-plus-sdk/social/events/event-rsvp)
  </Step>

  <Step title="Update and delete events">
    Event creators and community moderators can update event details (title, description, time, location) or delete events entirely.

    ```typescript TypeScript theme={null}
    import { EventRepository } from '@amityco/ts-sdk';

    // Update an event
    const { data: updated } = await EventRepository.updateEvent('event-123', {
      title: 'Updated Event Title',
      description: 'New details for the event',
      startTime: '2025-04-20T15:00:00Z',
    });

    // Delete an event
    await EventRepository.deleteEvent('event-123');
    ```

    Full reference → [Manage Events](/social-plus-sdk/social/events/manage-events)
  </Step>
</Steps>

***

## Admin Console: Manage & Monitor Events

Admins can create, view, and manage all events across communities from **Admin Console → Events**.

### Events Dashboard

<Frame caption="Events management — view all events with status, type, creator, attendee count, and dates">
  <img src="https://mintcdn.com/social-b97141fb/zvKX6W42uLelZWz_/images/analytics-and-moderation/console-events-management.png?fit=max&auto=format&n=zvKX6W42uLelZWz_&q=85&s=91c51ded44204cf3de9e9335fab4fed0" alt="Admin Console events management table showing event titles, types, communities, creators, dates, and status" width="1440" height="900" data-path="images/analytics-and-moderation/console-events-management.png" />
</Frame>

The dashboard shows all events at a glance with filtering by **creator** and **status** (Upcoming, Ongoing, Ended). Columns include event title, type, community, creator, start/end dates, status, and attendee count.

### Create Events from Console

Click **Create event** to build events directly from the console — useful for official community events or marketing campaigns.

<Frame caption="Create event form — select community, set event name, thumbnail, description, dates, and type">
  <img src="https://mintcdn.com/social-b97141fb/zvKX6W42uLelZWz_/images/analytics-and-moderation/console-events-create.png?fit=max&auto=format&n=zvKX6W42uLelZWz_&q=85&s=c760d180326374f9bb80ed828b755def" alt="Admin Console create event form with community selector, event name, thumbnail upload, and scheduling fields" width="1440" height="900" data-path="images/analytics-and-moderation/console-events-create.png" />
</Frame>

The creation form covers:

* **Feed & account** — target community and creator identity
* **Event details** — name (60 chars), description (1,000 chars), optional 16:9 thumbnail
* **Schedule** — timezone-aware start and end date/time pickers
* **Event type** — Livestream, External Link (URL), or In-Person (address)

### Event Detail View

Click any event to see its detail page with three tabs:

<Frame caption="Event detail — Activities tab showing posts created within the event context">
  <img src="https://mintcdn.com/social-b97141fb/zvKX6W42uLelZWz_/images/analytics-and-moderation/console-events-detail.png?fit=max&auto=format&n=zvKX6W42uLelZWz_&q=85&s=3c6bab10c50d1c7bfb0c50780fd055aa" alt="Admin Console event detail page with Activities tab showing post count and status badges" width="1440" height="900" data-path="images/analytics-and-moderation/console-events-detail.png" />
</Frame>

| Tab            | What it shows                                                          |
| -------------- | ---------------------------------------------------------------------- |
| **Activities** | Posts and engagement tied to the event                                 |
| **Attendees**  | Users who RSVP'd — going, interested, not going                        |
| **Details**    | Full event config (community, schedule, type, address/link) — editable |

<Frame caption="Event detail — Details tab with editable event configuration">
  <img src="https://mintcdn.com/social-b97141fb/zvKX6W42uLelZWz_/images/analytics-and-moderation/console-events-detail-tab.png?fit=max&auto=format&n=zvKX6W42uLelZWz_&q=85&s=c4179e76c993fa32885784c8e994cfcf" alt="Admin Console event detail Details tab showing community, name, thumbnail, timezone, dates, and event type fields" width="1440" height="900" data-path="images/analytics-and-moderation/console-events-detail-tab.png" />
</Frame>

### Push Notification Configuration

Enable event-related push notifications in **Admin Console → Settings → Push notifications → Community event**.

<Frame caption="Push notification settings — toggle community event notifications (post created, reactions, approvals)">
  <img src="https://mintcdn.com/social-b97141fb/g7VmEe9XMeck-8PT/images/console-push-notifications-community-events.png?fit=max&auto=format&n=g7VmEe9XMeck-8PT&q=85&s=e9750c6a09261e4622d9a88853ea847e" alt="Admin Console push notification settings for community events showing toggles for post, reaction, approval, and review notifications" width="1280" height="900" data-path="images/console-push-notifications-community-events.png" />
</Frame>

<AccordionGroup>
  <Accordion title="Webhook: event lifecycle" icon="webhook">
    Receive `event.created`, `event.updated`, `event.rsvp.created`, and `event.rsvp.updated` webhook events to sync attendance data with an external calendar system, CRM, or trigger reminder emails.

    → [Webhook Events](/analytics-and-moderation/social+-apis-and-services/webhook-event)
  </Accordion>

  <Accordion title="Push notification: event reminders" icon="bell">
    Use webhooks to send reminder push notifications to RSVP'd attendees before an event starts. Trigger this from your backend when `event.startAt - 24h` is reached.

    → [Notifications guide](/use-cases/social/notifications-and-engagement)
  </Accordion>

  <Accordion title="Events management reference" icon="book">
    Full console documentation for events management including all field descriptions, event types, and status lifecycle.

    → [Console: Events Management](/analytics-and-moderation/console/management/events-management)
  </Accordion>
</AccordionGroup>

***

## Common Mistakes

<Warning>
  **Creating events without an end date** — Events without `endDate` appear as ongoing indefinitely. Always set both `startDate` and `endDate` for a clear timeline.
</Warning>

<Warning>
  **Displaying event times without timezone conversion** — The API stores dates in UTC. Always convert to the user's local timezone before rendering, or display the timezone label.

  ```typescript theme={null}
  // ❌ Bad — raw UTC string
  <span>{event.startDate}</span>

  // ✅ Good — localized
  <span>{new Date(event.startDate).toLocaleString()}</span>
  ```
</Warning>

<Warning>
  **Not refreshing RSVP counts after changes** — After a user RSVPs, other attendees' counts are stale. Use Live Collections or re-query after RSVP actions to keep counts accurate.
</Warning>

## Best Practices

<AccordionGroup>
  <Accordion title="Event discovery UX" icon="calendar-days">
    * Show upcoming events prominently in the community feed — pin an event post in the week before it starts
    * Add filtering: "This week", "This month", "Past events"
    * Show a map preview for in-person events with a location field
    * Display the RSVP counts prominently ("42 going · 18 interested") to create social proof

    <Frame caption="Past events page — mobile UI showing thumbnails, event types, and dates">
      <img src="https://mintcdn.com/social-b97141fb/NE54L1zuRTEoUFcq/images/past-event-page.png?fit=max&auto=format&n=NE54L1zuRTEoUFcq&q=85&s=b86ac9f7ae7806630147cc41c9dc8a62" alt="Mobile past events list with thumbnails, virtual and in-person badges, dates, and brand names" style={{ maxWidth: "40%", margin: "0 auto", display: "block" }} width="195" height="415" data-path="images/past-event-page.png" />
    </Frame>
  </Accordion>

  <Accordion title="RSVP workflow" icon="circle-check">
    * Send a confirmation in-app notification when a user RSVPs to an event
    * Allow users to change their RSVP up until the event starts
    * Send a reminder push notification 24h and 1h before the event to "going" attendees
    * After the event ends, ask attendees to leave a review or reaction
  </Accordion>

  <Accordion title="Timezone handling" icon="clock">
    * Always store event times in UTC and convert to local time for display
    * Show the timezone explicitly on event details (e.g., "3:00 PM PDT") to avoid confusion
    * For virtual events, show the time in both the creator's and viewer's timezone
  </Accordion>
</AccordionGroup>

***

<Tip>
  **Dive deeper**: [Events API Reference](/social-plus-sdk/social/events/overview) has full parameter tables, method signatures, and platform-specific details for every API used in this guide.
</Tip>

## Next Steps

<Card title="Your next step → Notifications & Engagement" icon="arrow-right" href="/use-cases/social/notifications-and-engagement">
  Events are live — now set up notifications so members get alerted about new events and RSVP reminders.
</Card>

Or explore related guides:

<CardGroup cols={3}>
  <Card title="Community Platform" href="/use-cases/social/community-platform" icon="users">
    Events are typically hosted within communities
  </Card>

  <Card title="Notifications & Engagement" href="/use-cases/social/notifications-and-engagement" icon="bell">
    Send event reminders and RSVP notifications
  </Card>

  <Card title="Build a Social Feed" href="/use-cases/social/build-a-social-feed" icon="rectangle-list">
    Surface upcoming events in the community feed
  </Card>
</CardGroup>
