Prerequisites
- Stripe connected at the tenant or local-center level (see Stripe integration).
- An admin Api-Token with at least
HR_LOCALon 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 inDRAFT.
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 aProduct 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 fromDRAFT to PUBLISHED and makes the landing page reachable at https://acme.orgo.space/events/{slug}.
GET /api/v1/get_public_event_anonymous/{uuid} — no auth required.
Step 4 — Register an attendee
Two paths: existing User or an external Contact.Path A — existing User
Path B — external attendee (non-member)
For non-Users, invite them by email — Orgo creates aContact for them on confirmation:
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 theEventAttend 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
My event published but the landing page returns 404
My event published but the landing page returns 404
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.The Stripe checkout returns 'no account configured'
The Stripe checkout returns 'no account configured'
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.How do I sell free tickets that still require registration?
How do I sell free tickets that still require registration?
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.Can attendees buy multiple tickets in one transaction?
Can attendees buy multiple tickets in one transaction?
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
- Send a newsletter campaign — announce the event to your audience
- Handle webhooks — react to
event_attend.createdto sync registrations into your CRM - Process payments — handle refunds and failed payments

