Aller au contenu
Fonctions Accueil IA Changer d’app Prix FAQ
EN Connexion Commencer
Commencer gratuitement Fonctions Accueil IA Changer d’app Prix FAQ Essayer la démo Connexion English

L’API Rndez

Lisez un commerce Rndez depuis votre code : le commerce, ses services et son équipe, les disponibilités, les rendez-vous et les clients. Gratuit avec tous les forfaits, Gratuit compris.

Version 1 · lecture seulement pour l’instant

  • Commencer en 5 minutes
  • Clés et permissions
  • Mode test
  • Limites
  • Erreurs
  • Pagination et synchronisation
  • Toutes les routes

Commencer en 5 minutes

  1. Connectez-vous à Rndez. Ouvrez Configuration → Connexions.
  2. Touchez Créer une clé. Nommez-la, laissez « Voir le commerce » et « Voir les rendez-vous » cochés. Activez Clé de test pour l’essayer sur un commerce fictif.
  3. Copiez la clé. Vous la voyez une seule fois.
  4. Appelez l’API :
export RNDEZ_KEY="rndez_test_…"
curl "https://rndez.com/api/v1/open/shop" -H "Authorization: Bearer $RNDEZ_KEY"

La réponse :

{ "data": { "id": "test-biz_…", "name": "Demo Studio (test)", "timeZone": "America/Toronto", "test": true, … } }

Toutes les routes sont sous https://rndez.com/api/v1/open. Les réponses sont en JSON. L’argent est en cents. Les dates sont AAAA-MM-JJ ; les heures sont en minutes après minuit dans le fuseau du commerce, et aussi en heure ISO UTC.

La description lisible par les machines (OpenAPI 3.1) : /api/v1/open/openapi.json

Clés et permissions

Envoyez la clé à chaque appel : Authorization: Bearer rndez_live_…. Gardez-la sur votre serveur, jamais dans une page Web ou une app téléchargée : quiconque a la clé lit ce qu’elle peut lire.

  • shop:read : Voir le commerce (coordonnées, services, équipe, heures, jours fermés, disponibilités)
  • bookings:read : Voir les rendez-vous (avec seulement le nom du client)
  • clients:read : Voir les clients (courriels, téléphones, notes, visites ; aussi les coordonnées du client sur les rendez-vous)
  • money:read : Voir l’argent (prix, acomptes, montants payés, pourboires)

Un employé peut créer une clé pour lui seulement. Elle voit le commerce et ses propres rendez-vous, jamais la liste des clients ni l’argent.

Le propriétaire voit quand chaque clé a servi la dernière fois et chaque appel des 30 derniers jours, et peut désactiver une clé d’un toucher. Une clé désactivée arrête tout de suite.

Mode test

Une clé qui commence par rndez_test_ atteint une copie privée du commerce de démonstration, faite pour votre commerce : équipe, services, rendez-vous et clients fictifs. Elle n’atteint jamais de vraies données et n’envoie jamais de courriel ni de texto. Passez à une clé rndez_live_ quand votre code fonctionne.

Limites

  • Gratuit : 60 appels par minute par clé.
  • Solo : 300 par minute.
  • Salon : 1 000 par minute, par emplacement.

Chaque réponse dit où vous en êtes : X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Au-delà, vous recevez 429 et un en-tête Retry-After avec les secondes à attendre. Le commerce continue de fonctionner.

Erreurs

Chaque refus a la même forme, en anglais et en français, avec le paramètre fautif :

{ "error": { "code": "invalid", "message": "limit must be a number from 1 to 500.", "messageFr": "Demande invalide.", "field": "limit" } }
  • 400 invalid : un mauvais paramètre.
  • 401 unauthorized : aucune clé, une mauvaise clé, ou une clé désactivée.
  • 403 scope : la clé n’a pas cette permission.
  • 404 not_found : rien avec cet id dans ce commerce.
  • 429 slow_down : limite dépassée. Attendez Retry-After secondes.

Pagination et synchronisation

Les listes répondent { "data": [...], "next": "…" }. Passez next dans ?cursor= pour la page suivante ; il vaut null à la dernière. 100 par page ; ?limit= jusqu’à 500.

Pour garder une copie à jour, notez l’heure de votre dernier appel et demandez seulement ce qui a changé : ?updatedSince=2026-10-13T09:00:00Z. Les rendez-vous annulés restent dans la liste avec status: "cancelled".

let cursor = null;
const all = [];
do {
  const url = new URL("https://rndez.com/api/v1/open/bookings");
  url.searchParams.set("updatedSince", lastSync);
  if (cursor) url.searchParams.set("cursor", cursor);
  const answer = await fetch(url, { headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` } });
  if (answer.status === 429) { await new Promise((r) => setTimeout(r, Number(answer.headers.get("retry-after")) * 1000)); continue; }
  const page = await answer.json();
  all.push(...page.data);
  cursor = page.next;
} while (cursor);

Toutes les routes

Toutes sont en GET pour l’instant. Créer et changer des rendez-vous et des clients, et les webhooks, viennent ensuite.

GET /shop

Le commerce. Le commerce de la clé.

Permission : shop:read (Voir le commerce)

curl "https://rndez.com/api/v1/open/shop" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/shop", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data } = await answer.json();

GET /services

Services et options. Tous les services, actifs ou non, et les options.

Permission : shop:read (Voir le commerce)

curl "https://rndez.com/api/v1/open/services" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/services", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data } = await answer.json();

GET /staff

L’équipe. Tout le monde dans l’équipe.

Permission : shop:read (Voir le commerce)

curl "https://rndez.com/api/v1/open/staff" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/staff", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data } = await answer.json();

GET /hours

Heures d’ouverture. Sept jours, dimanche en premier. Aucune plage = fermé.

Permission : shop:read (Voir le commerce)

curl "https://rndez.com/api/v1/open/hours" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/hours", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data } = await answer.json();

GET /closures

Jours fermés et congés. staffId null = tout le commerce. La clé d’un employé voit ceux du commerce et les siens.

Permission : shop:read (Voir le commerce)

curl "https://rndez.com/api/v1/open/closures" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/closures", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data } = await answer.json();

GET /availability

Disponibilités. Les mêmes heures libres que la page de réservation (mêmes règles : heures, délai, période de réservation, jamais deux rendez-vous en même temps).

Permission : shop:read (Voir le commerce)

  • service (obligatoire): Un id de service de /services.
  • staff: Un id d’employé. Omettez-le pour n’importe qui.
  • from: Première date, AAAA-MM-JJ.
  • to: Dernière date.
curl "https://rndez.com/api/v1/open/availability?service=cut&from=2026-10-20&to=2026-10-21" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/availability?service=cut&from=2026-10-20&to=2026-10-21", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data } = await answer.json();

GET /bookings

Rendez-vous. Triés par date et heure. Les rendez-vous annulés sont inclus (status cancelled). La clé d’un employé ne voit que ses rendez-vous.

Permission : bookings:read (Voir les rendez-vous)

  • from: Première date, AAAA-MM-JJ.
  • to: Dernière date.
  • staff: Un id d’employé. Omettez-le pour n’importe qui.
  • status: Seulement ce statut.
  • limit: Combien par page : 1 à 500 (100 par défaut). Au-dessus de 500, c’est 500.
  • cursor: La valeur `next` de la page précédente.
  • updatedSince: Seulement ce qui a changé à partir de ce moment (ISO 8601, p. ex. 2026-10-13T09:00:00Z).
curl "https://rndez.com/api/v1/open/bookings?from=2026-10-20&to=2026-10-21" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/bookings?from=2026-10-20&to=2026-10-21", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data, next } = await answer.json();

GET /bookings/{id}

Un rendez-vous

Permission : bookings:read (Voir les rendez-vous)

  • id (obligatoire): L’id.
curl "https://rndez.com/api/v1/open/bookings/b_4Tq9…" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/bookings/b_4Tq9…", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data } = await answer.json();

GET /clients

Clients. Triés par nom. Un commerce dans un groupe qui partage ses clients voit la liste du groupe.

Permission : clients:read (Voir les clients)

  • q: Chercher par nom, courriel ou téléphone.
  • limit: Combien par page : 1 à 500 (100 par défaut). Au-dessus de 500, c’est 500.
  • cursor: La valeur `next` de la page précédente.
  • updatedSince: Seulement ce qui a changé à partir de ce moment (ISO 8601, p. ex. 2026-10-13T09:00:00Z).
curl "https://rndez.com/api/v1/open/clients" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/clients", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data, next } = await answer.json();

GET /clients/{id}

Un client

Permission : clients:read (Voir les clients)

  • id (obligatoire): L’id.
curl "https://rndez.com/api/v1/open/clients/cl_8fJ2kQ…" \
  -H "Authorization: Bearer $RNDEZ_KEY"
const answer = await fetch("https://rndez.com/api/v1/open/clients/cl_8fJ2kQ…", {
  headers: { Authorization: `Bearer ${process.env.RNDEZ_KEY}` },
});
const { data } = await answer.json();

Notre promesse

/v1 ne sera jamais brisée. On ajoute des choses ; tout retrait est annoncé 12 mois à l’avance par courriel. Des questions ? Écrivez-nous.

Produit

FonctionsAccueil IAPrixEssayer la démoFAQGénérateur de politique d’annulation

Pour

BarbiersSalons de coiffureOngleriesStudios de tatouageEsthétique et épilationMassothérapeutesMontréal et Québec

Quitter

Comment changer d’appFreshaBooksySquareVagaroResurvaBooksy ou Fresha

Rndez

Nous écrireCréateurs : vidéos payéesConfidentialitéConditionsChoix des témoinsEnglishFait à Montréal

© 2026 Rndez

Nous utilisons des témoins pour voir comment les visiteurs utilisent ce site. Rien n’est activé sans votre accord. Politique de confidentialité