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
- Connectez-vous à votre espace d'administration Check-in DOG.
- Allez dans Compte Check-in DOG > Jetons API.
- Cliquez sur Générer un jeton, donnez-lui un nom et copiez le jeton affiché.
- Utilisez ce jeton dans l'en-tête
Authorization: Bearerde toutes vos requêtes authentifiées. - Testez avec une requête simple vers
/api/v1/shoppour 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.