Référence API

Connectez votre site web ou des outils externes à Check-in DOG

Présentation

L'API Check-in DOG vous permet d'intégrer votre salon de toilettage à votre propre site web ou à des applications externes. Que vous souhaitiez afficher les disponibilités en temps réel, proposer un formulaire de prise de rendez-vous, ou synchroniser vos données avec un autre outil, l'API vous donne un accès programmatique complet à vos données.

Principaux cas d'usage :

  • Intégrer un widget de prise de rendez-vous sur votre site web avec affichage des disponibilités en temps réel.
  • Créer un portail client personnalisé.
  • Exporter les données de rendez-vous et de facturation vers votre logiciel de comptabilité.
  • Automatiser des flux de travail avec d'autres outils métiers.

URL de base

Toutes les requêtes API sont adressées à :

https://checkindog.app/api/v1/

Toutes les réponses sont au format JSON. Les dates et horodatages utilisent le format ISO 8601.


Authentification

La plupart des endpoints de l'API nécessitent une authentification via un jeton Bearer. Vous générez ces jetons depuis le panneau d'administration, sous Compte Check-in DOG > Jetons API.

Incluez le jeton dans l'en-tête Authorization de chaque requête authentifiée :

Authorization: Bearer votre-jeton-api-ici

Chaque jeton est rattaché à un seul salon. Vous pouvez créer plusieurs jetons pour le même salon (par exemple, un par intégration).

Bonnes pratiques de sécurité :

  • Traitez les jetons API comme des mots de passe. Ne les incluez jamais dans le code source.
  • Utilisez un jeton par intégration pour pouvoir révoquer individuellement les accès.
  • Révoquez les jetons inutilisés immédiatement.

Endpoints publics

Ces endpoints ne nécessitent aucune authentification. Ils sont conçus pour une intégration sur des sites publics.

GET /api/v1/shops/{slug}

Retourne le profil public d'un salon.

Paramètres : {slug} est l'identifiant unique du salon (visible dans l'URL de votre espace d'administration).

Réponse :

{
  "data": {
    "slug": "toilettage-mignon",
    "name": "Toilettage Mignon",
    "description": "Toilettage professionnel pour toutes les races.",
    "phone": "+33 1 23 45 67 89",
    "email": "contact@toilettagemignon.fr",
    "address": "12 Rue des Fleurs",
    "zip_code": "75001",
    "city": "Paris",
    "country": "FR",
    "opening_hours": { "monday": "9:00-18:00" },
    "social": {
      "facebook": null,
      "instagram": "https://instagram.com/toilettagemignon"
    },
    "locale": "fr",
    "currency": "EUR",
    "timezone": "Europe/Paris"
  }
}

GET /api/v1/shops/{slug}/availability

Retourne les créneaux disponibles pour une plage de dates. Utilisez cet endpoint pour alimenter un widget de prise de rendez-vous sur votre site.

Paramètres de requête :

Paramètre Type Obligatoire Description
date string Non Date de début au format YYYY-MM-DD. Par défaut : aujourd'hui.
days integer Non Nombre de jours à afficher (1-30). Par défaut : 7.

Réponse :

{
  "shop": "toilettage-mignon",
  "from": "2026-03-15",
  "to": "2026-03-21",
  "availability": {
    "2026-03-15": {
      "available": true,
      "slots": [
        { "start": "2026-03-15T09:00:00+01:00", "end": "2026-03-15T10:00:00+01:00" },
        { "start": "2026-03-15T14:00:00+01:00", "end": "2026-03-15T15:00:00+01:00" }
      ]
    },
    "2026-03-16": {
      "available": false,
      "reason": "closed",
      "slots": []
    }
  }
}

Raisons pour available: false :

  • closed : aucun créneau défini ce jour dans le calendrier du salon.
  • holiday : la journée est marquée comme un jour de fermeture.

POST /api/v1/shops/{slug}/appointment-requests

Soumet une demande de rendez-vous publique. Cela crée un enregistrement Contact dans la section Contacts du salon, que le propriétaire peut consulter et convertir en rendez-vous confirmé.

Corps de la requête :

{
  "first_name": "Marie",
  "last_name": "Dupont",
  "email": "marie.dupont@exemple.fr",
  "phone": "+33 6 12 34 56 78",
  "message": "Je souhaite prendre RDV pour un toilettage complet de mon Golden Retriever.",
  "requested_at": "2026-03-20"
}
Champ Type Obligatoire Description
first_name string Oui Prénom du client.
last_name string Oui Nom du client.
email string Non Adresse e-mail du client.
phone string Non Numéro de téléphone du client.
message string Non Message libre ou demandes particulières.
requested_at string Non Date souhaitée au format YYYY-MM-DD.

Réponse (201) :

{
  "message": "Votre demande de rendez-vous a bien été reçue. Le salon vous contactera pour confirmer.",
  "data": {
    "id": 42,
    "first_name": "Marie",
    "last_name": "Dupont",
    "email": "marie.dupont@exemple.fr",
    "phone": "+33 6 12 34 56 78"
  }
}

Endpoints authentifiés

Tous les endpoints ci-dessous nécessitent un jeton Bearer valide dans l'en-tête Authorization.


GET /api/v1/shop

Retourne le profil complet du salon associé au jeton API, y compris le plan d'abonnement actif.

Réponse : identique à l'endpoint public, avec en plus un champ "plan" ("free", "solo" ou "pro").


Clients

GET /api/v1/customers

Liste tous les clients de votre salon.

Paramètres : search, per_page (défaut : 25, max : 100), page.

POST /api/v1/customers

Crée un nouveau client.

Champs requis : first_name, last_name.

Champs optionnels : email, phone, mobile, address, address2, zip_code, city, country, notes, send_sms.

GET /api/v1/customers/{id}

Récupère un client avec ses animaux.

PUT /api/v1/customers/{id}

Met à jour un client. Envoyez uniquement les champs à modifier.

DELETE /api/v1/customers/{id}

Supprime un client. Retourne 204 No Content.


Animaux

GET /api/v1/animals

Liste tous les animaux de votre salon.

Paramètre spécifique : customer_id pour filtrer par client.

POST /api/v1/animals

Crée un nouvel animal.

Champs requis : customer_id, name.

Champs optionnels : animal_type_id, color, sex (m ou f), birth_date, weight, chip_number, notes.

GET /api/v1/animals/{id}

Récupère un animal avec client, type et tags associés.

PUT /api/v1/animals/{id}

Met à jour un animal.

DELETE /api/v1/animals/{id}

Supprime un animal. Retourne 204 No Content.


Rendez-vous

GET /api/v1/appointments

Liste les rendez-vous de votre salon.

Paramètres : from, to (format YYYY-MM-DD), customer_id, animal_id, waiting_list, per_page, page.

POST /api/v1/appointments

Crée un nouveau rendez-vous.

Champs requis : animal_id, start, end (format ISO 8601).

Champs optionnels : comments, comment_for_customer, waiting_list, leash.

GET /api/v1/appointments/{id}

Récupère un rendez-vous avec les détails de l'animal et du client.

PUT /api/v1/appointments/{id}

Met à jour un rendez-vous.

DELETE /api/v1/appointments/{id}

Supprime un rendez-vous. Retourne 204 No Content.


Factures

Les factures utilisent un système de numérotation séquentielle immuable. Pour garantir l'intégrité de l'audit, les factures ne peuvent pas être modifiées ni supprimées via l'API.

GET /api/v1/invoices

Liste les factures de votre salon.

Paramètres : from, to, customer_id, paid, per_page, page.

GET /api/v1/invoices/{id}

Récupère une facture avec ses lignes et les coordonnées du client.

POST /api/v1/invoices

Crée une nouvelle facture. Le numéro de facture est attribué automatiquement.

Corps de la requête :

{
  "customer_id": 1,
  "paid": true,
  "notes": "Merci pour votre fidélité !",
  "lines": [
    {
      "item_id": 5,
      "description": "Toilettage complet - Labrador",
      "quantity": 1,
      "price_with_tax": 55.00,
      "discount": 0
    }
  ]
}

Réponses d'erreur

L'API retourne des codes HTTP standards. Les réponses d'erreur incluent un corps JSON avec un champ error et, pour les erreurs de validation, un champ messages.

Code Signification
401 Non authentifié. Le jeton est absent ou invalide.
404 Ressource introuvable.
422 Erreur de validation. Consultez le champ messages.
429 Trop de requêtes. Limite de 60 requêtes par minute.
500 Erreur interne du serveur.

Pagination

Tous les endpoints de liste retournent des résultats paginés avec un objet meta :

{
  "meta": {
    "current_page": 1,
    "last_page": 5,
    "per_page": 25,
    "total": 118
  }
}

Premiers pas

  1. Connectez-vous à votre espace d'administration Check-in DOG.
  2. Allez dans Compte Check-in DOG > Jetons API.
  3. Cliquez sur Générer un jeton, donnez-lui un nom et copiez le jeton affiché.
  4. Utilisez ce jeton dans l'en-tête Authorization: Bearer de toutes vos requêtes authentifiées.
  5. Testez avec une requête simple vers /api/v1/shop pour vérifier que votre jeton fonctionne.

Support

Pour toute question sur l'intégration de l'API, contactez-nous via la page Contact ou consultez la documentation complète.