Pembangun

Data anda milik anda. Baca dan ubahnya melalui API GraphQL, dan terima webhook bertandatangan apabila sesuatu berlaku.

Token API

Cipta token dalam Panel kawalan di bawah Data & integrasi, dan pilih apa yang boleh dibaca atau diubahnya. Hantarkannya sebagai token Bearer ke endpoint /graphql perniagaan anda. Skema penuh terdapat 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 } } } }"}'

Skop

Token membawa skop yang anda pilih. Laporan dan tetapan hanya boleh dibaca; setiap bahagian lain mempunyai skop baca dan skop tulis. Peranan orang yang mencipta token masih menghadkan apa yang boleh dicapainya.

  • 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 penghantaran membawa pengepala Appointier-Signature dengan cap masa dan HMAC-SHA256 bagi cap masa serta badan mentah, dikunci dengan rahsia endpoint anda. Tolak apa-apa yang lebih lama daripada lima minit.

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

Penghantaran yang gagal dicuba semula selepas 1 minit, 5 minit, 30 minit, 2 jam dan 12 jam. Selepas 10 kegagalan berturut-turut, titik akhir dijeda dan pemilik menerima e-mel. Mana-mana penghantaran boleh dimainkan semula dari log.

Eksport penuh

Pemilik boleh meminta ZIP dengan setiap jadual dalam CSV dan JSON Lines, serta foto, borang bertandatangan, PDF nota dan manifes dengan jumlah baris. Pautan tiba melalui e-mel dan sah selama 24 jam.

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

ZIP yang sama boleh dihantar setiap hari atau setiap minggu ke baldi Amazon S3, stor serasi S3 atau hos SFTP.

Had kadar

Setiap token boleh membuat 600 permintaan seminit, dan setiap respons membawa X-RateLimit-Limit dan X-RateLimit-Remaining.