Utviklere

Dataene dine er dine. Les og endre dem gjennom GraphQL-API-et, og få en signert webhook når noe skjer.

API-tokens

Opprett et token i Kontrollpanel under Data og integrasjoner, og velg hva det kan lese eller endre. Send det som et Bearer-token til /graphql-endepunktet for bedriften din. Hele skjemaet finner du på /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 } } } }"}'

Tilganger

Et token har tilgangene du velger. Rapporter og innstillinger er skrivebeskyttet, alle andre områder har en lese- og en skrivetilgang. Rollen til personen som opprettet tokenet setter fortsatt grensen for hva det når.

  • 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

Hver leveranse har en Appointier-Signature-header med et tidsstempel og en HMAC-SHA256 av tidsstempelet og den uendrede innholdsdelen, nøklet med hemmeligheten til endepunktet ditt. Avvis alt som er eldre enn fem minutter.

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));
}

Hendelser

  • 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

En mislykket levering prøves på nytt etter 1 minutt, 5 minutter, 30 minutter, 2 timer og 12 timer. Etter 10 mislykkede forsøk på rad settes endepunktet på pause, og eieren får en e-post. Alle leveringer kan sendes på nytt fra loggen.

Full eksport

Eiere kan be om en ZIP-fil med hver tabell som CSV og JSON Lines, pluss bilder, signerte skjemaer, notater som PDF og en oversikt med antall rader. Lenken kommer på e-post og virker i 24 timer.

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

Den samme ZIP-filen kan leveres hver dag eller hver uke til en Amazon S3-bøtte, en S3-kompatibel lagringstjeneste eller en SFTP-server.

Forespørselsgrenser

Hvert token kan sende 600 forespørsler i minuttet, og hvert svar inneholder X-RateLimit-Limit og X-RateLimit-Remaining.