# Actualizar transacción

> Actualiza una transacción existente. Todos los campos son opcionales: envía solo lo que quieres cambiar.

Página: https://doc.rapidchargeback.com/es/canais/transactions/atualizar-transacao/

Actualiza una transacción existente. Todos los campos son opcionales: envía solo lo que quieres cambiar.

Cuando se envían child records (`items`, `addresses`, `payments`, `refunds`, `customer`), **reemplazan por completo** los registros existentes.

## Endpoint

```
PATCH https://api.rapidchargeback.com/api/v1/transactions/:id
```

## Autenticación

```
Authorization: Basic base64(client_id:client_secret)
Content-Type: application/json
```

---

## Parámetro de URL

| Parámetro | Tipo | Descripción |
|---|---|---|
| `id` | string (UUID) | ID de la transacción (devuelto en el campo `id` de la respuesta de creación) |

¿No guardaste el `id`? Encuentra la transacción [por el ID de tu sistema](https://doc.rapidchargeback.com/es/canais/transactions/consultar-transacao/#por-el-id-de-tu-sistema).

---

## Campos aceptados

Todos los campos aceptados por [Crear transacción](https://doc.rapidchargeback.com/es/canais/transactions/criar-transacao/) se pueden enviar aquí, todos opcionales:

- Los campos enviados reemplazan el valor actual
- Los campos omitidos mantienen el valor actual
- Los child records enviados (`items`, `addresses`, etc.) reemplazan por completo los existentes

---

## Validaciones

- Si se cambia `merchant_id`, el nuevo merchant debe pertenecer a tu empresa
- Si se cambian `external_id` o `external_source`, la combinación no puede duplicar otra transacción existente
- Si la transacción ya fue usada por alguna solución (ej.: consultada por la **Prevención**), la actualización se bloquea con `409 Conflict`

---

## Ejemplo de solicitud

### Actualizar solo el ARN y el auth_code

```bash
curl -X PATCH https://api.rapidchargeback.com/api/v1/transactions/00000000-0000-0000-0000-000000000042 \
  -H "Authorization: Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=" \
  -H "Content-Type: application/json" \
  -d '{
    "arn": "74537119547024600128228",
    "auth_code": "AUTH999"
  }'
```

### Actualizar ítems (reemplaza todos los ítems existentes)

```bash
curl -X PATCH https://api.rapidchargeback.com/api/v1/transactions/00000000-0000-0000-0000-000000000042 \
  -H "Authorization: Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 300.00,
    "items": [
      { "product_description": "Plano Premium", "unit_price": 150.00 },
      { "product_description": "Taxa de Setup", "unit_price": 150.00 }
    ]
  }'
```

---

## Ejemplos de respuesta

### Éxito

```json
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000042",
    "merchant_id": "00000000-0000-0000-0000-000000000001",
    "amount": 300.00,
    "transaction_items": [
      { "product_description": "Plano Premium", "unit_price": 150.00 },
      { "product_description": "Taxa de Setup", "unit_price": 150.00 }
    ]
  }
}
```

### Transacción no encontrada

```json
{
  "error": {
    "code": "TRANSACTION_NOT_FOUND",
    "message": "Transaction not found"
  }
}
```

### Transacción inmutable (ya usada por una solución)

```json
{
  "error": {
    "code": "TRANSACTION_IMMUTABLE",
    "message": "Transaction cannot be modified: it has been used by a network event"
  }
}
```

### Duplicado de external_id

```json
{
  "error": {
    "code": "TRANSACTION_DUPLICATE",
    "message": "Another transaction with this external_source/external_id already exists"
  }
}
```
