Desarrolladores
Sus datos son suyos. Léalos y modifíquelos a través de la API GraphQL, y reciba un webhook firmado cuando ocurra algo.
Tokens de API
Cree un token en el Panel de control, en Datos e integraciones, y elija qué puede leer o modificar. Envíelo como token Bearer al endpoint /graphql de su negocio. El esquema completo está en /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 } } } }"}'Permisos
Un token lleva los permisos que elijas. Los informes y los ajustes son de solo lectura; cada una de las demás áreas tiene un permiso de lectura y otro de escritura. El rol de la persona que creó el token sigue limitando lo que puede alcanzar.
- 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
Cada entrega incluye una cabecera Appointier-Signature con una marca de tiempo y un HMAC-SHA256 de la marca de tiempo y el cuerpo sin procesar, calculado con el secreto de su endpoint. Rechace todo lo que tenga más de cinco minutos.
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));
}Eventos
- 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 entrega fallida se reintenta al cabo de 1 minuto, 5 minutos, 30 minutos, 2 horas y 12 horas. Tras 10 fallos consecutivos, el endpoint se pausa y el propietario recibe un email. Cualquier entrega puede reenviarse desde el registro.
Exportación completa
Los propietarios pueden pedir un ZIP con todas las tablas en CSV y JSON Lines, además de fotos, formularios firmados, notas en PDF y un manifiesto con el número de filas. El enlace llega por email y funciona 24 horas.
- customers
- appointments
- catalog
- staff
- locations
- packages
- memberships
- gift_cards
- forms
- notes
- products
- sales
- invoices
- payments
- notifications
- audits
El mismo ZIP puede entregarse cada día o cada semana en un bucket de Amazon S3, un almacén compatible con S3 o un servidor SFTP.
Límites de uso
Cada token puede hacer 600 solicitudes por minuto, y cada respuesta incluye X-RateLimit-Limit y X-RateLimit-Remaining.