Sviluppatori
I tuoi dati sono tuoi. Leggili e modificali tramite l'API GraphQL e ricevi un webhook firmato quando succede qualcosa.
Token API
Crea un token nel Pannello di controllo, in Dati e integrazioni, e scegli cosa può leggere o modificare. Invialo come token Bearer all'endpoint /graphql della tua attività. Lo schema completo è su /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 } } } }"}'Ambiti
Un token porta con sé gli ambiti che scegli. Report e impostazioni sono in sola lettura; ogni altra area ha un ambito di lettura e uno di scrittura. Il ruolo di chi ha creato il token limita comunque ciò che può raggiungere.
- 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
Ogni consegna include un header Appointier-Signature con un timestamp e un HMAC-SHA256 del timestamp e del corpo grezzo, calcolato con il segreto del tuo endpoint. Rifiuta tutto ciò che ha più di cinque minuti.
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));
}Eventi
- 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
Una consegna fallita viene ritentata dopo 1 minuto, 5 minuti, 30 minuti, 2 ore e 12 ore. Dopo 10 errori consecutivi l'endpoint viene sospeso e il titolare riceve un'e-mail. Qualsiasi consegna può essere rinviata dal registro.
Export completo
I titolari possono richiedere uno ZIP con ogni tabella in CSV e JSON Lines, più foto, moduli firmati, PDF delle note e un manifesto con il numero di righe. Il link arriva via e-mail e vale 24 ore.
- customers
- appointments
- catalog
- staff
- locations
- packages
- memberships
- gift_cards
- forms
- notes
- products
- sales
- invoices
- payments
- notifications
- audits
Lo stesso ZIP può essere consegnato ogni giorno o ogni settimana a un bucket Amazon S3, a un archivio compatibile con S3 o a un host SFTP.
Limiti di richieste
Ogni token può fare 600 richieste al minuto e ogni risposta include X-RateLimit-Limit e X-RateLimit-Remaining.