# Gestiona el ciclo de vida de un enlace

Un enlace de pago tiene tres estados posibles: `ACTIVE`, `INACTIVE` y `EXPIRED`. Esta guía muestra cómo transicionar entre ellos y cómo actualizar un enlace existente.

## Transiciones de estado

| Desde | Hasta | Disparador |
| --- | --- | --- |
| — | `ACTIVE` | Se crea el enlace de pago |
| `ACTIVE` | `INACTIVE` | El vendedor lo desactiva mediante PATCH |
| `ACTIVE` | `EXPIRED` | Se alcanza la fecha de expiración (automático) |
| `ACTIVE` | `EXPIRED` | Se alcanza el límite de `max_orders` (agotado) |
| `INACTIVE` | `ACTIVE` | El vendedor lo reactiva mediante PATCH |
| `EXPIRED` | — | Terminal mediante transición automática — consulta la nota a continuación |

> **Reactivar un enlace expirado:** un enlace en estado `EXPIRED` puede volver a estar activo si actualizas la fecha de expiración a una fecha futura y defines el estado como activo. Puedes hacerlo mediante la ruta `PUT` o la ruta `PATCH`.

## Cómo funciona

Características clave:

- **Tres estados**: un enlace está `ACTIVE` cuando se crea, `INACTIVE` cuando el vendedor lo desactiva, y `EXPIRED` cuando se alcanza su fecha de expiración o su límite de `max_orders` (agotado).
- **PATCH para estado o expiración**: usa `PATCH /payment-links/{link_id}` para desactivar, reactivar o cambiar la fecha de expiración sin reenviar el enlace completo.
- **PUT para reemplazo completo**: usa `PUT /payment-links/{link_id}` para reemplazar el enlace completo; se reemplazan todos los campos del cuerpo, con la misma estructura que `POST /payment-links`.
- **GET para inspeccionar**: recupera el estado actual de un enlace en cualquier momento; un enlace inexistente devuelve `404` (`payment_link_not_found`).
- **Reactivar un enlace expirado**: un enlace `EXPIRED` puede volver a estar activo si actualizas la expiración a una fecha futura y defines el estado como activo, mediante `PUT` o `PATCH`.

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/production/documentations/flow-howto-manage-life-cicle-plk-1787845975031-pmjyvtdt.png)

## Antes de empezar

- Obtén un token de acceso. Consulta [Autenticación](/es/payment-link-api/first-step-plk/authentication-token-plk).
- Ten el `link_id` del enlace que deseas gestionar.

## Desactiva o reactiva un enlace (PATCH)

Usa `PATCH` para actualizar el estado o la expiración de un enlace.

Endpoint|
---|
`PATCH /payment-links/{link_id}`

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `status` | string | No | Nuevo estado: `ACTIVE` o `INACTIVE` |
| `expiration` | string | No | Nueva fecha de expiración |

#### Ejemplo de solicitud — desactivar

```json
curl -X PATCH "${API_URL}/payment-links/${LINK_ID}" \
    -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    -H "x-seller-id: ${SELLER_ID}" \
    -H "country: BR" \
    -H "tenant: santander" \
    -H "Content-Type: application/json" \
    -d '{ "status": "INACTIVE" }'
```

#### Ejemplo de solicitud — reactivar

```json
curl -X PATCH "${API_URL}/payment-links/${LINK_ID}" \
    -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    -H "x-seller-id: ${SELLER_ID}" \
    -H "country: BR" \
    -H "tenant: santander" \
    -H "Content-Type: application/json" \
    -d '{ "status": "ACTIVE" }'
```

Una respuesta exitosa devuelve **200 OK** con el enlace actualizado completo.

## Actualiza un enlace por completo (PUT)

Usa `PUT` para reemplazar el enlace por completo.

Endpoint|
---|
`PUT /payment-links/{link_id}`

**Campos obligatorios**
| Campo | Tipo | Descripción | Ejemplo
| --- | --- | --- | --- |
| `label` | string | Etiqueta de identificación (6–36 caracteres) | `black-friday-2026`|
| `payment` | object | Configuración de pago | --- |
| `currency` | string | Moneda del país | `BRL` o `MXN` |
| `products.product_type` | string | Consulta los valores válidos en el modelo de datos del producto | `physical_goods` |
| `products.title` | string | Título del producto (máx.: 128) | `Camiseta Oficial Getnet`|
| `products.amount` | integer | Monto de la compra (consulta la nota sobre montos arriba) | `15000`|

**Campos opcionales**
| Campo | Tipo | Descripción | Ejemplo
| --- | --- | --- | --- |
| `status` | string | Estado del enlace| `ACTIVE` o `INACTIVE` |
| `expiration` | string | Nueva fecha de expiración | `2026-12-31T23:59:59`|

#### Ejemplo de solicitud

```json
curl https://api-sbx.pre.globalgetnet.com/dpy/payment-link/v1/payment-links/9e5dcedc-1e5f-4e85-9b64-4d0b43d98c82 \
  --request PUT \
  --header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...' \
  --header 'Content-Type: application/json' \
  --data '{
  "label": "black-friday-2026",
  "expiration": "2026-12-31T23:59:59",
  "max_orders": 100,
  "type": "custom",
  "request_delivery_address": false,
  "shipping_amount": 500,
  "products": [
    {
      "product_type": "physical_goods",
      "title": "Camiseta Oficial Getnet",
      "image_id": "6697e354-ab4a-11eb-bcbc-0242ac130002",
      "description": "Camiseta 100% algodão, tamanho M",
      "quantity": 2,
      "order_prefix": "BF2026",
      "amount": 9990,
      "propertyName*": "anything"
    }
  ],
  "payment": {
    "credit": {
      "enabled": true,
      "brands": [
        {
          "enabled": true,
          "brand": "VISA",
          "currencies": [
            "BRL"
          ],
          "threeds": true,
          "supported_installments": [
            {
              "schema": "plan_lojista",
              "schema_name": "Plan Lojista",
              "installments": [2,3,6,9,12],
              "installments_with_interest": [6,9,12],
              "installments_with_increase": [
                {
                  "installments": [3,6,12],
                  "rate": 1.5,
                  "propertyName*": "anything"
                }
              ],
              "propertyName*": "anything"
            }
          ],
          "propertyName*": "anything"
        }
      ],
      "propertyName*": "anything"
    },
    "debit": {
      "enabled": true,
      "brands": [
        {
          "enabled": true,
          "brand": "VISA",
          "currencies": [
            "BRL"
          ],
          "threeds": true,
          "propertyName*": "anything"
        }
      ],
      "propertyName*": "anything"
    },
    "bankslip": {
      "enabled": true,
      "propertyName*": "anything"
    },
    "instant_payment": {
      "enabled": true,
      "propertyName*": "anything"
    },
    "google_pay": {
      "enabled": true,
      "propertyName*": "anything"
    },
    "apple_pay": {
      "enabled": true,
      "propertyName*": "anything"
    },
    "c2p_master": {
      "enabled": false,
      "propertyName*": "anything"
    },
    "propertyName*": "anything"
  },
  "currency": "BRL",
  "propertyName*": "anything",
  "status": "ACTIVE"
}'
```

El cuerpo de la solicitud usa la misma estructura que `POST /payment-links`. Se reemplazan todos los campos del cuerpo.

Consulta [Cómo crear un enlace de pago](/es/payment-link-api/payment-guides-plk/howto-create-payment-link-plk) para conocer la estructura de los campos.

Una respuesta exitosa devuelve **200 OK** con el enlace actualizado completo.

## Recupera un enlace existente

Para ver el estado actual de un enlace:

```json
curl -X GET "${API_URL}/payment-links/${LINK_ID}" \
    -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    -H "x-seller-id: ${SELLER_ID}" \
    -H "country: BR" \
    -H "tenant: santander"
```

Devuelve **200 OK** con el enlace completo. Un enlace inexistente devuelve **404** (`payment_link_not_found`).

## Próximos pasos

- [Cómo recuperar y listar órdenes de pago](/es/payment-link-api/payment-guides-plk/howto-retrieve-list-payment-orders-plk)