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

# Retrieve meeting link slug

> Obtener detalles sobre la información inicial necesaria para programar una reunión.

export const ScopesList = ({scopes = [], description = "Esta API requiere uno de los siguientes ámbitos:"}) => {
  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: "Productos compatibles",
    description: "Se requiere uno de los siguientes productos o productos de ediciones superiores.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub"
    },
    tiers: {
      free: "Gratuito",
      starter: "Starter",
      professional: "Pro",
      enterprise: "Enterprise"
    }
  };
  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={[
  'scheduler.meetings.meeting-link.read'
]}
    />
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml specs/2026-03/scheduler-meetings-v2026-03.json GET /scheduler/2026-03/meetings/meeting-links/book/{slug}
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/{slug}:
    get:
      tags:
        - Basic
      summary: Listar información de reservas
      description: >-
        Obtener detalles sobre la información inicial necesaria para programar
        una reunión.
      operationId: get-/scheduler/2026-03/meetings/meeting-links/book/{slug}
      parameters:
        - name: slug
          in: path
          description: ''
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: timezone
          in: query
          description: ''
          required: true
          style: form
          explode: true
          schema:
            type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalBookingInfo'
        default:
          $ref: '#/components/responses/Error'
          description: ''
      security:
        - oauth2:
            - scheduler.meetings.meeting-link.read
components:
  schemas:
    ExternalBookingInfo:
      required:
        - allUsersBusyTimes
        - customParams
        - isOffline
        - linkId
        - linkType
      type: object
      properties:
        allUsersBusyTimes:
          type: array
          items:
            $ref: '#/components/schemas/ExternalUserBusyTimes'
        brandingMetadata:
          $ref: '#/components/schemas/ExternalBrandingMetadata'
        customParams:
          $ref: '#/components/schemas/ExternalMeetingsLinkSettings'
        isOffline:
          type: boolean
          description: >-
            Si la reunión se programó offline, lo que significa que no se creó
            ningún evento de calendario asociado.
        linkAvailability:
          $ref: '#/components/schemas/ExternalLinkAvailability'
        linkId:
          type: string
          description: El identificador único del enlace de la reunión.
        linkType:
          type: string
          description: >-
            El tipo de enlace de reunión. Los valores aceptados son:
            GROUP_CALENDAR, PERSONAL_LINK, ROUND_ROBIN_CALENDAR.
          enum:
            - GROUP_CALENDAR
            - PERSONAL_LINK
            - ROUND_ROBIN_CALENDAR
    ExternalUserBusyTimes:
      required:
        - busyTimes
        - isOffline
        - meetingsUser
      type: object
      properties:
        busyTimes:
          type: array
          items:
            $ref: '#/components/schemas/ExternalTimeRange'
        isOffline:
          type: boolean
          description: Si el usuario está offline.
        meetingsUser:
          $ref: '#/components/schemas/ExternalMeetingsUser'
    ExternalBrandingMetadata:
      required:
        - logoAltText
        - showMarketingAd
        - showSalesAd
      type: object
      properties:
        accent2Color:
          type: string
          description: El color de contraste secundario utilizado en el branding.
        accentColor:
          type: string
          description: El color de contraste principal utilizado en el branding.
        companyAddressLine1:
          type: string
          description: La primera línea de la dirección de la empresa.
        companyAddressLine2:
          type: string
          description: La segunda línea de la dirección de la empresa.
        companyAvatar:
          type: string
          description: La URL de la imagen del avatar de la empresa.
        companyCity:
          type: string
          description: La ciudad donde se encuentra la empresa.
        companyCountry:
          type: string
          description: El país donde se encuentra la empresa.
        companyDomain:
          type: string
          description: El dominio del sitio web de la empresa.
        companyName:
          type: string
          description: El nombre de la empresa.
        companyState:
          type: string
          description: El estado donde se encuentra la empresa.
        companyZip:
          type: string
          description: El código postal de la ubicación de la empresa.
        logoAltText:
          type: string
          description: El texto alt del logotipo actual.
        logoHeight:
          type: integer
          description: La altura del logotipo en píxeles.
          format: int32
        logoUrl:
          type: string
          description: La URL de una imagen de logotipo personalizada.
        logoWidth:
          type: integer
          description: El ancho del logotipo en píxeles.
          format: int32
        primaryColor:
          type: string
          description: El color principal utilizado en el branding.
        secondaryColor:
          type: string
          description: El color secundario utilizado en el branding.
        showMarketingAd:
          type: boolean
          description: Si se muestran anuncios de Marketing Hub.
        showSalesAd:
          type: boolean
          description: Si se muestran anuncios de Sales Hub.
    ExternalMeetingsLinkSettings:
      required:
        - availability
        - durations
        - formFields
        - legalConsentEnabled
        - meetingBufferTime
        - ownerPrioritized
        - startTimeIncrementMinutes
        - weeksToAdvertise
      type: object
      properties:
        availability:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ExternalClosedRange'
          description: >-
            Un arreglo que contiene la disponibilidad de un intervalo cerrado
            para un enlace de reunión. Los tiempos del intervalo cerrado se
            proporcionan como desplazamientos en minutos desde la medianoche
            (por ejemplo, 540 corresponde a las 9:00).
        customAvailabilityEndDate:
          type: integer
          description: >-
            La fecha de fin del período de disponibilidad personalizada de un
            enlace reunión, representada como tiempo Unix en milisegundos.
          format: int64
        customAvailabilityStartDate:
          type: integer
          description: >-
            La fecha de inicio del período de disponibilidad personalizada de un
            enlace reunión, representada como tiempo Unix en milisegundos.
          format: int64
        displayInfo:
          $ref: '#/components/schemas/ExternalLinkDisplayInfo'
        durations:
          type: array
          items:
            type: integer
            format: int64
        formFields:
          type: array
          items:
            $ref: '#/components/schemas/ExternalLinkFormField'
        guestSettings:
          $ref: '#/components/schemas/ExternalGuestSettings'
        language:
          type: string
          description: El ajuste de idioma utilizado para el enlace de la reunión.
        legalConsentEnabled:
          type: boolean
          description: >-
            Si la casilla de verificación de consentimiento legal se muestra
            durante la programación de la reunión.
        legalConsentOptions:
          $ref: '#/components/schemas/ExternalLegalConsentOptions'
        locale:
          type: string
          description: >-
            El ajuste de configuración regional utilizado para dar formato a
            fechas y horas en el enlace reunión.
        location:
          type: string
          description: El lugar físico o virtual donde se llevará a cabo la reunión.
        meetingBufferTime:
          type: integer
          description: >-
            El margen de tiempo mínimo en milisegundos entre reuniones
            consecutivas.
          format: int64
        ownerPrioritized:
          type: boolean
          description: >-
            Indica si el propietario de la reunión tiene prioridad durante la
            programación. Solo se aplica a los tipos de enlace de ROUND_ROBIN.
        redirectUrl:
          type: string
          description: La URL a la que se redirecciona después de programar una reunión.
        startTimeIncrementMinutes:
          type: string
          description: >-
            El incremento para los horarios de inicio disponibles de las
            reuniones, escrito como una palabra (por ejemplo, un incremento de
            15 minutos corresponde a `FIFTEEN`). `MEETING_DURATION` también es
            un valor válido.
          enum:
            - FIFTEEN
            - FIVE
            - FORTY_FIVE
            - MEETING_DURATION
            - NINETY
            - ONE_HUNDRED_TWENTY
            - SIXTY
            - TEN
            - THIRTY
            - TWENTY
        weeksToAdvertise:
          type: integer
          description: >-
            Propiedad anterior que indica el número de semanas de antelación con
            las que se anuncia la disponibilidad. Puede estar desactualizada o
            ser reemplazada por otras propiedades.
          format: int32
        welcomeScreenInfo:
          $ref: '#/components/schemas/ExternalMeetingsWelcomeScreenInfo'
    ExternalLinkAvailability:
      required:
        - hasMore
        - linkAvailabilityByDuration
      type: object
      properties:
        hasMore:
          type: boolean
          description: >-
            Si hay más horarios de reunión disponibles además del conjunto
            devuelto.
        linkAvailabilityByDuration:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ExternalLinkAvailabilityForDuration'
          description: >-
            Períodos de programación disponibles para la reunión, agrupados por
            duración.
    Error:
      required:
        - category
        - correlationId
        - message
      type: object
      properties:
        category:
          type: string
          description: La categoría del error
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Contexto de la condición de error
          example: >-
            {invalidPropertyName=[propertyValue], missingScopes=[scope1,
            scope2]}
        correlationId:
          type: string
          description: >-
            Un identificador único para la solicitud. Incluye este valor con
            cualquier informe de error o ticket de asistencia.
          format: uuid
          example: aeb5f871-7f07-4993-9211-075dc63e7cbf
        errors:
          type: array
          description: información adicional acerca del error
          items:
            $ref: '#/components/schemas/ErrorDetail'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Un mapa de nombres de enlaces a las URI asociadas que contienen
            documentación sobre el error o los pasos recomendados para
            solucionarlo
        message:
          type: string
          description: >-
            Un mensaje legible en el que se describa el error y los pasos para
            solucionarlo, si procede
          example: An error occurred
        subCategory:
          type: string
          description: >-
            Una categoría específica que contiene detalles más concretos acerca
            del error
      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
    ExternalTimeRange:
      required:
        - end
        - start
      type: object
      properties:
        end:
          type: integer
          description: >-
            La hora final del intervalo de tiempo, representada como tiempo Unix
            en milisegundos.
          format: int64
        start:
          type: integer
          description: >-
            La hora de inicio del intervalo de tiempo, representada como tiempo
            Unix en milisegundos.
          format: int64
    ExternalMeetingsUser:
      required:
        - calendarProvider
        - id
        - isSalesStarter
        - userId
        - userProfile
      type: object
      properties:
        calendarProvider:
          type: string
          description: >-
            El proveedor de calendario asociado con el usuario. Los valores
            aceptados son: GOOGLE, OFFICE365, EXCHANGE, UNKNOWN.
          enum:
            - EXCHANGE
            - GOOGLE
            - OFFICE365
            - UNKNOWN
        id:
          type: string
          description: >-
            El ID del usuario de reuniones. Este valor es diferente al ID del
            usuario.
        isSalesStarter:
          type: boolean
          description: Si el usuario tiene una licencia de Sales Starter.
        userId:
          type: string
          description: El ID del usuario.
        userProfile:
          $ref: '#/components/schemas/ExternalUserProfile'
    ExternalClosedRange:
      required:
        - end
        - start
      type: object
      properties:
        end:
          type: integer
          description: El valor final del intervalo cerrado, representado como un entero.
          format: int64
        start:
          type: integer
          description: >-
            El valor de inicio del intervalo cerrado, representado como un
            entero.
          format: int64
    ExternalLinkDisplayInfo:
      type: object
      properties:
        avatar:
          type: string
          description: La URL de la imagen de avatar personalizada cargada del usuario.
        companyAvatar:
          type: string
          description: La URL de la imagen del avatar de la empresa.
        headline:
          type: string
          description: >-
            Campo obsoleto sin impacto de la información de presentación del
            enlace.
        publicDisplayAvatarOption:
          type: string
          description: >-
            Opción para determinar qué avatar mostrar en la página de
            programación. Los valores aceptados son: PROFILE_IMAGE,
            COMPANY_LOGO, CUSTOM_AVATAR,
          enum:
            - COMPANY_LOGO
            - CUSTOM_AVATAR
            - PROFILE_IMAGE
    ExternalLinkFormField:
      required:
        - fieldType
        - isCustom
        - isRequired
        - label
        - name
        - options
        - type
      type: object
      properties:
        fieldType:
          type: string
          description: >-
            El tipo de campo de formulario específico. Corresponde a tipos de
            propiedad (por ejemplo, `select`, `radio`, `date`, etc.)
        isCustom:
          type: boolean
          description: Si el campo de formulario es personalizado.
        isRequired:
          type: boolean
          description: Si el campo de formulario es obligatorio.
        label:
          type: string
          description: La etiqueta de texto del campo de formulario.
        name:
          type: string
          description: El identificador del nombre del campo de formulario.
        options:
          type: array
          items:
            $ref: '#/components/schemas/ExternalOption'
        type:
          type: string
          description: >-
            El tipo de datos que acepta el campo de formulario (por ejemplo,
            `date`, `enumeration`, etc.)
    ExternalGuestSettings:
      required:
        - canAddGuests
        - maxGuestCount
      type: object
      properties:
        canAddGuests:
          type: boolean
          description: Indica si se pueden agregar invitados a la reunión.
        maxGuestCount:
          type: integer
          description: El número máximo de invitados que se pueden agregar a la reunión.
          format: int32
    ExternalLegalConsentOptions:
      required:
        - communicationConsentCheckboxes
        - communicationConsentText
        - isLegitimateInterest
        - legitimateInterestSubscriptionTypes
        - privacyPolicyText
        - processingConsentCheckboxLabel
        - processingConsentFooterText
        - processingConsentText
        - processingConsentType
      type: object
      properties:
        communicationConsentCheckboxes:
          type: array
          items:
            $ref: '#/components/schemas/ExternalCommunicationConsentCheckbox'
        communicationConsentText:
          type: string
          description: >-
            El texto que describe el consentimiento para las preferencias de
            comunicación.
        isLegitimateInterest:
          type: boolean
          description: Si la base jurídica para el tratamiento es interés legítimo.
        legitimateInterestLegalBasis:
          type: string
          description: >-
            La base jurídica para el tratamiento bajo interés legítimo. Los
            valores aceptados son: LEGITIMATE_INTEREST_PQL,
            LEGITIMATE_INTEREST_CLIENT, PERFORMANCE_OF_CONTRACT,
            CONSENT_WITH_NOTICE, NON_GDPR, PROCESS_AND_STORE
            LEGITIMATE_INTEREST_OTHER.
          enum:
            - CONSENT_WITH_NOTICE
            - LEGITIMATE_INTEREST_CLIENT
            - LEGITIMATE_INTEREST_OTHER
            - LEGITIMATE_INTEREST_PQL
            - NON_GDPR
            - PERFORMANCE_OF_CONTRACT
            - PROCESS_AND_STORE
        legitimateInterestSubscriptionTypes:
          type: array
          items:
            type: integer
            format: int64
        privacyPolicyText:
          type: string
          description: >-
            El texto que describe la política de privacidad del tratamiento de
            datos.
        processingConsentCheckboxLabel:
          type: string
          description: >-
            La etiqueta de la casilla de verificación utilizada para obtener el
            consentimiento para el tratamiento de datos.
        processingConsentFooterText:
          type: string
          description: >-
            El texto del pie de página que acompaña al consentimiento para el
            tratamiento de datos. Este campo no se usa en la plataforma de
            reuniones y siempre estará vacío.
        processingConsentText:
          type: string
          description: >-
            El texto que describe el consentimiento para el tratamiento de datos
            personales.
        processingConsentType:
          type: string
          description: >-
            El tipo de consentimiento requerido para el tratamiento. Los valores
            aceptados son: IMPLICIT, REQUIRED_CHECKBOX.
          enum:
            - IMPLICIT
            - REQUIRED_CHECKBOX
    ExternalMeetingsWelcomeScreenInfo:
      type: object
      properties:
        description:
          type: string
          description: >-
            Una breve descripción mostraba la pantalla de bienvenida debajo del
            título.
        logoUrl:
          type: string
          description: >-
            La URL de la imagen del logo que se mostrará en la pantalla de
            bienvenida; solo se usa si `useCompanyLogo` es falso.
        showWelcomeScreen:
          type: boolean
          description: >-
            Propiedad obsoleta. El valor se puede ignorar, pero siempre será
            falso.
        title:
          type: string
          description: El encabezado principal que se muestra en la pantalla de bienvenida.
        useCompanyLogo:
          type: boolean
          description: >-
            Si el logotipo de la empresa debe mostrarse en la pantalla de
            bienvenida.
    ExternalLinkAvailabilityForDuration:
      required:
        - availabilities
        - meetingDurationMillis
      type: object
      properties:
        availabilities:
          type: array
          items:
            $ref: '#/components/schemas/ExternalMeetingAvailability'
        meetingDurationMillis:
          type: integer
          description: La duración de la reunión en milisegundos.
          format: int64
    ErrorDetail:
      required:
        - message
      type: object
      properties:
        code:
          type: string
          description: El código de estado asociado al detalle del error
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Contexto de la condición de error
          example: '{missingScopes=[scope1, scope2]}'
        in:
          type: string
          description: El nombre del campo o parámetro en el que se encontró el error.
        message:
          type: string
          description: >-
            Un mensaje legible en el que se describa el error y los pasos para
            solucionarlo, si procede
        subCategory:
          type: string
          description: >-
            Una categoría específica que contiene detalles más concretos acerca
            del error
    ExternalUserProfile:
      required:
        - email
      type: object
      properties:
        email:
          type: string
          description: La dirección de correo del usuario.
        firstName:
          type: string
          description: El nombre del usuario.
        fullName:
          type: string
          description: El nombre completo del usuario.
        lastName:
          type: string
          description: El apellido del usuario.
    ExternalOption:
      required:
        - description
        - displayOrder
        - doubleData
        - hidden
        - label
        - readOnly
        - value
      type: object
      properties:
        description:
          type: string
          description: Una breve descripción de la opción.
        displayOrder:
          type: integer
          description: El orden en el que se debe mostrar la opción.
          format: int32
        doubleData:
          type: number
          description: Propiedad obsoleta. Siempre será 0.
        hidden:
          type: boolean
          description: Si la opción debe estar oculta del usuario.
        label:
          type: string
          description: La etiqueta de texto de la opción.
        readOnly:
          type: boolean
          description: Si la opción es de solo lectura.
        value:
          type: string
          description: El valor asociado con la opción.
    ExternalCommunicationConsentCheckbox:
      required:
        - communicationTypeId
        - label
        - required
      type: object
      properties:
        communicationTypeId:
          type: string
          description: >-
            El ID del formulario de consentimiento de comunicaciones que se está
            registrando.
        label:
          type: string
          description: La etiqueta de texto que describe el consentimiento otorgado.
        required:
          type: boolean
          description: Si la casilla de verificación de consentimiento es obligatoria.
    ExternalMeetingAvailability:
      required:
        - endMillisUtc
        - startMillisUtc
      type: object
      properties:
        endMillisUtc:
          type: integer
          description: >-
            La hora de finalización de la disponibilidad para la reunión,
            representada como tiempo Unix en milisegundos.
          format: int64
        startMillisUtc:
          type: integer
          description: >-
            La hora de inicio de la disponibilidad para la reunión, representada
            como tiempo Unix en milisegundos.
          format: int64
  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: ''

````