Developers

API and webhooks

Connect Gaurify Meet to the tools you already use. Read your bookings, offer your times, and hear about every booking the moment it happens.

API keys

Create a key in the app: Settings, Developer, Create API key. You see it once, so copy it then. Send it on every call:

Authorization: Bearer gm_live_...

Every call is about the key's owner only. A key never reaches anyone else's data. Turn a key off any time in the same place.

Endpoints

All paths start at https://meet.gaurifyhq.com and answer in JSON.

GET/api/v1/me

Who the key belongs to, and their booking page link.

GET/api/v1/bookings

Your meetings, newest first. Add ?limit=3 for just a few.

GET/api/v1/availability

Open times. Send duration in minutes, and from and to as ISO times.

POST/api/v1/bookings

Book a meeting on your calendar. Send start, duration, name and email.

POST/api/v1/hooks

Send one event to a URL. Body: target_url and event. Returns its id.

GET/api/v1/hooks

Your hooks and webhooks, with how each one is doing.

DELETE/api/v1/hooks/{id}

Stop sending to that URL.

GET/api/v1/hooks/sample

Up to 3 recent bookings, shaped exactly like a delivery. Add ?event= to pick the event.

Events

Each delivery is one JSON POST. id is new for every delivery. data.id is the booking.

{
  "id": "6f1c0b3e-2a7d-4c55-9a51-7f0f9d2a8e10",
  "event": "booking.created",
  "created_utc": "2026-10-07T09:30:00.000Z",
  "data": {
    "id": "b7d2...",
    "start_utc": "2026-10-09T06:00:00.000Z",
    "end_utc": "2026-10-09T06:30:00.000Z",
    "guest_name": "Asha Rao",
    "guest_email": "asha@example.com",
    "mode": "meet",
    "meet_url": "https://meet.google.com/abc-defg-hij"
  }
}

A move adds previous_start_utc and by (guest or host). A payment adds amount in the smallest unit, currency and payment_id.

Check the signature

Every delivery carries X-Gaurify-Signature: the HMAC-SHA256 of the raw body, in hex, made with your secret. X-Gaurify-Event names the event. Check it before you trust the body:

import crypto from "node:crypto";

function isFromGaurify(rawBody, signature, secret) {
  const want = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
  return signature.length === want.length &&
    crypto.timingSafeEqual(Buffer.from(want), Buffer.from(signature));
}

Answer with any 2xx within 5 seconds. After 20 failures in a row we pause the hook and tell you in the app.

Use with Zapier or Make: REST hooks

Zapier and Make subscribe a URL when a Zap or scenario turns on, and remove it when it turns off. Map them like this:

If your hook URL answers 410 Gone, we remove that hook for you.

Questions

Write to hello@gaurifyhq.com. We read every note.