Editar Oferta P2P
Modificar los parámetros de una oferta P2P existente en estado abierto.
POST /p2p/:uuid/edit
Edita una oferta P2P existente. Solo el creador puede editarla y la oferta debe estar en estado open. Para ofertas de venta, si se modifica el monto se ajusta automáticamente el saldo del usuario.
Autenticación
Bearer Token (Authorization: Bearer <token> en headers).
Request
curl -X POST "https://api.qvapay.com/p2p/7c9e6679-7425-40de-944b-e07fc1f90ae7/edit" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"amount": 60,
"receive": 15000,
"only_vip": 0,
"message": "Nuevo mensaje",
"webhook": "https://example.com/webhook",
"tags": ["transferencia"],
"private": false
}'Parámetros (URL)
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
uuid | string | Sí | UUID de la oferta P2P |
Parámetros (body JSON)
Todos los parámetros son opcionales. Solo se actualizan los campos proporcionados.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
amount | number | No | Nueva cantidad en QUSD (0.1 - 10,000). En ofertas sell, ajusta el saldo |
receive | number | No | Nueva cantidad a recibir (0.1 - 100,000,000) |
only_vip | boolean | number | No | Restringir a usuarios VIP |
message | string | No | Nuevo mensaje público (máx. 79 caracteres, URLs eliminadas). Solo cuentas GOLD: si tu cuenta no es GOLD se ignora sin error y el mensaje guardado no cambia. Vaciarlo ("" o null) sí lo puede cualquier cuenta |
webhook | string | No | Nueva URL de webhook. No puede apuntar a los dominios de QvaPay (400 con code: "WEBHOOK_NOT_ALLOWED") |
tags | array | No | Nuevas etiquetas (reemplaza las existentes, máx. 10) |
private | boolean | No | Solo se permite cambiar de privada a pública (false), no al revés |
offer_kind | string | No | "flexible" convierte una oferta fija en una por rango (ver abajo). No hay conversión inversa |
Ofertas por rango
En una oferta flexible solo se edita lo que queda por tomar; lo ya tomado por órdenes no se toca. Campos:
| Campo | Tipo | Descripción |
|---|---|---|
available_amount | number | Nuevo disponible (amount se acepta con el mismo significado). 0 retira el resto sin cancelar las órdenes en curso. En una sell, la diferencia se descuenta o devuelve de tu saldo |
receive | number | Lo que quieres recibir por el nuevo disponible (fija la tasa de las órdenes futuras) |
order_min / order_max | number | Nuevos límites por orden |
Ver Ofertas por rango.
Convertir una oferta fija en una por rango
Una oferta fixed en estado open y sin contraparte se puede convertir en una por rango enviando offer_kind: "flexible" con sus límites por orden. Conserva el mismo uuid, sus datos de pago, sus requisitos y su pausa, y queda publicada con todo el monto disponible (nada tomado todavía).
curl -X POST "https://api.qvapay.com/p2p/7c9e6679-7425-40de-944b-e07fc1f90ae7/edit" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "offer_kind": "flexible", "order_min": 10, "order_max": 50 }'| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
offer_kind | string | Sí | "flexible" |
order_min / order_max | number | Sí | Límites por orden, hasta 2 decimales. order_min ≤ order_max ≤ total de la oferta |
amount | number | No | Nuevo total en QUSD, como al editar una fija. En una sell, la diferencia se descuenta o devuelve de tu saldo |
receive | number | No | Nuevo total a recibir (fija la tasa de las órdenes) |
only_vip, message, webhook, private: false y requirements se aceptan en la misma llamada. La respuesta trae la oferta con offer_kind: "flexible", available_amount, order_min, order_max y converted: true.
Es irreversible: una oferta por rango no se puede volver a convertir en fija (offer_kind: "fixed" sobre una por rango responde 400 con code: "FLEXIBLE_TO_FIXED_NOT_ALLOWED"). Cuenta para el límite de una oferta por rango viva por moneda y lado.
| Código | code | Cuándo |
|---|---|---|
400 | — | Faltan order_min/order_max, o no cumplen mínimo ≤ máximo ≤ total |
400 | SYSTEM_OFFER | La oferta entrega una recarga de un cliente |
403 | FLEXIBLE_NOT_ENABLED | Tu cuenta no tiene KYC aprobado |
409 | FLEXIBLE_OFFER_EXISTS | Ya tienes una oferta por rango viva en esa moneda y lado |
409 | OFFER_NOT_EDITABLE | Alguien aplicó a la oferta mientras la convertías |
409 | ALREADY_FLEXIBLE | Otra petición ya la convirtió |
En el feed del mercado, la conversión emite p2p.cancelled (la oferta sale del libro de fijas; llega con offer_kind: "flexible" y status: "open") seguido de p2p.range_created.
Requisitos para quien aplique
requirements (mismo formato y valores que en Crear) reemplaza los requisitos de la oferta, fixed o flexible. {} los quita todos.
Response (200)
{
"msg": "Oferta P2P editada correctamente",
"p2p": {
"uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"type": "buy",
"coin": "BANK_CUP",
"amount": 60.00,
"receive": 15000.00,
"only_kyc": 0,
"private": 0,
"only_vip": 0,
"status": "open",
"details": { "cuenta": "1234567890" },
"message": "Nuevo mensaje",
"webhook": "https://example.com/webhook",
"created_at": "2024-06-20T14:30:00.000Z",
"updated_at": "2024-06-20T15:00:00.000Z"
}
}Webhook
Si la oferta tiene un webhook configurado, se enviará un POST con:
{
"operation": "updated",
"p2p": { ... }
}Errores
| Código | Descripción |
|---|---|
400 | Datos inválidos, oferta no está en estado open, saldo insuficiente, o intento de cambiar oferta pública a privada |
401 | Token de autenticación inválido o ausente |
403 | No eres el creador de esta oferta |
404 | Oferta P2P no encontrada |
409 | La oferta cambió de estado durante la operación |
429 | Demasiadas solicitudes (límite: 1 cada 10 segundos) |
500 | Error interno al ajustar el saldo |