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

# Products

> Create one-time, subscription, or usage-based products in minutes. Manage pricing, media, fields, and automated entitlements - all in one place.

<Info>
  Products are the foundation of Dodo Payments. Whether you sell a one‑time download, a recurring subscription, or usage‑based access, you start by creating a product. Each product defines how it’s priced, presented at checkout, and fulfilled after purchase.
</Info>

<CardGroup cols={3}>
  <Card title="One‑Time" icon="credit-card" href="/features/one-time-payment-products">
    Charge once for lifetime access or a single deliverable.
  </Card>

  <Card title="Subscriptions" icon="repeat" href="/features/subscription">
    Bill on a schedule with trials, proration, and add‑ons.
  </Card>

  <Card title="Usage‑Based" icon="arrow-trend-up" href="/features/usage-based-billing/introduction">
    Medir el consumo y la factura según el uso real.
  </Card>
</CardGroup>

## Create a product

You can create products from the dashboard or via API. Choose the pricing model up‑front, One‑Time, Subscription, or Usage‑Based and then configure details. The pricing model can’t be changed later; create a new product if you need a different model.

<Steps>
  <Step title="Name & description">
    Provide a clear title and a concise value‑oriented description. Markdown is supported in descriptions.

    <Tip>
      Keep the first sentence customer‑facing and outcome‑oriented; it appears prominently in checkout.
    </Tip>

    <Frame>
      <img src="https://mintcdn.com/dodopayments/r-ndtvzx3WhKqwER/images/products.png?fit=max&auto=format&n=r-ndtvzx3WhKqwER&q=85&s=fb41221c4f2af4de0155e71de1ac6904" alt="Productos" style={{ maxHeight: '500px', width: 'auto' }} width="1911" height="927" data-path="images/products.png" />
    </Frame>
  </Step>

  <Step title="Pricing model & price">
    Select the pricing model:

    * **One‑Time**: Fixed price paid once.
    * **Subscription**: Recurring price with interval and optional trial.
    * **Usage‑Based**: Price derived from metered events.

    Then set pricing:

    * **Price**: Importe base y divisa. Puedes establecer el precio base en **cualquier divisa que Dodo Payments pueda cobrar**, no solo USD. Usa el selector de divisas con búsqueda para encontrar una divisa; **USD, GBP, EUR e INR** están fijadas en la parte superior de la lista.
    * **Discount (%)**: Descuento opcional en línea que se muestra en el checkout y las facturas.
    * Para las suscripciones, establece **Repeat every** (por ejemplo, 1 mes o 1 año), **Trial days** y un **Trial amount** opcional para una [prueba de pago](/features/subscription#paid-trials). El precio de la suscripción debe ser de al menos **\$1** (o el equivalente en la divisa elegida); no se admiten importes inferiores a este mínimo y la suscripción no funcionará.

    <Info>
      Los clientes que se encuentren fuera de tu divisa base seguirán recibiendo cargos mediante [Adaptive Currency](/features/adaptive-currency), por lo que puedes crear precios en la divisa que mejor se adapte a tu mercado sin cambiar la forma en que se cobra a los compradores.
    </Info>

    <Tip>
      ¿Quieres un precio fijo por divisa o país en lugar de una conversión de FX en tiempo real? Establece un `pricing_mode` en el producto y añade reglas de [Localized Pricing](/features/localized-pricing), por ejemplo, 9,99 € en EUR o ₹999 en India.
    </Tip>

    <Warning>
      Cambiar el precio solo afecta a las compras nuevas. Las suscripciones existentes siguen las reglas de cambio de plan.
    </Warning>
  </Step>

  <Step title="Product media">
    Sube imágenes para mostrar el producto en el checkout y las facturas. Se admiten PNG/JPG/WebP de hasta 3 MB. Puedes reordenarlas o sustituirlas en cualquier momento.
  </Step>

  <Step title="Automated entitlements (Under Advanced Settings)">
    Asocia el fulfillment que se active automáticamente después del pago:

    * **License Keys**: Emite y valida claves únicas
    * **File Downloads**: Concede acceso seguro a archivos
    * **Custom**: Activa tu propia lógica de derechos mediante webhooks

    Añade o elimina beneficios a medida que evoluciona tu oferta. Los suscriptores existentes obtendrán o perderán acceso según corresponda.
  </Step>
</Steps>

## Variantes y opciones de precios

En lugar de usar variantes dentro de un producto, crea productos independientes para cada opción de precios (por ejemplo, Mensual y Anual). Después, agrúpalos en una **Product Collection** para presentar todas las opciones en un único checkout y habilitar el cambio de plan en el Customer Portal.

<Frame>
  <img src="https://mintcdn.com/dodopayments/2YrxTqbaYgAm54C_/images/product-collection/checkout-page.png?fit=max&auto=format&n=2YrxTqbaYgAm54C_&q=85&s=1890932384bc32c8126c7993f3581855" alt="Product Collections" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/product-collection/checkout-page.png" />
</Frame>

### ¿Por qué este enfoque?

* **Modelos de precios claros**: Cada producto tiene un único modelo de precios bien definido (único, suscripción o basado en el uso)
* **APIs predecibles**: Integraciones más sencillas sin lógica de variantes anidadas
* **Informes más fáciles**: Realiza un seguimiento de los ingresos y las métricas por producto sin agregar variantes
* **Checkout flexible**: Muestra varios productos uno al lado del otro para que los clientes puedan compararlos y elegir

### Cómo funcionan las Product Collections

1. **Crea productos**: Configura productos individuales para cada plan (por ejemplo, Starter Monthly, Starter Annual, Pro Monthly, Pro Annual)
2. **Agrúpalos en una colección**: Añade productos relacionados a una Product Collection
3. **Checkout unificado**: Los clientes ven todas las opciones en un único checkout y seleccionan su plan preferido
4. **Cambio de plan**: Los clientes pueden mejorar o reducir su plan entre productos de la misma colección mediante el Customer Portal

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  Agrupa productos relacionados para ofrecer experiencias de checkout unificadas y procesos fluidos de mejora o reducción de plan.
</Card>

## Gestión de productos

Puedes gestionar productos mediante el dashboard o programáticamente a través de la API. La API ofrece control total sobre la creación, actualización, consulta, carga de imágenes y archivado de productos.

### Gestión desde el dashboard

* **Update**: Edita el nombre, la descripción, las imágenes, el precio, los campos y los beneficios en cualquier momento (el modelo de precios es inmutable).
* **Archive**: Oculta un producto de las compras nuevas sin interrumpir a los clientes existentes. Puedes desarchivarlo más adelante.
* **Drafts**: Un producto en progreso se guarda como borrador para que puedas volver a él más tarde. Los borradores se mantienen **por separado para el modo de prueba y el modo activo**, de modo que un producto sin terminar en un modo nunca afecta al otro. Usa **Clear Draft** para descartarlo y empezar de cero.

<Tip>
  Las páginas de formularios de productos y colecciones incluyen botones de acción en el encabezado, por lo que puedes guardar sin desplazarte hasta el final de un formulario largo.
</Tip>

### Gestión mediante la API

Las siguientes instrucciones te permiten crear, actualizar, gestionar y consultar productos, incluida la carga de imágenes.

<AccordionGroup>
  <Accordion title="Creating a Product">
    Un producto puede ser un artículo de compra única o un servicio basado en una suscripción. Para crear un producto nuevo, envía una solicitud `POST` al endpoint `/products` con detalles como el nombre, la descripción, el precio, la divisa y si se trata de un producto recurrente.

    Para los productos recurrentes, establece el objeto `price` en un precio recurrente (`type: recurring_price`) y especifica `payment_frequency_interval` y `subscription_period_interval` (`Day`, `Week`, `Month` o `Year`), junto con sus recuentos correspondientes.

    <Card title="Create Product API" icon="code" href="/api-reference/products/post-products">
      Consulta la estructura detallada de la solicitud y la respuesta en la documentación de la API Create Product.
    </Card>
  </Accordion>

  <Accordion title="Updating a Product">
    Para modificar un producto existente, envía una solicitud `PATCH` al endpoint `/products/{product_id}`. Puedes actualizar propiedades como el nombre, el precio y la descripción, y mantener sin cambios los demás detalles.

    Asegúrate de que `product_id` en el endpoint coincida con un producto existente.

    <Card title="Update Product API" icon="code" href="/api-reference/products/patch-products">
      Consulta la estructura detallada de la solicitud y la respuesta en la documentación de la API Update Product.
    </Card>
  </Accordion>

  <Accordion title="Retrieving Products">
    Puedes obtener una lista de los productos almacenados en tu cuenta mediante una solicitud `GET` al endpoint `/products`. Esto te permite consultar los detalles de los productos, incluidos los productos activos y archivados.

    <Card title="Retrieve Products API" icon="code" href="/api-reference/products/get-products">
      Consulta la estructura detallada de la solicitud y la respuesta en la documentación de la API Retrieve Products.
    </Card>
  </Accordion>

  <Accordion title="Uploading Product Images">
    Puedes asociar una imagen a un producto cargándola en AWS S3 mediante una URL prefirmada proporcionada por la API. Primero, solicita una URL de carga de imágenes al endpoint `/products/{product_id}/images` y, después, usa la URL proporcionada para cargar la imagen en un plazo de 60 segundos.

    <Warning>
      La URL prefirmada caduca en 60 segundos, por lo que la imagen debe cargarse dentro de ese plazo.
    </Warning>

    Una vez recibida la URL prefirmada de la API, carga la imagen mediante el método `PUT`. Esto garantiza un acceso seguro y temporal a AWS S3 para cargar la imagen.

    **Bibliotecas compatibles para cargar en S3:**

    * **Node.js**: `axios`, `node-fetch`
    * **Python**: `requests`, `boto3`
    * **Go**: `net/http`
    * **PHP**: `GuzzleHttp`
    * **Ruby**: `rest-client`

    Si la carga se realiza correctamente, AWS S3 devolverá un estado `200 OK`, lo que indica que la imagen se ha almacenado correctamente.

    <Card title="Upload Product Image API" icon="code" href="/api-reference/products/put-products-images">
      Consulta la estructura detallada de la solicitud y la respuesta en la documentación de la API Upload Product Image.
    </Card>
  </Accordion>

  <Accordion title="Archiving a Product">
    Si ya no deseas mostrar o utilizar un producto, puedes archivarlo mediante una solicitud `DELETE` al endpoint `/products/{id}`. Esta acción oculta el producto, pero no lo elimina de forma permanente.

    <Card title="Archive Product API" icon="code" href="/api-reference/products/archive-product">
      Consulta la estructura detallada de la solicitud y la respuesta en la documentación de la API Archive Product.
    </Card>
  </Accordion>

  <Accordion title="Unarchiving a Product">
    Si necesitas restaurar un producto archivado, envía una solicitud `POST` al endpoint `/products/{product_id}/unarchive`. Esto reactivará el producto y hará que vuelva a estar disponible para su uso.

    <Card title="Unarchive Product API" icon="code" href="/api-reference/products/unarchive-product">
      Consulta la estructura detallada de la solicitud y la respuesta en la documentación de la API Unarchive Product.
    </Card>
  </Accordion>

  <Accordion title="Checkout & fulfillment">
    Crea flujos de pago o suscripción a partir de productos y realiza el fulfillment automáticamente mediante beneficios y webhooks.

    <CardGroup cols={3}>
      <Card title="Checkout Sessions" icon="code" href="/developer-resources/checkout-session">
        Crea sesiones de checkout para compras únicas o suscripciones.
      </Card>

      <Card title="Payment Webhooks" icon="code" href="/developer-resources/webhooks/intents/payment">
        Reacciona a los eventos del ciclo de vida de los pagos.
      </Card>

      <Card title="Subscription Webhooks" icon="code" href="/developer-resources/webhooks/intents/subscription">
        Gestiona los eventos de creación, renovación y cancelación de suscripciones.
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Mejores prácticas

* **Empieza con claridad**: Separa los productos para cada opción de precios (Mensual frente a Anual)
* **Usa las pruebas con criterio**: Combina las pruebas con la incorporación para impulsar la activación
* **Automatiza el fulfillment**: Usa beneficios y webhooks para realizar entregas al instante
* **Añade metadatos**: Almacena los ID de tu sistema para la conciliación

<Check>
  Ya puedes crear productos y empezar a vender: artículos únicos, recurrentes o basados en el uso.
</Check>

## Relacionado

<CardGroup cols={2}>
  <Card title="Product Analytics" icon="chart-mixed" href="/features/analytics-and-reporting#product-level-analytics">
    Haz un seguimiento de los ingresos, clientes, retención, suscriptores y MRR de cada producto individual.
  </Card>

  <Card title="Localized Pricing" icon="earth-americas" href="/features/localized-pricing">
    Establece precios fijos por divisa o país en un producto en lugar de depender de los tipos de cambio en tiempo real.
  </Card>
</CardGroup>
