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

# Ejemplos de la API

> Llamadas curl para listar productos, importar un CSV, poner la foto de un producto y actualizar medios de pago.

## Qué es

Estos ejemplos usan la [autenticación con API key](https://docs.pos.terominds.com/api/autenticacion.md) contra `https://pos-api.terominds.com/api`. Reemplazá el `tenantId` y la clave. Las mutaciones necesitan una clave con alcance **escritura**.

```bash theme={null}
export TERO_API='https://pos-api.terominds.com/api'
export TERO_API_KEY='tero_live_aabbccdd_xxxxxxxx'
export TERO_TENANT_ID='00000000-0000-0000-0000-000000000001'
```

## Listar productos

```bash theme={null}
curl -sS "$TERO_API/admin/tenants/$TERO_TENANT_ID/catalog" \
  -H "Authorization: Bearer $TERO_API_KEY" \
  -H "Accept: application/json"
```

La respuesta incluye `categories`, `products` (con `eans`, `imageUrl` y `availableLocationIds`) y `recipes`. Para solo los nombres de categoría:

```bash theme={null}
curl -sS "$TERO_API/admin/tenants/$TERO_TENANT_ID/categories" \
  -H "Authorization: Bearer $TERO_API_KEY"
```

## Importar CSV: vista previa y confirmación

El CSV usa las mismas columnas que **Catálogo → Acciones → Importar CSV**: `nombre`, `precio_pesos`, `ean`, `categoria`, `iva_alicuota`, `stock`, `proveedor`, `control_prioritario`.

### 1. Vista previa

```bash theme={null}
curl -sS -X POST "$TERO_API/admin/tenants/$TERO_TENANT_ID/products/import/preview" \
  -H "Authorization: Bearer $TERO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"csvText":"nombre,precio_pesos,ean,categoria,iva_alicuota,stock,proveedor,control_prioritario\nAgua 500ml,800,7790000000001,Bebidas,21,24,,no\n"}'
```

Revisá `rows`, `summary` y `unknownSuppliers`. Cada fila trae `status` (`create`, `conflict`, `error`, `duplicate_ean`) y `data` ya normalizado.

### 2. Confirmar

Mandá las filas que quieras crear o actualizar. `defaultCategoryId` es obligatorio si alguna fila nueva no tiene categoría. `locationId` es obligatorio si hay `stock`.

```bash theme={null}
curl -sS -X POST "$TERO_API/admin/tenants/$TERO_TENANT_ID/products/import" \
  -H "Authorization: Bearer $TERO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "locationId": "11111111-1111-4111-8111-111111111111",
    "defaultCategoryId": "",
    "supplierDecisions": [],
    "rows": [
      {
        "line": 2,
        "action": "create",
        "data": {
          "nombre": "Agua 500ml",
          "categoria": "Bebidas",
          "precioPesos": 800,
          "ean": "7790000000001",
          "ivaAlicuota": 21,
          "stock": 24,
          "proveedor": null,
          "controlPrioritario": false
        }
      }
    ]
  }'
```

`action` puede ser `create`, `update` (requiere `productId`) o `skip`.

## Poner la foto de un producto

`PUT /products/:productId` reemplaza el producto. Primero obtené el registro (por ejemplo desde `/catalog`) y reenviá los campos actuales más `imageUrl`.

```bash theme={null}
curl -sS -X PUT "$TERO_API/admin/tenants/$TERO_TENANT_ID/products/$PRODUCT_ID" \
  -H "Authorization: Bearer $TERO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "categoryId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
    "name": "Agua 500ml",
    "pricePesos": 800,
    "sortOrder": 10,
    "imageUrl": "https://cdn.ejemplo.com/agua-500.jpg",
    "ean": "7790000000001",
    "ivaAlicuota": 21,
    "kind": "simple"
  }'
```

`imageUrl` debe ser una URL pública que el POS pueda descargar. Si también tenés el SHA-256 del archivo, podés enviarlo en `imageSha256`.

## Actualizar medios de pago

Leé el estado actual y volvé a enviar el cuerpo completo. Los campos que no mandes se interpretan como apagados o vacíos.

```bash theme={null}
curl -sS "$TERO_API/admin/tenants/$TERO_TENANT_ID/payment-methods" \
  -H "Authorization: Bearer $TERO_API_KEY"
```

```bash theme={null}
curl -sS -X PUT "$TERO_API/admin/tenants/$TERO_TENANT_ID/payment-methods" \
  -H "Authorization: Bearer $TERO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "cashEnabled": true,
    "cvuEnabled": true,
    "cvuNumber": "0000003100010000000001",
    "cvuAlias": "tienda.demo.mp",
    "cvuReceiverName": "Almacén Demo",
    "mercadopagoEnabled": false,
    "fluxisEnabled": false,
    "fluxisTransferEnabled": false,
    "otherMethods": [
      { "name": "Tarjeta", "enabled": true }
    ]
  }'
```

Mercado Pago conectado por OAuth y Fluxis aprovisionado siguen las mismas reglas que en el back office: la API no salta esos pasos. Para el detalle de cada medio, usá la guía de [Cobros](https://docs.pos.terominds.com/backoffice/cobros/vista-general.md).

## Relacionado

> **[Carga masiva CSV](https://docs.pos.terominds.com/backoffice/catalogo/carga-masiva-csv-respaldo.md)**
>
> El mismo archivo desde la pantalla.

> **[Productos](https://docs.pos.terominds.com/backoffice/catalogo/productos-precios-codigos.md)**
>
> Campos de un producto.

> **[Medios de pago](https://docs.pos.terominds.com/backoffice/cobros/otros-medios.md)**
>
> Efectivo, CVU y otros.

> **[Autenticación](https://docs.pos.terominds.com/api/autenticacion.md)**
>
> URL base y encabezados.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.