Skip to main content
This walkthrough creates a ticketed event, attaches paid ticket types via Stripe, publishes the landing page, and processes a registration. The full chain covers the Event, Product, and EventAttend resources. Who is this for: integrations that need to provision events programmatically (recurring training, partner-organized meetups, automated festival setup) or surface Orgo’s ticketing into a custom site.

Prerequisites

  • Stripe connected at the tenant or local-center level (see Stripe integration).
  • An admin Api-Token with at least HR_LOCAL on the relevant local center.

Step 1 — Create the event as a draft

Drafts are invisible to members and the public. You can edit freely while in DRAFT.
The response carries both an integer id (used in legacy paths) and a uuid (used in modern paths like /api/v1/events/{uuid}). Keep the uuid for the rest of the flow.

Step 2 — Create ticket-type products

A “ticket type” in Orgo is a Product attached to the event. Create one per pricing tier (general admission, member, early-bird, etc).
customMinPrice is in cents — 2500 is $25.00. Set hasCustomPriceValue: true if you want to allow attendees to pay more than the minimum (pay-what-you-want with a floor). Repeat for each ticket type. Each gets its own uuid and one ProductPrice record.

Step 3 — Publish the event

Publishing flips the event from DRAFT to PUBLISHED and makes the landing page reachable at https://acme.orgo.space/events/{slug}.
After publishing, public callers can fetch the event via GET /api/v1/get_public_event_anonymous/{uuid} — no auth required.
Two publish endpoints exist: /api/v1/events_publish/{uuid} (the standard publish — flips status and notifies invitees if configured) and /api/v1/event-go-publish/{uuid} (used by the “Go” landing-page editor). Use the first one from server-to-server integrations.

Step 4 — Register an attendee

Two paths: existing User or an external Contact.

Path A — existing User

Response includes the registration ID and a QR code (base64) that doubles as the check-in token.

Path B — external attendee (non-member)

For non-Users, invite them by email — Orgo creates a Contact for them on confirmation:
The recipient receives a magic link they can open without an Orgo account.

Step 5 — Collect payment (Stripe checkout)

For paid tickets, the registration triggers a Stripe checkout session. Free events skip this step. The checkout URL returned in the EventAttend response (or fetched on demand for the same attendee) leads to Stripe’s hosted page. After payment, Stripe webhooks /api/v1/stripe-webhook and Orgo flips the ProductPayment to SUCCESS. You can also subscribe to the product_payment.updated webhook to know when payment clears — see Handle webhooks.

Check-in on the day

At the venue, scan the attendee’s QR code or look them up by name. Mark them attended:

Common gotchas

Three causes: (1) isPublic is false — flip to true; (2) the tenant uses a custom domain and your slug collides with an existing route; (3) the event’s dateTimeEnd is already in the past, in which case the public listing hides it.
Stripe needs to be connected at the level the event’s unit resolves to. If the event is on a local center, that local center needs a Stripe-connected account. Tenant-level Stripe doesn’t cascade automatically.
Set hasEventTicketing: true, requiresRegistrationForm: true, and create a Product with customMinPrice: 0. Stripe is bypassed for zero-amount tickets but the registration still requires confirmation.
Yes — use POST /api/v1/event_attends/{id}/guest-tickets after the main registration to add up to N guests. Each guest gets their own QR code.

What to do next