Dla programistów
Twoje dane należą do Ciebie. Odczytuj je i zmieniaj przez API GraphQL i otrzymuj podpisany webhook, gdy coś się wydarzy.
Tokeny API
Utwórz token w Panelu sterowania w sekcji Dane i integracje i wybierz, co może odczytywać lub zmieniać. Wyślij go jako token Bearer do punktu końcowego /graphql swojej firmy. Pełny schemat znajdziesz pod adresem /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 } } } }"}'Zakresy
Token ma zakresy, które wybierzesz. Raporty i ustawienia są tylko do odczytu, a każdy inny obszar ma zakres odczytu i zapisu. Uprawnienia osoby, która utworzyła token, nadal ograniczają to, do czego token sięgnie.
- 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
Webhooki
Każda dostawa zawiera nagłówek Appointier-Signature ze znacznikiem czasu i HMAC-SHA256 z tego znacznika i surowej treści, wyliczonym przy użyciu sekretu Twojego punktu końcowego. Odrzucaj wszystko, co jest starsze niż pięć minut.
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));
}Zdarzenia
- 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
Nieudana dostawa jest ponawiana po 1 minucie, 5 minutach, 30 minutach, 2 godzinach i 12 godzinach. Po 10 kolejnych niepowodzeniach endpoint jest wstrzymywany, a właściciel dostaje e-mail. Każdą dostawę można wysłać ponownie z dziennika.
Pełny eksport
Właściciele mogą zażądać pliku ZIP z każdą tabelą w CSV i JSON Lines, a do tego zdjęciami, podpisanymi formularzami, PDF-ami notatek i manifestem z liczbą wierszy. Link przychodzi e-mailem i działa 24 godziny.
- customers
- appointments
- catalog
- staff
- locations
- packages
- memberships
- gift_cards
- forms
- notes
- products
- sales
- invoices
- payments
- notifications
- audits
Ten sam plik ZIP może trafiać co dzień lub co tydzień do bucketa Amazon S3, magazynu zgodnego z S3 lub hosta SFTP.
Limity zapytań
Każdy token może wysłać 600 żądań na minutę, a każda odpowiedź zawiera nagłówki X-RateLimit-Limit i X-RateLimit-Remaining.