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

# Retrieve a public catalog CMS product

> Referencia detallada para GET /v1/catalog/products/{id_or_slug}.

## Uso

Usalo para leer catalogo publico y construir experiencias de discovery sin duplicar datos de productos o categorias.

## Antes de llamar

| Tema             | Detalle                                           |
| ---------------- | ------------------------------------------------- |
| Metodo           | `GET`                                             |
| Ruta             | `/v1/catalog/products/{id_or_slug}`               |
| Auth             | Bearer API key del ambiente correcto.             |
| Scope            | `catalog:read`                                    |
| Idempotencia     | No aplica para lecturas.                          |
| Guia relacionada | [API Reference overview](/api-reference/overview) |

## Patron recomendado

* Ejecuta esta lectura desde backend cuando incluya datos privados del tenant.
* Consulta el bloque OpenAPI de esta pagina para el shape exacto de parametros, body y respuestas.

## Ejemplo minimo

```bash terminal theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl -sS "https://api.simplepay.mx/v1/catalog/products/experiencia-isla" \
  -H "Authorization: Bearer $SIMPLEPAY_API_KEY"
```

## Errores a manejar

* `400` indica payload, parametros o estado invalido.
* `401` o `403` indican API key, ambiente o scopes incorrectos.
* `404` significa que el recurso no existe para ese tenant o ambiente.
* `429` y `5xx` se pueden reintentar con backoff; en writes conserva la misma idempotency key.

## Contrato OpenAPI

El playground, parametros, body y respuestas de abajo salen de `/openapi.json`. Si el contrato cambia, actualiza la spec y regenera esta pagina.


## OpenAPI

````yaml openapi.json GET /v1/catalog/products/{id_or_slug}
openapi: 3.1.0
info:
  title: SimplePay API
  version: '2026-06-13'
servers:
  - url: https://api.simplepay.mx
security:
  - SimplePayApiKey: []
paths:
  /v1/catalog/products/{id_or_slug}:
    get:
      summary: Retrieve a public catalog CMS product
      operationId: getCatalogProduct
      parameters:
        - name: id_or_slug
          in: path
          required: true
          schema:
            type: string
        - name: locale
          in: query
          schema:
            enum:
              - es
              - en
              - pt
              - de
              - fr
              - zh-Hans
              - zh
              - zh-hans
      responses:
        '200':
          description: Public catalog CMS product
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogProduct'
components:
  schemas:
    CatalogProduct:
      type: object
      properties:
        active:
          type: boolean
        categories:
          type: array
          items:
            $ref: '#/components/schemas/CatalogCategory'
        content:
          type: object
          additionalProperties: true
        description:
          type: string
        fallback:
          $ref: '#/components/schemas/CatalogFieldFallback'
        id:
          type: string
          format: uuid
        locale:
          enum:
            - es
            - en
            - pt
            - de
            - fr
            - zh-Hans
        marketingFeatures:
          type: array
          items:
            type: string
        name:
          type: string
        object:
          const: catalog_product
        primaryCategory:
          $ref: '#/components/schemas/CatalogCategory'
        productType:
          enum:
            - appointment
            - bundle
            - class
            - scheduled_offer
            - experience
            - package
            - rental
            - service
            - standard
            - date_range
        slug:
          type: string
        updatedAt:
          type: string
          format: date-time
        bundle:
          $ref: '#/components/schemas/CatalogBundle'
    CatalogCategory:
      type: object
      properties:
        active:
          type: boolean
        description:
          type: string
        fallback:
          $ref: '#/components/schemas/CatalogFieldFallback'
        id:
          type: string
          format: uuid
        locale:
          enum:
            - es
            - en
            - pt
            - de
            - fr
            - zh-Hans
        name:
          type: string
        object:
          const: catalog_category
        parentCategoryId:
          type: string
          format: uuid
        slug:
          type: string
        sortOrder:
          type: integer
        updatedAt:
          type: string
          format: date-time
    CatalogFieldFallback:
      type: object
      additionalProperties:
        type:
          - string
          - 'null'
        enum:
          - es
          - en
          - pt
          - de
          - fr
          - zh-Hans
          - base
          - id
          - null
    CatalogBundle:
      type: object
      properties:
        versionId:
          type: string
          format: uuid
        versionNumber:
          type: integer
          minimum: 1
        chargeMode:
          enum:
            - fixed_price
            - sum_components
        components:
          type: array
          items:
            $ref: '#/components/schemas/CatalogBundleComponent'
    CatalogBundleComponent:
      type: object
      properties:
        id:
          type: string
          format: uuid
        object:
          const: catalog_bundle_component
        locale:
          enum:
            - es
            - en
            - pt
            - de
            - fr
            - zh-Hans
        slug:
          type: string
        name:
          type: string
        description:
          type: string
        fallback:
          $ref: '#/components/schemas/CatalogFieldFallback'
        productType:
          enum:
            - appointment
            - bundle
            - class
            - scheduled_offer
            - experience
            - package
            - rental
            - service
            - standard
            - date_range
        quantity:
          type: integer
          minimum: 1
        categories:
          type: array
          items:
            $ref: '#/components/schemas/CatalogCategory'
  securitySchemes:
    SimplePayApiKey:
      type: http
      scheme: bearer

````