Developers

Build on Meetrays.

A clean, REST-flavored HTTP API. Bearer-token auth, JSON in, JSON out. Webhooks for everything that happens on a booking.

Bearer auth

Generate a key from your dashboard. Send it as Authorization: Bearer ... on every request.

REST endpoints

JSON in, JSON out. Standard verbs. No GraphQL, no SDK lock-in. Curl-ready.

Webhooks

booking.created, booking.cancelled, booking.rescheduled, no_show.flagged. Signed payloads.

Quickstart

Create a booking in three lines.

Same response shape as our internal calls. No SDK required — ship it from anywhere that speaks HTTP.

# List your bookings
curl https://meetrays.com/api/v1/bookings \
  -H "Authorization: Bearer $MEETRAYS_KEY"

# Get one booking
curl https://meetrays.com/api/v1/bookings/<uid> \
  -H "Authorization: Bearer $MEETRAYS_KEY"

Reference

Endpoints.

Auth

GET/api/v1/meSanity-check the bearer token — returns the owner of the key.

Bookings

GET/api/v1/bookingsList bookings. Filters: ?status=, ?limit=, ?cursor=.
GET/api/v1/bookings/{uid}Fetch a single booking by its public uid.

Event types

GET/api/v1/event-typesList your personal event types.

Webhooks

Real-time events.

Add an endpoint in Settings → Webhooks, pick the events you care about, and we'll POST signed JSON payloads to your URL.

booking.created

A new booking was made.

booking.confirmed

Pending → confirmed (manual review flows).

booking.rescheduled

Time changed; payload includes old + new.

booking.cancelled

Cancelled by attendee or host.

booking.completed

Meeting end time has passed without cancellation.

Verifying signatures

Every delivery includes X-Meetrays-Signature and X-Meetrays-Event. The signature is sha256=<hmac> of the raw body using the signing secret shown next to each endpoint in the dashboard.

// Node.js — verify on receive
import { createHmac, timingSafeEqual } from "node:crypto"

function verify(secret, rawBody, header) {
  const expected = "sha256=" + createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex")
  return timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(header ?? "")
  )
}

Already have an account?

Generate a key from Settings → API keys and you're live. Otherwise email us to get an invite.