Integration recipes
End-to-end examples for common integration patterns. Each one is a complete, copy-pasteable starting point.
No-code
Zapier — your studio in 5,000+ apps
The fastest way to wire TattooBooking into the tools your studio already uses. Available at Solo plan and up.
- Visit zapier.com/apps/tattoobooking (live after marketplace review).
- Click Connect a new account. You'll be redirected to TattooBooking to approve the connection.
- Pick a trigger (e.g., New Appointment) and an action in the target app (e.g., Add row to Google Sheet).
- Test and turn on the Zap.
Triggers available: New Appointment, Appointment Cancelled, New Lead, New Client, New Form Submission.
Actions: Create Client, Find or Create Client, Create Lead.
Searches: Find Client by Email.
Make.com (Integromat)
Use the "Webhooks by Make" trigger. Paste your scenario's webhook URL into TattooBooking's POST /v1/webhook_endpoints:
{
"url": "https://hook.us1.make.com/abcdef...",
"events": ["appointment.created", "lead.created"]
}n8n
Same pattern — use the "Webhook" node in n8n, copy the URL it generates, and POST it to /v1/webhook_endpoints. Add a "Crypto" node before the rest of your workflow to verify theTattooBooking-Signature header.
Code recipes
Sync appointments to Google Calendar
If you're building this for a single tenant: use an API key and the Google Calendar API directly.
- Subscribe to
appointment.createdandappointment.rescheduled. - On each delivery, call
calendar.events.insertwith the start/end times. - Use the
idon the envelope as a stable idempotency key to dedupe.
Pipe new leads to Mailchimp
- Subscribe to
lead.created. - On each delivery:
GET /v1/clients/{client_id}to enrich the lead with full client info. - Call
mailchimp.lists.addListMemberwith the email + tags.
Send form submissions to Notion
- Subscribe to
form_submission.created. - For each delivery, the payload includes the full
submissionDataJSON object — POST it tonotion.pages.createas a new database row.
Build a custom Slack bot for new bookings
Webhook → Slack incoming webhook URL. The webhooks doc includes a complete Node.js signature-verifier — slot it into Slack's incoming-webhook code and ship.
Connect GHL (GoHighLevel) bidirectionally
The platform already syncs with GHL when a tenant connects via the admin settings — no custom code needed. If you need a different pattern, use the OAuth flow + the ghl_appointment_id field exposed on the Appointment DTO to correlate records.
AI phone agent (Bland.ai, Vapi, etc.)
API key auth + a thin Fastify/Express handler:
// When the phone agent collects an inquiry:
const client = await tb.clients.findOrCreate({ email, phone, firstName, lastName });
const idea = await tb.ideas.create({ clientId: client.id, description: transcript });
const lead = await tb.leads.create({ clientId: client.id, priority: 'high' });Embed scheduling in your own site
For now, link out to https://book.tattoobooking.com/{artistSlug}/book/{eventTypeSlug} — both slugs are exposed on /v1/event_types. A proper embed widget is on the roadmap.