---
title: "Uso en el navegador y en el servidor"
description: "Qué métodos del SDK puede llamar una tienda online desde el navegador con una clave publicable, cuáles van en un servidor con una clave secreta y cómo conectar ambos en Next.js o Nuxt."
canonical_url: "https://requiply.com/docs/es/developers/typescript-sdk/browser-and-server-usage"
---
# Uso en el navegador y en el servidor

> Qué métodos del SDK puede llamar una tienda online desde el navegador con una clave publicable, cuáles van en un servidor con una clave secreta y cómo conectar ambos en Next.js o Nuxt.

## Llamadas desde el navegador y la tienda online

Una clave publicable puede ejecutar estos métodos directamente desde el navegador:

- `org.info()`
- `categories.list()`, `services.list()`, `inventory.list()`, `inventory.getGroup()`
- `availability.calendar()`, `availability.items()`, `pricing.quote()`
- `bookings.create({ ..., asRequest: true })`
- `saleItems.list()`, `saleItems.get()` y `saleLines` en los presupuestos y las solicitudes de reserva, mientras la organización [vende a los clientes](https://requiply.com/docs/es/developers/typescript-sdk/sales#con-una-clave-publicable)

La API pública acepta peticiones del navegador desde cualquier origen, así que no hay que registrar ningún dominio. Por sí solo, el SDK solo envía las cabeceras `Authorization`, `Accept` y `Content-Type`. Si añades cabeceras personalizadas, los navegadores bloquean la petición; consulta [Opciones de petición](https://requiply.com/docs/es/developers/typescript-sdk/request-options#cabeceras-para-todo-el-cliente).

## Llamadas desde el servidor

Usa una clave secreta desde un servidor de confianza para:

- `org.summary()`, `inventory.status()`
- Reservas normales: `bookings.create()` sin `asRequest`, `bookings.list()`, `bookings.get()`, `bookings.addNote()`
- `clients.lookup()`, `clients.create()`
- `sales.list()`, `sales.get()`, `sales.create()`
- Todos los [informes](https://requiply.com/docs/es/developers/typescript-sdk/reports)
- `adjustment` y `allowOutsideWorkingHours` en las reservas, y los productos de subalquiler de proveedores

Las claves secretas van en variables de entorno del servidor. No les pongas un prefijo que exponga sus valores a los paquetes del navegador, como `NEXT_PUBLIC_` o `NUXT_PUBLIC_`.

## Frameworks

Usa `@requiply/api-sdk` directamente. Una configuración habitual crea dos clientes:

```ts
// lib/requiply.ts
import { RequiplyClient } from '@requiply/api-sdk';

// Safe to ship to the browser.
export const storefront = new RequiplyClient({
  apiKey: 'rq_pk_live_...',
});

// Import only from server code: route handlers, server actions, Nuxt server/ routes.
export const createServerClient = () =>
  new RequiplyClient({ apiKey: process.env.REQUIPLY_SECRET_KEY! });
```

Pon el cliente de servidor en un módulo que solo importe el código de servidor. Si, aun así, se crea un cliente con clave secreta en un navegador, el SDK lanza un `TypeError` en lugar de enviar la clave.

## Pasarelas de pago

`bookings.create()` y `sales.create()` aceptan `payOnPickup`, `stripe`, `wayforpay`, `monobank` y `liqpay`. Un método online necesita una [integración de pagos](https://requiply.com/docs/es/guides/settings/integrations/payments) activa para esa pasarela; en ese caso, la respuesta incluye un `paymentUrl` al que enviar al cliente (las reservas también devuelven `paymentRedirect`, que puede ser un envío de formulario).

<note>

`supportedPaymentMethods` en `org.info()` y `org.summary()` lista `payOnPickup` y las integraciones conectadas de `monobank`, `liqpay` y `wayforpay`, pero no Stripe, aunque esté conectado. El SDK tipa el campo con todos los métodos de pago para que tu código siga funcionando cuando se añada Stripe.

</note>


## Sitemap

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