> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.fr/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Book a meeting

> Réserver une réunion à l'aide d'un lien de réunion spécifié. Ce point de terminaison vous permet de créer une réunion en fournissant les détails nécessaires, tels que la durée, l'e-mail et l'heure de début. Il est utile pour planifier des réunions par programmation via l'API de HubSpot.

export const ScopesList = ({scopes = [], description = "Cette API requiert l'une des portées suivantes :"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

export const SupportedProducts = ({marketing, sales, service, cms, marketingLevel, salesLevel, serviceLevel, cmsLevel}) => {
  const translations = {
    header: "Produits pris en charge",
    description: "Exige l'un des produits suivants ou un produit supérieur.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub"
    },
    tiers: {
      free: "Gratuit",
      starter: "Starter",
      professional: "Pro",
      enterprise: "Entreprise"
    }
  };
  const translateTier = tier => {
    if (!tier) return '';
    const lowerTier = tier.toLowerCase();
    return translations.tiers[lowerTier] || tier;
  };
  const products = [{
    name: marketing ? translations.productNames.marketing : '',
    level: translateTier(marketingLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/marketing-bolt.svg",
    alt: "Marketing Hub"
  }, {
    name: sales ? translations.productNames.sales : '',
    level: translateTier(salesLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/sales-star.svg",
    alt: "Sales Hub"
  }, {
    name: service ? translations.productNames.service : '',
    level: translateTier(serviceLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/service-heart.svg",
    alt: "Service Hub"
  }, {
    name: cms ? translations.productNames.cms : '',
    level: translateTier(cmsLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/content-play.svg",
    alt: "Content Hub"
  }].filter(product => product.name && product.level);
  if (products.length === 0) return null;
  return <div>
      <div className="text-sm mb-2">{translations.description}</div>
      <div className={`grid ${products.length === 1 ? 'grid-cols-1' : 'grid-cols-2'} gap-1.5`}>
        {products.map((product, index) => <div key={index} style={{
    display: 'flex',
    alignItems: 'center'
  }}>
            <img src={product.icon} alt={product.alt} className="w-3.5 h-3.5 mr-1.5 mt-2.5 mb-2.5 flex-shrink-0 align-middle" />
            <span className="font-medium mr-1 text-sm">{product.name} -</span>
            <span className="text-sm">{product.level}</span>
          </div>)}
      </div>
    </div>;
};

<AccordionGroup>
  <Accordion title="Supported products" defaultOpen="true" icon="cubes">
    <SupportedProducts marketing={true} sales={true} service={true} cms={true} marketingLevel="FREE" salesLevel="FREE" serviceLevel="FREE" cmsLevel="FREE" />
  </Accordion>

  <Accordion title="Required Scopes" icon="key">
    <ScopesList
      scopes={[
  'crm.objects.listings.write',
  'crm.objects.companies.write',
  'crm.objects.commercepayments.write',
  'crm.objects.contacts.highly_sensitive.write.v2',
  'crm.objects.contacts.sensitive.write.v2',
  'crm.objects.projects.highly_sensitive.write',
  'crm.objects.appointments.write',
  'crm.objects.services.write',
  'crm.objects.products.write',
  'tickets',
  'crm.objects.deals.sensitive.write.v2',
  'crm.objects.deals.highly_sensitive.write.v2',
  'crm.objects.companies.highly_sensitive.write.v2',
  'tickets.sensitive.v2',
  'crm.objects.deals.write',
  'crm.objects.appointments.sensitive.write.v2',
  'tickets.highly_sensitive.v2',
  'crm.objects.projects.write',
  'crm.objects.projects.sensitive.write',
  'crm.objects.goals.write',
  'crm.objects.companies.sensitive.write.v2',
  'crm.objects.contacts.write',
  'crm.objects.line_items.write',
  'crm.objects.courses.write'
]}
    />
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml specs/2026-03/scheduler-meetings-v2026-03.json POST /scheduler/2026-03/meetings/meeting-links/book
openapi: 3.0.1
info:
  title: Scheduler Meetings
  description: Meetings Service For HubSpot Sales
  version: 2026-03
  x-hubspot-product-tier-requirements:
    marketing: FREE
    sales: FREE
    service: FREE
    cms: FREE
    commerce: FREE
    crmHub: FREE
    dataHub: FREE
servers:
  - url: https://api.hubapi.com
security: []
tags:
  - name: Advanced
  - name: Basic
paths:
  /scheduler/2026-03/meetings/meeting-links/book:
    post:
      tags:
        - Advanced
      summary: Réserver une réunion
      description: >-
        Réserver une réunion à l'aide d'un lien de réunion spécifié. Ce point de
        terminaison vous permet de créer une réunion en fournissant les détails
        nécessaires, tels que la durée, l'e-mail et l'heure de début. Il est
        utile pour planifier des réunions par programmation via l'API de
        HubSpot.
      operationId: post-/scheduler/2026-03/meetings/meeting-links/book
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalMeetingBooking'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalMeetingBookingResponse'
        default:
          $ref: '#/components/responses/Error'
          description: ''
      security:
        - oauth2:
            - crm.objects.contacts.highly_sensitive.write.v2
        - oauth2:
            - tickets
        - oauth2:
            - crm.objects.commercepayments.write
        - oauth2:
            - crm.objects.goals.write
        - oauth2:
            - crm.objects.line_items.write
        - oauth2:
            - crm.objects.contacts.write
        - oauth2:
            - crm.objects.products.write
        - oauth2:
            - crm.objects.projects.write
        - oauth2:
            - crm.objects.contacts.sensitive.write.v2
        - oauth2:
            - crm.objects.services.write
        - oauth2:
            - crm.objects.projects.sensitive.write
        - oauth2:
            - crm.objects.deals.sensitive.write.v2
        - oauth2:
            - tickets.highly_sensitive.v2
        - oauth2:
            - crm.objects.listings.write
        - oauth2:
            - crm.objects.appointments.sensitive.write.v2
        - oauth2:
            - crm.objects.companies.write
        - oauth2:
            - crm.objects.courses.write
        - oauth2:
            - crm.objects.appointments.write
        - oauth2:
            - tickets.sensitive.v2
        - oauth2:
            - crm.objects.deals.write
        - oauth2:
            - crm.objects.projects.highly_sensitive.write
        - oauth2:
            - crm.objects.companies.sensitive.write.v2
        - oauth2:
            - crm.objects.deals.highly_sensitive.write.v2
        - oauth2:
            - crm.objects.companies.highly_sensitive.write.v2
        - oauth2:
            - meetings-write
components:
  schemas:
    ExternalMeetingBooking:
      required:
        - duration
        - email
        - firstName
        - formFields
        - lastName
        - legalConsentResponses
        - likelyAvailableUserIds
        - slug
        - startTime
      type: object
      properties:
        duration:
          type: integer
          description: Un entier représentant la durée de la réunion en minutes.
          format: int64
        email:
          type: string
          description: L'adresse e-mail de la personne qui réserve la réunion.
        firstName:
          type: string
          description: Le prénom de la personne qui réserve la réunion.
        formFields:
          type: array
          description: >-
            Un tableau de champs de formulaire remplis par le participant,
            chacun contenant un nom et une valeur.
          items:
            $ref: '#/components/schemas/ExternalBookingFormField'
        lastName:
          type: string
          description: Le nom de famille de la personne qui réserve la réunion.
        legalConsentResponses:
          type: array
          description: >-
            Un tableau de réponses de consentement légal, chacune détaillant le
            consentement donné par le participant.
          items:
            $ref: '#/components/schemas/ExternalLegalConsentResponse'
        likelyAvailableUserIds:
          type: array
          description: >-
            Un tableau de chaînes de caractères représentant les identifiants
            d'utilisateurs susceptibles d'être disponibles pour la réunion.
          items:
            type: string
        locale:
          type: string
          description: >-
            Une chaîne de caractères représentant les paramètres régionaux de la
            personne qui réserve la réunion.
        slug:
          type: string
          description: >-
            Une chaîne représentant l'identifiant unique du lien de prise de
            rendez-vous.
        startTime:
          type: string
          description: "L'heure de début de la réunion au format de date et d'heure ISO\_8601."
          format: date-time
        timezone:
          type: string
          description: >-
            Une chaîne représentant le fuseau horaire de la personne qui réserve
            la réunion.
    ExternalMeetingBookingResponse:
      required:
        - bookingTimezone
        - calendarEventId
        - contactId
        - duration
        - end
        - formFields
        - guestEmails
        - isOffline
        - legalConsentResponses
        - start
        - subject
      type: object
      properties:
        bookingTimezone:
          type: string
          description: >-
            Le fuseau horaire dans lequel la réunion a été réservée, représenté
            sous forme de chaîne.
        calendarEventId:
          type: string
          description: >-
            L'identifiant unique de l'événement de calendrier associé à cette
            réunion.
        contactId:
          type: string
          description: L'identifiant unique du contact associé à cette réunion.
        duration:
          type: integer
          description: La durée de la réunion en minutes, représentée par un entier.
          format: int64
        end:
          type: string
          description: "La date et l'heure de fin de la réunion, au format ISO\_8601."
          format: date-time
        formFields:
          type: array
          description: >-
            Un tableau de champs de formulaire validés soumis pendant le
            processus de réservation, chacun représenté par un objet
            ExternalValidatedFormField.
          items:
            $ref: '#/components/schemas/ExternalValidatedFormField'
        guestEmails:
          type: array
          description: Une liste d'adresses e-mail des invités à la réunion.
          items:
            type: string
        isOffline:
          type: boolean
          description: >-
            Un booléen indiquant si la réunion est hors ligne (vrai) ou en ligne
            (faux).
        legalConsentResponses:
          type: array
          description: >-
            Un ensemble de réponses de consentement légal associées à la
            réunion, chacune représentée par un objet
            ExternalLegalConsentResponse.
          items:
            $ref: '#/components/schemas/ExternalLegalConsentResponse'
        locale:
          type: string
          description: >-
            Le paramètre régional de la réunion, représenté sous forme de
            chaîne.
        location:
          type: string
          description: Le lieu de la réunion, représenté sous forme de chaîne.
        start:
          type: string
          description: "La date et l'heure de début de la réunion, au format ISO\_8601."
          format: date-time
        subject:
          type: string
          description: Le sujet ou le titre de la réunion, représenté sous forme de chaîne.
        webConferenceMeetingId:
          type: string
          description: >-
            L'identifiant unique de la réunion de conférence web, le cas
            échéant.
        webConferenceUrl:
          type: string
          description: L'URL de la conférence web associée à la réunion, le cas échéant.
    ExternalBookingFormField:
      required:
        - name
        - value
      type: object
      properties:
        name:
          type: string
          description: >-
            Le nom du champ de formulaire, représenté sous forme de chaîne de
            caractères.
        value:
          type: string
          description: >-
            La valeur associée au champ du formulaire, représentée sous forme de
            chaîne de caractères.
    ExternalLegalConsentResponse:
      required:
        - communicationTypeId
        - consented
      type: object
      properties:
        communicationTypeId:
          type: string
          description: >-
            Une chaîne représentant l'identifiant unique du type de
            communication pour lequel le consentement est enregistré.
        consented:
          type: boolean
          description: >-
            Un booléen indiquant si l'utilisateur a donné son consentement pour
            le type de communication. Il est vrai si le consentement est donné,
            sinon faux.
    ExternalValidatedFormField:
      required:
        - isCustom
        - label
        - name
        - value
      type: object
      properties:
        fieldType:
          type: string
          description: >-
            Le type du champ de formulaire, représenté sous forme de chaîne de
            caractères.
        isCustom:
          type: boolean
          description: >-
            Un booléen indiquant si le champ du formulaire est défini sur
            mesure.
        label:
          type: string
          description: >-
            L'étiquette d'affichage du champ de formulaire, représentée sous
            forme de chaîne de caractères.
        name:
          type: string
          description: Le nom du champ de formulaire, représenté sous forme de chaîne.
        translatedLabel:
          type: string
          description: >-
            L'étiquette traduite du champ de formulaire, représentée sous forme
            de chaîne de caractères.
        value:
          type: string
          description: >-
            La valeur attribuée au champ du formulaire, représentée sous forme
            de chaîne de caractères.
        valueLabel:
          type: string
          description: >-
            Une étiquette pour la valeur du champ, représentée sous forme de
            chaîne.
    Error:
      required:
        - category
        - correlationId
        - message
      type: object
      properties:
        category:
          type: string
          description: La catégorie d'erreur. Il s'agit d'une chaîne de caractères.
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: >-
            Contexte de la condition d'erreur. Il s'agit d'un objet où chaque
            propriété est un tableau de chaînes.
          example: >-
            {invalidPropertyName=[propertyValue], missingScopes=[scope1,
            scope2]}
        correlationId:
          type: string
          description: >-
            Un identifiant unique pour la requête. Incluez cette valeur dans
            tous les rapports d'erreur ou tickets d'assistance. Il s'agit d'une
            chaîne au format UUID.
          format: uuid
          example: aeb5f871-7f07-4993-9211-075dc63e7cbf
        errors:
          type: array
          description: >-
            Information supplémentaire sur l'erreur. Il s'agit d'un tableau
            d'objets ErrorDetail.
          items:
            $ref: '#/components/schemas/ErrorDetail'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Une carte des noms de liens vers les URI associées contenant de la
            documentation sur l'erreur ou les étapes de correction recommandées.
            Il s'agit d'un objet dont chaque propriété est une chaîne de
            caractères.
        message:
          type: string
          description: >-
            Un message lisible par l'utilisateur décrivant l'erreur ainsi que
            les mesures correctives à prendre, le cas échéant. Il s'agit d'une
            chaîne de caractères.
          example: An error occurred
        subCategory:
          type: string
          description: >-
            Une catégorie spécifique qui contient des détails plus précis sur
            l'erreur. Il s'agit d'une chaîne de caractères.
      example:
        message: Invalid input (details will vary based on the error)
        correlationId: aeb5f871-7f07-4993-9211-075dc63e7cbf
        category: VALIDATION_ERROR
        links:
          knowledge-base: https://www.hubspot.com/products/service/knowledge-base
    ErrorDetail:
      required:
        - message
      type: object
      properties:
        code:
          type: string
          description: >-
            Le code de statut associé au détail de l'erreur. Il s'agit d'une
            propriété de type chaîne de caractères.
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: >-
            Contexte de la condition d'erreur, représenté sous la forme d'un
            objet où chaque propriété est un tableau de chaînes de caractères
            fournissant des informations supplémentaires.
          example: '{missingScopes=[scope1, scope2]}'
        in:
          type: string
          description: Le nom du champ ou du paramètre dans lequel l'erreur a été trouvée.
        message:
          type: string
          description: >-
            Un message lisible par l'utilisateur décrivant l'erreur ainsi que
            les mesures correctives à prendre, le cas échéant. Cette propriété
            de chaîne est obligatoire.
        subCategory:
          type: string
          description: >-
            Une catégorie spécifique qui contient des détails plus précis sur
            l'erreur. Il s'agit d'une propriété de type chaîne de caractères.
  responses:
    Error:
      description: An error occurred.
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://app.hubspot.com/oauth/authorize
          tokenUrl: https://api.hubapi.com/oauth/v1/token
          scopes:
            crm.objects.contacts.sensitive.write.v2: ''
            meetings-write: ''
            scheduler.meetings.meeting-link.read: ''

````