Zensy
Wellbeing, curated
Back
Reference · v1

The Zensy API

A clean REST surface for events, bookings, and payments. JSON in, JSON out. Signed webhooks. Bearer auth. Rate limits are generous by default and can be tuned per key.

Auth
OAuth 2.0 · Bearer tokens · scoped per role
Keys
Publishable & secret keys · rotate any time
Limits
300 req/min · 10k daily · higher on request
Quick start
curl https://api.zensy.ch/v1/events \
  -H "Authorization: Bearer zsy_live_5f8a•••" \
  -H "Accept: application/json"

Auth

  • POST/v1/auth/sessionExchange an OAuth code for an access token.
  • GET/v1/auth/meReturn the currently authenticated account.

Events

  • GET/v1/eventsList published events with filters.
  • GET/v1/events/{id}Fetch a single event with facilitator & reviews.
  • POST/v1/eventsCreate a new event (facilitator scope).
  • PATCH/v1/events/{id}Update event details or status.
  • DELETE/v1/events/{id}Delete a draft or suspended event.

Bookings

  • GET/v1/bookingsList the caller's bookings.
  • POST/v1/bookingsCreate a booking against an event.
  • POST/v1/bookings/{id}/cancelCancel a confirmed booking.

Payments

  • POST/v1/checkout/sessionsStart a hosted checkout session.
  • POST/v1/webhooks/paymentsSigned webhook: payment.succeeded, payment.refunded.

Admin

  • GET/v1/admin/metricsPlatform KPIs (GMV, MAU, take rate).
  • PATCH/v1/admin/events/{id}/statusPublish or suspend a listing.

Example response

GET /v1/events/e1 · 200 OK
{
  "id": "e1",
  "title": "Sunrise Vinyasa by the Lake",
  "category": "Yoga",
  "language": "English",
  "price": { "amount": 38, "currency": "CHF" },
  "date": "2026-07-04T05:30:00Z",
  "duration_min": 75,
  "location": { "name": "Seebad Enge", "lat": 47.361, "lng": 8.535 },
  "facilitator": { "id": "f1", "name": "Sofia Rinaldi", "verified": true },
  "capacity": 20,
  "seats_left": 14,
  "rating": { "avg": 4.9, "count": 27 }
}