Entwickler
Ihre Daten gehören Ihnen. Lesen und ändern Sie sie über die GraphQL-API und erhalten Sie einen signierten Webhook, sobald etwas passiert.
API-Tokens
Erstellen Sie im Kontrollzentrum unter Daten & Integrationen ein Token und legen Sie fest, was es lesen oder ändern darf. Senden Sie es als Bearer-Token an den /graphql-Endpunkt Ihres Unternehmens. Das vollständige Schema finden Sie unter /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 } } } }"}'Scopes
Ein Token trägt die Scopes, die Sie wählen. Berichte und Einstellungen sind nur lesbar, jeder andere Bereich hat einen Lese- und einen Schreib-Scope. Die Rolle der Person, die das Token erstellt hat, begrenzt weiterhin, worauf es zugreifen kann.
- 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
Webhooks
Jede Zustellung enthält einen Appointier-Signature-Header mit einem Zeitstempel und einem HMAC-SHA256 aus Zeitstempel und unverändertem Body, berechnet mit dem Secret Ihres Endpunkts. Weisen Sie alles ab, was älter als fünf Minuten ist.
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));
}Ereignisse
- 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
Eine fehlgeschlagene Zustellung wird nach 1 Minute, 5 Minuten, 30 Minuten, 2 Stunden und 12 Stunden wiederholt. Nach 10 Fehlschlägen in Folge wird der Endpunkt pausiert, und der Inhaber erhält eine E-Mail. Jede Zustellung lässt sich aus dem Protokoll erneut senden.
Vollständiger Export
Inhaber können eine ZIP-Datei anfordern, die jede Tabelle als CSV und JSON Lines enthält, dazu Fotos, unterschriebene Formulare, Notiz-PDFs und ein Manifest mit Zeilenzahlen. Der Link kommt per E-Mail und gilt 24 Stunden.
- customers
- appointments
- catalog
- staff
- locations
- packages
- memberships
- gift_cards
- forms
- notes
- products
- sales
- invoices
- payments
- notifications
- audits
Dieselbe ZIP-Datei kann jeden Tag oder jede Woche an einen Amazon S3 Bucket, einen S3-kompatiblen Speicher oder einen SFTP-Host geliefert werden.
Ratenlimits
Jedes Token kann 600 Anfragen pro Minute stellen, und jede Antwort enthält X-RateLimit-Limit und X-RateLimit-Remaining.