background
Simpli Logo

Simpli API Documentation

Technical reference for publicly accessible organizer and collection endpoints.

Public API Reference

Organizers API

Public organizer feed with published events, tickets, and sessions for one organizer.

Endpoint

GET/api/organizer/{organizerId}

Auth: No auth required

Path Parameters

NameTypeRequiredDescription
organizerIdstring (GUID)YesOrganizer ID (GUID) from Simpli. This is shown inside the organizer profile settings API section.

Request Example

curl -X GET https://simpli.events/api/organizer/{organizerId}

JavaScript Example

const response = await fetch(
  'https://simpli.events/api/organizer/550e8400-e29b-41d4-a716-446655440000'
);

if (!response.ok) {
  throw new Error(`API request failed (${response.status})`);
}

const organizer = await response.json();

// Use endTime to determine if events are still upcoming.
const upcomingEvents = organizer.events.filter(
  (event) => event.endTime !== null && event.endTime > Date.now()
);

Status Codes

200

Organizer payload returned successfully.

404

Organizer not found.

500

Server error.

Typed Response Schema

type OrganizerApiResponse = {
  id: string; // GUID
  name: string;
  link: string;
  events: Array<{
    id: string; // GUID
    name: string;
    description: string;
    startTime: number | null;
    endTime: number | null;
    picture: string | null;
    link: string;
    address: string | null;
    onlineLink: string | null;
    createdAt: number;
    recurring: boolean;
    tickets: Array<{
      id: string; // GUID
      name: string;
      price: number | null;
      quantity: number | null;
      available: boolean;
      hidden: boolean;
      ticketType: 'Paid' | 'Free' | 'Donation' | 'PWYC';
      minimumPrice: number | null;
      unlimited?: boolean;
      customURL: string | null;
    }>;
    sessions: Array<{
      id: string; // GUID
      eventId: string; // GUID
      startTime: number;
      endTime: number;
      hide?: boolean;
    }>;
  }>;
};

Error Responses

404 - Organizer ID does not exist.

{
  "error": "Organizer not found"
}

500 - Database query fails or an unexpected server error occurs.

{
  "error": "Internal server error"
}

Response Example

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Campus Events Team",
  "link": "https://simpli.events/o/campus-events",
  "events": [
    {
      "id": "0f8fad5b-d9cb-469f-a165-70867728950e",
      "name": "Spring Mixer",
      "description": "<p>Welcome to the spring mixer.</p>",
      "startTime": 1773043200000,
      "endTime": 1773050400000,
      "picture": "https://...",
      "link": "https://simpli.events/e/spring-mixer",
      "address": "1455 De Maisonneuve Blvd W",
      "onlineLink": null,
      "createdAt": 1772500000000,
      "recurring": false,
      "tickets": [
        {
          "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "name": "General Admission",
          "price": 2500,
          "quantity": 150,
          "available": true,
          "hidden": false,
          "ticketType": "Paid",
          "minimumPrice": null,
          "unlimited": false,
          "customURL": null
        }
      ],
      "sessions": [
        {
          "id": "9f4d33e1-e7f3-42cf-a645-9d458b2f4f9f",
          "eventId": "0f8fad5b-d9cb-469f-a165-70867728950e",
          "startTime": 1773043200000,
          "endTime": 1773046800000,
          "hide": false
        }
      ]
    }
  ]
}

Response Properties

PathTypeDescription
idstringOrganizer ID.
namestringOrganizer display name.
linkstringOrganizer public profile URL.
eventsarray<Event>Published events sorted by startTime ascending.
events[].idstringEvent ID.
events[].namestringEvent title.
events[].descriptionstringEvent description HTML string.
events[].startTimenumber | nullEvent start in milliseconds.
events[].endTimenumber | nullEvent end in milliseconds.
events[].picturestring | nullEvent image URL.
events[].linkstringPublic event page URL.
events[].addressstring | nullIn-person event address when set.
events[].onlineLinkstring | nullOnline event URL when set.
events[].createdAtnumberEvent creation time in milliseconds.
events[].recurringbooleanWhether the event is recurring.
events[].ticketsarray<Ticket>Tickets attached to the event.
events[].tickets[].idstringTicket ID.
events[].tickets[].namestringTicket name.
events[].tickets[].pricenumber | nullTicket price in cents.
events[].tickets[].quantitynumber | nullMax ticket quantity if limited.
events[].tickets[].availablebooleanCurrent ticket availability flag.
events[].tickets[].hiddenbooleanWhether ticket is hidden on event page.
events[].tickets[].ticketType"Paid" | "Free" | "Donation" | "PWYC"Ticket payment type.
events[].tickets[].minimumPricenumber | nullMinimum price for flexible tickets.
events[].tickets[].unlimitedboolean | undefinedLegacy unlimited flag (still returned).
events[].tickets[].customURLstring | nullOptional per-ticket URL slug.
events[].sessionsarray<Session>Sessions attached to the event.
events[].sessions[].idstringSession ID.
events[].sessions[].eventIdstringParent event ID.
events[].sessions[].startTimenumberSession start in milliseconds.
events[].sessions[].endTimenumberSession end in milliseconds.
events[].sessions[].hideboolean | undefinedOptional visibility flag for session.

Notes

  • When deciding if an event is past/upcoming, always use endTime.
  • Timestamps are numbers in milliseconds.
  • Only events with status Published are returned.