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

# Actualizar producto

> Actualiza los datos de un producto existente.

Actualiza un producto existente de tu empresa. Acepta los mismos campos que la creación (con `name` obligatorio). Si el producto no pertenece a tu empresa, la petición retorna un 404.

### Headers

<ParamField header="x-idempotency" type="string" required placeholder="Token único para garantizar la idempotencia de la petición">
  Token único para garantizar la idempotencia de la petición
</ParamField>

### Path Parameters

<ParamField path="id" type="string" required placeholder="9f5d85a0-1111-7000-aaaa-000000000001">
  ID del producto a actualizar. [Crear producto](/client/products/create).
</ParamField>

### Body

<ParamField body="name" type="string" required>
  Nombre del producto. Máximo 255 caracteres.
</ParamField>

<ParamField body="description" type="string">
  Descripción del producto. Máximo 1000 caracteres.
</ParamField>

<ParamField body="internal_id" type="string">
  Tu identificador interno del producto. Máximo 255 caracteres.
</ParamField>

<ParamField body="unit_label" type="string">
  Etiqueta de la unidad (ej. `asientos`). Máximo 50 caracteres.
</ParamField>

<ParamField body="tax_rate" type="number">
  Porcentaje de IVA. Valor entre 0 y 100.
</ParamField>

<ParamField body="marketing_features" type="array">
  Características de marketing (máximo 15). Cada elemento es un objeto `{ "name": string }`, donde `name` admite hasta 80 caracteres.
</ParamField>

<ParamField body="metadata" type="object">
  Datos adicionales de tu aplicación.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.onepay.la/v1/products/9f5d85a0-1111-7000-aaaa-000000000001 \
    -X PUT \
    -H "Authorization: Bearer sk_test_xxx" \
    -H "x-idempotency: idem_xxx" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "OnePay Pro",
      "description": "Para negocios en crecimiento acelerado.",
      "internal_id": "pro",
      "tax_rate": 19,
      "marketing_features": [
        { "name": "Clientes ilimitados" }
      ]
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.onepay.la/v1/products/9f5d85a0-1111-7000-aaaa-000000000001', {
    method: 'PUT',
    headers: {
      'Authorization': 'Bearer sk_test_xxx',
      'x-idempotency': 'idem_xxx',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      name: 'OnePay Pro',
      description: 'Para negocios en crecimiento acelerado.',
      internal_id: 'pro',
      tax_rate: 19,
      marketing_features: [
        { name: 'Clientes ilimitados' }
      ]
    })
  });
  const data = await response.json();
  console.log(data);
  ```

  ```python Python theme={null}
  import requests

  response = requests.put(
      'https://api.onepay.la/v1/products/9f5d85a0-1111-7000-aaaa-000000000001',
      headers={
          'Authorization': 'Bearer sk_test_xxx',
          'x-idempotency': 'idem_xxx'
      },
      json={
          'name': 'OnePay Pro',
          'description': 'Para negocios en crecimiento acelerado.',
          'internal_id': 'pro',
          'tax_rate': 19,
          'marketing_features': [
              {'name': 'Clientes ilimitados'}
          ]
      }
  )
  data = response.json()
  print(data)
  ```

  ```php PHP theme={null}
  <?php
  $curl = curl_init();

  curl_setopt_array($curl, [
      CURLOPT_URL => "https://api.onepay.la/v1/products/9f5d85a0-1111-7000-aaaa-000000000001",
      CURLOPT_CUSTOMREQUEST => "PUT",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_HTTPHEADER => [
          "Authorization: Bearer sk_test_xxx",
          "x-idempotency: idem_xxx",
          "Content-Type: application/json"
      ],
      CURLOPT_POSTFIELDS => json_encode([
          "name" => "OnePay Pro",
          "description" => "Para negocios en crecimiento acelerado.",
          "internal_id" => "pro",
          "tax_rate" => 19,
          "marketing_features" => [
              ["name" => "Clientes ilimitados"]
          ]
      ])
  ]);

  $data = json_decode(curl_exec($curl), true);
  curl_close($curl);
  print_r($data);
  ?>
  ```
</RequestExample>

### Response

<ResponseField name="id" type="string">
  Identificador único (UUID) del producto.
</ResponseField>

<ResponseField name="object" type="string">
  Siempre `product`.
</ResponseField>

<ResponseField name="name" type="string">
  Nombre del producto.
</ResponseField>

<ResponseField name="description" type="string | null">
  Descripción del producto.
</ResponseField>

<ResponseField name="active" type="boolean">
  `false` cuando el producto está archivado.
</ResponseField>

<ResponseField name="internal_id" type="string | null">
  Tu identificador interno del producto.
</ResponseField>

<ResponseField name="unit_label" type="string | null">
  Etiqueta de la unidad (ej. `asientos`).
</ResponseField>

<ResponseField name="tax_rate" type="number | null">
  Porcentaje de IVA (0-100).
</ResponseField>

<ResponseField name="default_price" type="string | null">
  ID del precio por defecto del producto.
</ResponseField>

<ResponseField name="marketing_features" type="array">
  Características de marketing (hasta 15), cada una con la forma `{ "name": string }`.
</ResponseField>

<ResponseField name="metadata" type="object | null">
  Datos adicionales de tu aplicación.
</ResponseField>

<ResponseField name="created_at" type="string">
  Fecha de creación (ISO 8601).
</ResponseField>

<ResponseField name="updated_at" type="string">
  Fecha de última actualización (ISO 8601).
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "9f5d85a0-1111-7000-aaaa-000000000001",
    "object": "product",
    "name": "OnePay Pro",
    "description": "Para negocios en crecimiento acelerado.",
    "active": true,
    "internal_id": "pro",
    "unit_label": null,
    "tax_rate": 19,
    "default_price": "9f5d85a0-2222-7000-aaaa-000000000002",
    "marketing_features": [
      { "name": "Clientes ilimitados" }
    ],
    "metadata": null,
    "created_at": "2026-07-13T12:00:00.000000Z",
    "updated_at": "2026-07-13T12:30:00.000000Z"
  }
  ```

  ```json 422 theme={null}
  {
    "message": "El campo name es obligatorio.",
    "code": 10001,
    "code_name": "validation_error",
    "errors": {
      "name": [
        "El campo name es obligatorio."
      ]
    }
  }
  ```

  ```json 409 theme={null}
  {
    "message": "No se puede generar la operación, genera un token de idempotencia y envíelo en los headers como x-idempotency",
    "code": 10003,
    "code_name": "idempotency_error"
  }
  ```

  ```json 404 theme={null}
  {
    "message": "No encontrado",
    "code": 10004,
    "code_name": "not_found"
  }
  ```
</ResponseExample>
