---
title: "Disponibilidad y precios"
description: "Comprueba la disponibilidad por fechas y calcula presupuestos de alquiler tipados."
canonical_url: "https://requiply.com/docs/es/developers/typescript-sdk/availability-and-pricing"
---
# Disponibilidad y precios

> Comprueba la disponibilidad por fechas y calcula presupuestos de alquiler tipados.

Los tres métodos funcionan con una clave publicable, así que una tienda online puede llamarlos directamente desde el navegador.

<note>

Los flujos de disponibilidad y de presupuesto con una clave publicable no muestran ni aceptan productos de subalquiler de proveedores. Usa una clave secreta en un servidor de confianza cuando la organización tenga activada la función de subalquileres y tu integración necesite esos productos.

</note>

## `availability.calendar()`

```ts
availability.calendar(
  input: AvailabilityCalendarInput,
  options?: RequiplyRequestOptions,
): Promise<AvailabilityCalendarResponse>
```

Obligatorios: `startDate` y `endDate` como fechas simples (`YYYY-MM-DD`), con un máximo de 366 días entre ellas. Un valor con hora se convierte a su fecha en UTC, lo que puede desplazarlo un día. El parámetro opcional `groupIds` limita el calendario a un máximo de 200 productos.

```ts
const { days } = await requiply.availability.calendar({
  startDate: '2026-07-01',
  endDate: '2026-07-07',
  groupIds: [cameraKitId],
});
```

Cada día incluye el grupo, la cantidad total, la cantidad reservada y un `availabilityStatus` que puede ser `null`.

## `availability.items()`

```ts
availability.items(
  input: AvailabilityItemsInput,
  options?: RequiplyRequestOptions,
): Promise<AvailabilityItemsResponse>
```

Obligatorios: `startDate` y `endDate`; `endDate` no puede ser anterior a `startDate`. Las fechas y horas sin desfase horario se interpretan en la zona horaria de la organización. Opcionales: `search`, `limit` (de 1 a 100, por defecto 25) y `cursor`.

```ts
const page = await requiply.availability.items({
  startDate: '2026-07-01T10:00:00',
  endDate: '2026-07-03T18:00:00',
  search: 'camera',
  limit: 25,
});

const nextCursor = page.nextCursor;
```

La respuesta usa la misma estructura de artículo de inventario que `inventory.list()` y devuelve `nextCursor: string | null`. Solo lista los productos que tienen al menos una unidad libre durante todo el periodo. Aquí `categoryId` siempre es `null`; usa `inventory.list()` con las mismas fechas cuando necesites las categorías.

## `pricing.quote()`

```ts
pricing.quote(
  input: PricingQuoteInput,
  options?: RequiplyRequestOptions,
): Promise<PricingQuoteResponse>
```

Obligatorios: `startDate`, `endDate` e `items`. Cada artículo necesita un `groupId` (el `id` del producto) y una `quantity`. `items` puede estar vacío cuando envías `bundles`. Opcionales:

<table>
<thead>
  <tr>
    <th>
      Campo
    </th>
    
    <th>
      Qué hace
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        bundles
      </code>
    </td>
    
    <td>
      Los packs que se reservan, como <code>
        { bundleId, quantity }
      </code>
      
      , con <code>
        quantity
      </code>
      
       en packs completos, obtenidos de <a href="https://requiply.com/docs/es/developers/typescript-sdk/inventory-and-categories#bundleslist">
        <code>
          bundles.list()
        </code>
      </a>
      
      . Sus componentes se añaden a los artículos. Desde la 0.2.1; necesita la función de packs de la organización.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        services
      </code>
    </td>
    
    <td>
      Servicios adicionales por <code>
        serviceId
      </code>
      
      , obtenidos de <code>
        services.list()
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        clientId
      </code>
    </td>
    
    <td>
      Aplica el descuento porcentual de ese cliente. Pensado para integraciones de servidor que ya conocen al cliente.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        adjustment
      </code>
    </td>
    
    <td>
      Un <a href="https://requiply.com/docs/es/developers/typescript-sdk/bookings#ajuste-del-coste-de-la-reserva">
        ajuste del coste de la reserva
      </a>
      
      . Solo con clave secreta.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        saleLines
      </code>
    </td>
    
    <td>
      Productos vendidos con la reserva. Consulta <a href="https://requiply.com/docs/es/developers/typescript-sdk/sales#productos-en-una-reserva">
        Ventas y productos en venta
      </a>
      
      ; una clave publicable solo puede enviarlos mientras la organización <a href="https://requiply.com/docs/es/developers/typescript-sdk/sales#con-una-clave-publicable">
        vende a los clientes
      </a>
      
      .
    </td>
  </tr>
</tbody>
</table>

```ts
const quote = await requiply.pricing.quote({
  startDate: '2026-07-01T10:00:00',
  endDate: '2026-07-03T18:00:00',
  items: [{ groupId: cameraKitId, quantity: 2 }],
  services: [{ serviceId: deliveryServiceId }],
});

console.log(quote.currency, quote.total);
```

Las fechas y horas sin desfase horario se interpretan en la zona horaria de la organización, igual que en [`bookings.create()`](https://requiply.com/docs/es/developers/typescript-sdk/bookings). Un presupuesto se calcula exactamente igual que la reserva, así que el `total` que muestras es el total que tendrá la reserva.

### Respuesta del presupuesto

<table>
<thead>
  <tr>
    <th>
      Campo
    </th>
    
    <th>
      Qué contiene
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        itemsSubtotal
      </code>
      
      , <code>
        servicesSubtotal
      </code>
    </td>
    
    <td>
      Los productos de alquiler y los servicios antes de cualquier descuento o ajuste.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        discountableSubtotal
      </code>
    </td>
    
    <td>
      La parte a la que se aplica el descuento del cliente. Los servicios con <code>
        excludedFromDiscount
      </code>
      
       no están incluidos.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        bundleDiscountAmount
      </code>
      
      , <code>
        lineBundles
      </code>
    </td>
    
    <td>
      Lo que se ahorra con los packs, ya incluido en <code>
        total
      </code>
      
       (<code>
        0
      </code>
      
       sin packs), y una fila por pack con su <code>
        quantity
      </code>
      
      , <code>
        discountPercent
      </code>
      
      , <code>
        grossTotal
      </code>
      
      , <code>
        discountAmount
      </code>
      
       y los <code>
        components
      </code>
      
       de cada pack. <code>
        lineItems
      </code>
      
       contiene las cantidades combinadas de las unidades en packs y las sueltas. Desde la 0.2.1.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        discountPercentage
      </code>
      
      , <code>
        discountAmount
      </code>
    </td>
    
    <td>
      El descuento del cliente y lo que descuenta, después del descuento de los packs.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        adjustment
      </code>
      
      , <code>
        adjustmentAmount
      </code>
    </td>
    
    <td>
      El <a href="https://requiply.com/docs/es/developers/typescript-sdk/bookings#ajuste-del-coste-de-la-reserva">
        ajuste del coste de la reserva
      </a>
      
       con el que se calculó el presupuesto, o <code>
        null
      </code>
      
      , y su efecto económico con signo (<code>
        0
      </code>
      
       para <code>
        units
      </code>
      
      , que cambia en cambio el periodo cobrado).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        saleSubtotal
      </code>
      
      , <code>
        lineSaleItems
      </code>
    </td>
    
    <td>
      Los productos vendidos con la reserva, cuando pasas <code>
        saleLines
      </code>
      
      . Nunca se les aplica descuento ni ajuste. Consulta <a href="https://requiply.com/docs/es/developers/typescript-sdk/sales#productos-en-una-reserva">
        Ventas y productos en venta
      </a>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        total
      </code>
    </td>
    
    <td>
      Lo que cuesta la reserva, productos vendidos incluidos.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        lineItems
      </code>
      
      , <code>
        lineServices
      </code>
    </td>
    
    <td>
      Una fila por producto o servicio con su subtotal. <code>
        unitCount
      </code>
      
       es el número de días, horas o meses cobrados.
    </td>
  </tr>
</tbody>
</table>


## Sitemap

See the full [sitemap](https://requiply.com/docs/sitemap.md) for all pages.
