Developer

Data Anda milik Anda. Baca dan ubah lewat API GraphQL, dan terima webhook bertanda tangan saat sesuatu terjadi.

Token API

Buat token di Panel kontrol pada Data & integrasi, lalu pilih apa yang boleh dibaca atau diubahnya. Kirim sebagai token Bearer ke endpoint /graphql bisnis Anda. Skema lengkapnya ada di /graphql/schema.

curl https://your-business.appointier.com/graphql \
  -H "Authorization: Bearer $APPOINTIER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"{ customers(first: 5) { edges { node { firstName lastName email } } } }"}'

Cakupan

Token membawa cakupan yang Anda pilih. Laporan dan pengaturan hanya bisa dibaca; setiap area lain punya cakupan baca dan tulis. Peran orang yang membuat token tetap membatasi apa yang bisa dijangkau.

  • read
  • write
  • customers.read
  • customers.write
  • appointments.read
  • appointments.write
  • catalog.read
  • catalog.write
  • packages.read
  • packages.write
  • sales.read
  • sales.write
  • invoices.read
  • invoices.write
  • reports.read
  • settings.read

Webhook

Setiap pengiriman membawa header Appointier-Signature berisi stempel waktu dan HMAC-SHA256 dari stempel waktu serta isi mentah, dengan kunci berupa secret endpoint Anda. Tolak apa pun yang lebih lama dari lima menit.

import crypto from "node:crypto";

export function verify(body, header, secret, toleranceSeconds = 300) {
  const parts = Object.fromEntries(header.split(",").map((part) => part.split("=")));
  const age = Math.abs(Date.now() / 1000 - Number(parts.t));
  if (age > toleranceSeconds) return false;

  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${parts.t}.${body}`)
    .digest("hex");

  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

Peristiwa

  • appointment.created
  • appointment.updated
  • appointment.canceled
  • appointment.completed
  • appointment.no_show
  • customer.created
  • customer.updated
  • sale.completed
  • sale.voided
  • package.sold
  • package.redeemed
  • package.reversed
  • invoice.paid

Pengiriman yang gagal dicoba ulang setelah 1 menit, 5 menit, 30 menit, 2 jam, dan 12 jam. Setelah 10 kegagalan berturut-turut, endpoint dijeda dan pemilik menerima email. Pengiriman mana pun bisa dikirim ulang dari log.

Ekspor lengkap

Pemilik bisa meminta ZIP berisi setiap tabel dalam CSV dan JSON Lines, plus foto, formulir bertanda tangan, PDF catatan, dan manifes dengan jumlah baris. Tautannya dikirim lewat email dan berlaku 24 jam.

  • customers
  • appointments
  • catalog
  • staff
  • locations
  • packages
  • memberships
  • gift_cards
  • forms
  • notes
  • products
  • sales
  • invoices
  • payments
  • notifications
  • audits

ZIP yang sama bisa dikirim setiap hari atau setiap minggu ke bucket Amazon S3, penyimpanan kompatibel S3, atau host SFTP.

Batas permintaan

Setiap token bisa membuat 600 permintaan per menit, dan setiap respons membawa X-RateLimit-Limit dan X-RateLimit-Remaining.