dunglas / vaccin.click

Une extension Firefox pour trouver et réserver automatiquement votre créneau de vaccination COVID-19.
https://vaccin.click
GNU Affero General Public License v3.0
94 stars 19 forks source link

Utiliser l'API interne de Doctolib #34

Open DavidLibeau opened 3 years ago

DavidLibeau commented 3 years ago

Pour améliorer la stabilité de l'extension, il est proposé d'utiliser l'API interne de Doctolib.

Voici une documentation rapide du truc :

{urlCompleteDuCentre}.json

Permet d'obtenir des métadonnées qui peuvent être utilises mais pas essentielles

Exemple : https://www.doctolib.fr/pharmacie/paris/pharmacie-faidherbe.json

Exemple de réponse :

{
    "data": {
        "profile": {
            "is_directory": false,
            "organization": true,
            "subtitle": "Pharmacie",
            "id": 237135,
            "name": "Pharmacie Faidherbe ",
            "name_with_title": "Pharmacie Faidherbe",
            "name_with_title_and_determiner": "Pharmacie Faidherbe",
            "bio": "Votre pharmacie vous propose des TESTS antigéniques pour le Covid19 sur RDV\n\nLes tests antigéniques peuvent réalisés sur toutes les personnes asymptomatiques, \nsi personnes asymptomatiques de moins de 4 jours et ayant entre 18 et 65 ans",
            "website_url": "",
            "country": "fr",
            "covid_profile_message": null,
            "freemium": false,
            "pictures": [{
                "public_id": "mlrbb0iffkl24xsgttip"
            }, {
                "public_id": "vihwppoa1dowxloacfxv"
            }, {
                "public_id": "pwlol0e5a2ebmbhgmfp5"
            }],
            "cover_picture": {
                "public_id": "vihwppoa1dowxloacfxv"
            },
            "avatar_picture": {
                "public_id": "mlrbb0iffkl24xsgttip"
            },
            "agendas_with_covid_vaccination_for_general_practitioners": [],
            "vaccination_or_gp_speciality": false,
            "all_organizations_without_vaccination_feature": true,
            "vaccination_center_with_pfizer_moderna": false
        },
        "details": [{
            "insurance_card": null,
            "practice_id": 159640,
            "regulation_sector": null,
            "third_party_payer": null,
            "display_payment_means": false,
            "payment_means": {
                "cash": false,
                "check": false,
                "credit_card": false
            }
        }],
        "practitioners": [],
        "fees": [],
        "places": [{
            "id": "practice-159640",
            "address": "43 Rue Faidherbe",
            "zipcode": "75011",
            "city": "Paris",
            "floor": null,
            "latitude": 48.8537132,
            "longitude": 2.3821604,
            "elevator": false,
            "handicap": false,
            "formal_name": "Pharmacie Faidherbe",
            "reception_info": null,
            "full_address": "43 Rue Faidherbe, 75011 Paris",
            "opening_hours": [{
                "day": 1,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 2,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 3,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 4,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 5,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 6,
                "ranges": [["09:30", "19:30"]],
                "enabled": true
            }],
            "practice_ids": [159640],
            "is_aphp": false,
            "aphp_url": "http://www.aphp.fr/contenu/combien-ca-coute",
            "name": "Pharmacie Faidherbe",
            "short_name": null,
            "parking": {
                "name": "Ledru Rollin Parking SA",
                "full_address": "121 Avenue Ledru-Rollin, Paris"
            },
            "emergency_number_details": {
                "number": "15",
                "type": "Samu",
                "display_title": false
            },
            "stations": [{
                "transport_type": "metro",
                "lines": ["9"],
                "name": "Charonne"
            }, {
                "transport_type": "rer",
                "lines": ["A", "D"],
                "name": "Paris - Gare De Lyon"
            }, {
                "transport_type": "rer",
                "lines": ["A"],
                "name": "Nation"
            }]
        }]
    },
    "jsonld": {
        "profile": {
            "@context": "http://schema.org/",
            "@type": "Hospital",
            "name": "Pharmacie Faidherbe ",
            "description": "Votre pharmacie vous propose des TESTS antigéniques pour le Covid19 sur RDV\n\nLes tests antigéniques peuvent réalisés sur toutes les personnes asymptomatiques, \nsi personnes asymptomatiques de moins de 4 jours et ayant entre 18 et 65 ans",
            "medicalSpecialty": "Pharmacie",
            "legalName": null,
            "url": "/pharmacie/paris/pharmacie-faidherbe",
            "image": "//res.cloudinary.com/doctolib/image/upload/q_auto:eco,f_auto/mlrbb0iffkl24xsgttip.jpg",
            "address": {
                "@type": "PostalAddress",
                "name": "Pharmacie Faidherbe",
                "streetAddress": "43 Rue Faidherbe",
                "postalCode": "75011",
                "addressLocality": "Paris"
            },
            "paymentAccepted": "",
            "availableService": [],
            "telephone": null,
            "openingHours": ["Mo 09:00-20:00", "Tu 09:00-20:00", "We 09:00-20:00", "Th 09:00-20:00", "Fr 09:00-20:00", "Sa 09:30-19:30"]
        },
        "breadcrumbs": {
            "@context": "http://schema.org/",
            "@type": "BreadcrumbList",
            "itemListElement": [{
                "@type": "ListItem",
                "position": 1,
                "item": {
                    "@type": "Thing",
                    "name": "Doctolib",
                    "id": "Doctolib",
                    "url": null
                }
            }, {
                "@type": "ListItem",
                "position": 2,
                "item": {
                    "@type": "Thing",
                    "name": "Pharmacie",
                    "id": "Pharmacie",
                    "url": "/pharmacie"
                }
            }, {
                "@type": "ListItem",
                "position": 3,
                "item": {
                    "@type": "Thing",
                    "name": "Paris",
                    "id": "Paris",
                    "url": "/pharmacie/ile-de-france-departement-de-paris-paris"
                }
            }]
        }
    },
    "meta": {
        "title": "Pharmacie Faidherbe, Pharmacie à Paris : Prenez rendez-vous en ligne",
        "description": "Prenez RDV en ligne avec Pharmacie Faidherbe: Pharmacie. Adresse : 43 Rue Faidherbe, 75011 Paris.\n",
        "page_type": "establishmentsProfiles"
    },
    "seo": {
        "about_doctolib": {
            "title": "À propos de Doctolib",
            "links": [{
                "name": "Vaccination COVID-19",
                "url": "/vaccination-covid-19",
                "encoded": false,
                "target": "_blank",
                "hidden": false,
                "key": "vaccination_covid"
            }, {
                "name": "Test COVID - Depistage",
                "url": "/centre-depistage-covid",
                "encoded": false,
                "target": "_blank",
                "hidden": false,
                "key": "test_covid"
            }, {
                "name": "Test PCR",
                "url": "/depistage-covid-19-pcr-prelevement-naso-pharynge",
                "encoded": false,
                "target": "_blank",
                "hidden": false,
                "key": "test_pcr"
            }, {
                "name": "Consultation vidéo - Téléconsultation",
                "url": "/video_consultation",
                "encoded": false,
                "target": "_blank",
                "key": "video_consultation"
            }, {
                "name": "À propos de nous",
                "url": "https://about.doctolib.fr",
                "target": "_self",
                "encoded": true,
                "key": "about_us"
            }, {
                "name": "Carrières",
                "url": "https://careers.doctolib.fr?origin=footer",
                "target": "_blank",
                "encoded": true,
                "key": "jobs"
            }, {
                "name": "Presse",
                "url": "https://about.doctolib.fr/presse",
                "target": "_self",
                "encoded": true,
                "key": "press"
            }, {
                "name": "Besoin d'aide ?",
                "url": "/help?origin=help-desktop",
                "target": "_self",
                "encoded": true,
                "key": "help"
            }, {
                "name": "Notifications frauduleuses (tentatives de phishing)",
                "url": "/help?origin=help-desktop#section=6\u0026article=4",
                "target": "_self",
                "encoded": false,
                "key": "phishing"
            }, {
                "name": "Doctolib Deutschland",
                "url": "https://www.doctolib.de",
                "target": "_self",
                "encoded": true,
                "key": "doctolib_de"
            }]
        },
        "about_doctolib_pro": {
            "title": "Pour les professionnels de santé",
            "links": [{
                "name": "Logiciel de gestion Doctolib Pro",
                "url": "https://info.doctolib.fr?origin=home-footer\u0026utm_button=footer\u0026utm_content-group=other\u0026utm_page-url=https%3A%2F%2Fwww.doctolib.fr%2Fpharmacie%2Fparis%2Fpharmacie-faidherbe.json\u0026utm_website=doctolib_patients",
                "target": "_blank",
                "encoded": true,
                "key": "bms"
            }, {
                "name": "Doctolib Community",
                "url": "https://community.doctolib.com/",
                "target": "_blank",
                "encoded": true,
                "key": "community"
            }]
        },
        "popular_links": {
            "title": "Recherches fréquentes",
            "links": [{
                "name": "Cabinet médical Paris",
                "url": "/cabinet-medical/paris"
            }, {
                "name": "Cabinet dentaire Paris",
                "url": "/cabinet-dentaire/paris"
            }, {
                "name": "Centre de santé Paris",
                "url": "/centre-de-sante/paris"
            }, {
                "name": "Clinique privée Paris",
                "url": "/clinique-privee/paris"
            }, {
                "name": "Hôpital public Paris",
                "url": "/hopital-public/paris"
            }, {
                "name": "Établissement de Santé Privé d'Intérêt Collectif (ESPIC) Paris",
                "url": "/espic-etablissement-de-sante-prive-d-interet-collectif/paris"
            }, {
                "name": "Centre médical et dentaire Paris",
                "url": "/centre-medical-et-dentaire/paris"
            }, {
                "name": "Maison de santé Paris",
                "url": "/maison-de-sante/paris"
            }, {
                "name": "Cabinet paramédical Paris",
                "url": "/cabinet-paramedical/paris"
            }, {
                "name": "Centre laser et esthétique Paris",
                "url": "/centre-laser-et-esthetique/paris"
            }]
        },
        "similar_links": {
            "title": "Recherches associées",
            "links": [{
                "name": "Pharmacie Saint-Mandé",
                "url": "/pharmacie/saint-mande"
            }, {
                "name": "Pharmacie Le Kremlin-Bicêtre",
                "url": "/pharmacie/le-kremlin-bicetre"
            }, {
                "name": "Pharmacie Bagnolet",
                "url": "/pharmacie/bagnolet"
            }, {
                "name": "Pharmacie Ivry-sur-Seine",
                "url": "/pharmacie/ivry-sur-seine"
            }, {
                "name": "Pharmacie Levallois-Perret",
                "url": "/pharmacie/levallois-perret"
            }, {
                "name": "Pharmacie Vincennes",
                "url": "/pharmacie/vincennes"
            }, {
                "name": "Pharmacie Aubervilliers",
                "url": "/pharmacie/aubervilliers"
            }, {
                "name": "Pharmacie Issy-les-Moulineaux",
                "url": "/pharmacie/issy-les-moulineaux"
            }, {
                "name": "Pharmacie Montreuil",
                "url": "/pharmacie/montreuil"
            }, {
                "name": "Pharmacie Paris",
                "url": "/pharmacie/paris"
            }]
        }
    }
}

/booking/{urlUnique}.json ou /booking/{id}.json

Permet d'obtenir les spécifications d'un centre

Exemple de réponse :

{
    "data": {
        "profile": {
            "id": 237135,
            "name_with_title_and_determiner": "Pharmacie Faidherbe",
            "name_with_title": "Pharmacie Faidherbe",
            "speciality": null,
            "organization": true,
            "redirect_url": null,
            "language_list": "Français"
        },
        "specialities": [{
            "id": 3097,
            "name": "Pharmacien",
            "kind": "medical"
        }],
        "visit_motive_categories": [],
        "visit_motives": [{
            "id": 2607211,
            "name": "Dépistage COVID-19 test antigénique (prélèvement naso-pharyngé)",
            "visit_motive_category_id": null,
            "organization_id": 128541,
            "speciality_id": 3097,
            "ref_visit_motive_id": 6236,
            "position": 2,
            "telehealth": false,
            "vaccination_days_range": 0,
            "vaccination_motive": false,
            "covid_vaccination_set_appointment_organization": false,
            "first_shot_motive": false,
            "allow_new_patients": true,
            "allow_new_patients_on_insurance_sector": null,
            "configurations": null
        }, {
            "id": 2764585,
            "name": "1ère injection vaccin COVID-19 (AstraZeneca)",
            "visit_motive_category_id": null,
            "organization_id": 128541,
            "speciality_id": 3097,
            "ref_visit_motive_id": 7107,
            "position": 3,
            "telehealth": false,
            "vaccination_days_range": 80,
            "vaccination_motive": true,
            "covid_vaccination_set_appointment_organization": false,
            "first_shot_motive": false,
            "allow_new_patients": true,
            "allow_new_patients_on_insurance_sector": null,
            "configurations": null
        }, {
            "id": 2848143,
            "name": "2de injection vaccin COVID-19 (AstraZeneca)",
            "visit_motive_category_id": null,
            "organization_id": 128541,
            "speciality_id": 3097,
            "ref_visit_motive_id": 7108,
            "position": 4,
            "telehealth": false,
            "vaccination_days_range": 0,
            "vaccination_motive": true,
            "covid_vaccination_set_appointment_organization": false,
            "first_shot_motive": false,
            "allow_new_patients": true,
            "allow_new_patients_on_insurance_sector": null,
            "configurations": null
        }, {
            "id": 2848144,
            "name": "Injection unique vaccin COVID-19 (Janssen)",
            "visit_motive_category_id": null,
            "organization_id": 128541,
            "speciality_id": 3097,
            "ref_visit_motive_id": 7945,
            "position": 5,
            "telehealth": false,
            "vaccination_days_range": 0,
            "vaccination_motive": true,
            "covid_vaccination_set_appointment_organization": false,
            "first_shot_motive": false,
            "allow_new_patients": true,
            "allow_new_patients_on_insurance_sector": null,
            "configurations": null
        }],
        "agendas": [{
            "id": 400342,
            "booking_disabled": false,
            "booking_temporary_disabled": false,
            "landline_number": "01 43 71 41 40",
            "anonymous": true,
            "organization_id": 128541,
            "visit_motive_ids_by_practice_id": {
                "159640": [2607211, 2764585, 2848143, 2848144]
            },
            "visit_motive_ids": [2607211, 2764585, 2848143, 2848144],
            "visit_motive_ids_only_for_doctors": null,
            "practice_id": 159640,
            "speciality_id": 3097,
            "practitioner_id": null,
            "insurance_sector_enabled": false,
            "equipment_agendas_required": false
        }],
        "places": [{
            "id": "practice-159640",
            "address": "43 Rue Faidherbe",
            "zipcode": "75011",
            "city": "Paris",
            "floor": null,
            "latitude": 48.8537132,
            "longitude": 2.3821604,
            "elevator": false,
            "handicap": false,
            "formal_name": "Pharmacie Faidherbe",
            "reception_info": null,
            "full_address": "43 Rue Faidherbe, 75011 Paris",
            "opening_hours": [{
                "day": 1,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 2,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 3,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 4,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 5,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 6,
                "ranges": [["09:30", "19:30"]],
                "enabled": true
            }, {
                "day": 0,
                "ranges": [["09:00", "13:00"]],
                "enabled": false
            }],
            "name": "Pharmacie Faidherbe",
            "practice_ids": [159640],
            "is_aphp": false,
            "aphp_url": "http://www.aphp.fr/contenu/combien-ca-coute",
            "payment_means": null,
            "regulation_sector": null,
            "insurance_card": null
        }],
        "practitioners": [],
        "availabilities_preview_compatible": false,
        "vaccination_center": false,
        "number_future_vaccinations": 0,
        "has_new_patient_rule": false
    }
}

availabilities.json?start_date={date}&visit_motive_ids={visit_motive_ids}&agenda_ids={agenda_ids}&practice_ids={practice_ids}

Permet d'obtenir les prochains créneaux disponibles.

Exemple : https://pro.doctolib.fr/availabilities.json?start_date=2021-05-20&visit_motive_ids=2764585&agenda_ids=400342&practice_ids=159640

Exemple de réponse :

{
    "availabilities": [{
        "date": "2021-05-20",
        "slots": [],
        "substitution": null
    }, {
        "date": "2021-05-21",
        "slots": ["2021-05-21T10:35:00.000+02:00", "2021-05-21T12:20:00.000+02:00", "2021-05-21T12:35:00.000+02:00", "2021-05-21T12:50:00.000+02:00", "2021-05-21T13:35:00.000+02:00", "2021-05-21T14:35:00.000+02:00", "2021-05-21T14:50:00.000+02:00", "2021-05-21T15:20:00.000+02:00", "2021-05-21T15:35:00.000+02:00", "2021-05-21T15:50:00.000+02:00", "2021-05-21T16:20:00.000+02:00", "2021-05-21T16:50:00.000+02:00", "2021-05-21T17:05:00.000+02:00", "2021-05-21T17:20:00.000+02:00", "2021-05-21T17:35:00.000+02:00"],
        "substitution": null
    }],
    "total": 15
}

Il y a d'autres trucs mais c'est déjà un bon début… :)

julienbornstein commented 3 years ago

Pour le profile il y a aussi : https://www.doctolib.fr/profiles/{profileId}.json si on connait l'id.

dunglas commented 3 years ago

Wow génial, effectivement il y a moyen d'améliorer pas mal les performances et la stabilité avec ça. Et sûrement de stresser moins les serveurs de Doctolib aussi.

DavidLibeau commented 3 years ago

Super si c'est utile. Pour info/pour avoir des exemples plus complet, vous pouvez regarder ce que j'ai fait ici :

julienbornstein commented 3 years ago

Pour /avaiabilities.json:

Le practice_ids doit contenir la liste du/des praticien(s). Dans les centres médicaux plusieurs médecins y travaillent, ce champ permet de filtrer par praticien.

exemple ici : https://www.doctolib.fr/centre-de-sante/paris/sante-plus-centre-victor-masse.json

{
  "data": {
    "profile": {
      "is_directory": false,
      "organization": true,
      "subtitle": "Centre de santé",
      "id": 8929,
      "name": "Santé PLUS - Centre Victor Massé",
      "name_with_title": "Santé PLUS - Centre Victor Massé",
      "name_with_title_and_determiner": "Santé PLUS - Centre Victor Massé",
      "bio": "Le centre médical du spectacle vous accueille rue Victor Massé à Paris 9, du lundi au vendredi. \n\nCe centre existe depuis 1956 et accueille tous les patients pour tous types de soins médicaux (médecine générale, cardiologie, dermatologie, gynécologie, gastro-entérologie et psychiatrie). Nous proposons aussi une offre dentaire élargie comprenant des soins, des prothèses et une radio panoramique dentaire. Le centre est en pleine mutation, un changement de direction avec des rénovations est attendu dans les plus brefs délais.\nLes médecins généralistes vous accueillent également sans rendez-vous à tout moment du lundi au jeudi de 8h30 à 19h et le vendredi de 8h30 à 18h.",
      "website_url": "https://www.sante-plus.com/",
      "country": "fr",
      "covid_profile_message": null,
      "freemium": false,
      "pictures": [
        {
          "public_id": "cjb7vbirdbgwdyp7m85m"
        }
      ],
      "cover_picture": {
        "public_id": "gnrh5fkg2q06hjk1xkjs"
      },
      "avatar_picture": {
        "public_id": "cjb7vbirdbgwdyp7m85m"
      },
      "agendas_with_covid_vaccination_for_general_practitioners": [],
      "vaccination_or_gp_speciality": false,
      "all_organizations_without_vaccination_feature": true,
      "vaccination_center_with_pfizer_moderna": false
    },
    "details": [
      {
        "insurance_card": true,
        "practice_id": 4920,
        "regulation_sector": "Etablissement conventionné",
        "third_party_payer": "national_and_additional",
        "display_payment_means": true,
        "temporary_message": "Retrouvez-vous sur notre site internet : https://www.sante-plus.com/.",
        "payment_means": {
          "cash": true,
          "check": true,
          "credit_card": true
        }
      }
    ],
    "practitioners": [
      {
        "id": 22973831,
        "profile_id": 200003,
        "name_with_title": "Dr Driss ABOULKARAM",
        "cloudinary_public_id": "mbkpkuupensbsquzor10",
        "speciality": "Gynécologue médical et obstétrique",
        "speciality_with_gender": "Gynécologue médical et obstétrique",
        "link": "/gynecologue/paris/driss-aboulkaram"
      },
      {
        "id": 19261651,
        "profile_id": 167524,
        "name_with_title": "Dr Mariam AHMEDOU",
        "cloudinary_public_id": "yy4tyvlt4asro4ykcb3y",
        "speciality": "Médecin généraliste",
        "speciality_with_gender": "Médecin généraliste",
        "link": "/medecin-generaliste/paris/mariam-ahmedou"
      },
      {
        "id": 27226155,
        "profile_id": 229950,
        "name_with_title": "Dr Marie BARON",
        "cloudinary_public_id": "qpwp60kd2j4qwjpckjre",
        "speciality": "Chirurgien-dentiste",
        "speciality_with_gender": "Chirurgien-dentiste",
        "link": "/dentiste/paris/marie-baron"
      }
    ],
    "fees": [],
    "places": [
      {
        "id": "establishment-5709",
        "address": "21 bis rue Victor Massé",
        "zipcode": "75009",
        "city": "PARIS",
        "floor": null,
        "latitude": 48.8806829,
        "longitude": 2.3382851,
        "elevator": false,
        "handicap": false,
        "formal_name": "Centre Médical du Spectacle",
        "landline_number": null,
        "reception_info": null,
        "full_address": "21 bis rue Victor Massé, 75009 PARIS",
        "opening_hours": null,
        "practice_ids": [
          9549,
          4920
        ],
        "is_aphp": false,
        "aphp_url": "http://www.aphp.fr/contenu/combien-ca-coute",
        "name": "Centre Médical du Spectacle",
        "short_name": null,
        "parking": {
          "name": "MILTON",
          "full_address": "33 Rue Milton, 75009 Paris"
        },
        "stations": [
          {
            "transport_type": "metro",
            "lines": [
              "12",
              "2"
            ],
            "name": "Pigalle"
          },
          {
            "transport_type": "metro",
            "lines": [
              "12"
            ],
            "name": "Saint-Georges"
          },
          {
            "transport_type": "rer",
            "lines": [
              "A"
            ],
            "name": "Auber"
          }
        ]
      }
    ]
  }
}

Pour visit_motive_ids il faut passer les refVisitMotiveIds ce sont les ids parents :

[
  {
    "id": 6970,
    "name": "1re injection vaccin COVID-19 (Pfizer-BioNTech)"
  },
  {
    "id": 7005,
    "name": "1re injection vaccin COVID-19 (Moderna)"
  },
  {
    "id": 7107,
    "name": "1ère injection vaccin COVID-19 (AstraZeneca)"
  },
  {
    "id": 7945,
    "name": "Injection unique vaccin COVID-19 (Janssen)"
  }
]

Et attention aux Slotqui dans certains cas comme ci-dessus sont un array de Date ISO 8601, mais parfois des objects plus complexes.

{
  "availabilities": [
    {
      "date": "2021-05-21",
      "slots": [
        {
          "agenda_id": 459768,
          "practitioner_agenda_id": null,
          "start_date": "2021-05-21T10:40:00.000+02:00",
          "end_date": "2021-05-21T10:50:00.000+02:00",
          "steps": [
            {
              "agenda_id": 459768,
              "practitioner_agenda_id": null,
              "start_date": "2021-05-21T10:40:00.000+02:00",
              "end_date": "2021-05-21T10:50:00.000+02:00",
              "visit_motive_id": 2782508
            },
            {
              "agenda_id": 459768,
              "practitioner_agenda_id": null,
              "start_date": "2021-08-09T10:10:00.000+02:00",
              "end_date": "2021-08-09T10:20:00.000+02:00",
              "visit_motive_id": 2782509
            }
          ]
        }
      ],
      "substitution": null
    }
  ],
  "total": 144
}

VS

{
  "availabilities": [
    {
      "date": "2021-05-21",
      "slots": [
        "2021-05-21T10:35:00.000+02:00",
        "2021-05-21T12:20:00.000+02:00",
        "2021-05-21T12:35:00.000+02:00",
        "2021-05-21T12:50:00.000+02:00",
        "2021-05-21T13:35:00.000+02:00",
        "2021-05-21T14:35:00.000+02:00",
        "2021-05-21T14:50:00.000+02:00"     
      ],
      "substitution": null
    }
  ],
  "total": 15
}
Benjyben commented 1 year ago

Hello , Savez vous si il existe une API pour trouver tous les spécialistes dans une ville précise ?