Productos y enlaces de pago sin código
Crea productos y enlaces de pago compartibles para el checkout alojado en /pay/:slug. El comprador paga por C2P contra tu tenant; la comisión de VEX Pay se captura como PLATFORM_FEE al completarse el pago.
Endpoints
| Método | Ruta | Propósito |
|---|---|---|
| POST | /v1/products | Crea un producto (name, priceUsd; opcional description / imageUrl / active). |
| GET | /v1/products | Lista productos (paginación por cursor; ?active=true|false). |
| GET | /v1/products/:id | Obtiene un producto y sus enlaces de pago. |
| PATCH | /v1/products/:id | Actualiza campos — envía solo lo que cambia; "" limpia description / imageUrl. |
| DELETE | /v1/products/:id | Elimina el producto y sus enlaces. 409 product_has_sales si hubo un checkout pagado. |
| POST | /v1/products/:id/links | Crea un enlace de pago. Omite slug para autogenerarlo desde el nombre. |
| GET | /v1/products/:id/links | Lista los enlaces de un producto. |
| GET | /v1/payment-links/:id | Obtiene un enlace de pago. |
| PATCH | /v1/payment-links/:id | Activa/desactiva (status), allowQuantity, maxQuantity / redirectUrl. |
| DELETE | /v1/payment-links/:id | Elimina un enlace. 409 product_has_sales si un checkout fue pagado — desactívalo. |
curl --request POST "${API_URL}/v1/products" \
--header "x-api-key: ${VEXPAY_API_KEY}" \
--header "content-type: application/json" \
--data '{ "name": "Camiseta VEXPay", "priceUsd": "20.00" }'curl --request POST "${API_URL}/v1/products/PRODUCT_ID/links" \
--header "x-api-key: ${VEXPAY_API_KEY}" \
--header "content-type: application/json" \
--data '{ "allowQuantity": true, "maxQuantity": 5 }'