Comprobantes
Adjuntar imágenes o PDF a un trato P2P. Privados entre las dos partes y soporte.
Un comprobante es la evidencia de un trato, no parte del anuncio. Solo lo ven las dos partes del trato en curso y el equipo de soporte, y los ficheros se guardan como privados: no tienen una URL pública, a diferencia de las imágenes del chat.
En una oferta fija el trato es el ciclo del peer actual: si quien tomó la oferta se va y entra otro, el nuevo no ve lo anterior, y si la misma persona vuelve, tiene que subir un comprobante nuevo. En una oferta por rango el trato es la orden: añade ?order=<uuid de la orden> a todas las llamadas.
GET /p2p/:uuid/attachments
Lista los comprobantes del trato y los límites.
Autenticación
Bearer Token, o app-id / app-secret. Un token acotado necesita p2p:buy o p2p:sell, según el lado que juegues: p2p:read no llega.
Respuesta
{
"attachments": [
{
"uuid": "1f0c6b1e-5d7a-4d2e-9a53-4a2f0a0d9a11",
"kind": "pdf",
"mime": "application/pdf",
"size": 245120,
"mine": true,
"created_at": "2026-11-06T15:04:05.000Z"
}
],
"limits": {
"max_bytes": 4194304,
"max_per_party": 5,
"remaining": 4,
"can_upload": true,
"proof_replaces_tx_id": true
}
}mine dice si lo subiste tú. El nombre original del fichero nunca se devuelve.
proof_replaces_tx_id dice si un comprobante propio basta para marcar el pago sin tx_id.
POST /p2p/:uuid/attachments
Sube un comprobante como multipart/form-data, campo file. Solo puede hacerlo quien paga el fiat, mientras el trato esté en processing, paid o revision. La otra parte puede verlo, pero no subir nada: para ella limits.can_upload llega en false.
curl -X POST "https://api.qvapay.com/p2p/7c9e6679-7425-40de-944b-e07fc1f90ae7/attachments" \
-H "Authorization: Bearer <token>" \
-F "[email protected]"Responde 201 con { "attachment": { … } }, y la otra parte recibe un aviso en el chat del trato.
| Límite | Valor |
|---|---|
| Tamaño | 4 MB |
| Tipos | JPG, PNG, WEBP y PDF, comprobados por su contenido |
| Por trato | 5 |
| Ritmo | 6 por minuto |
Las imágenes se recodifican a JPEG de hasta 2000 px y pierden sus metadatos, GPS incluido. Los PDF se guardan tal cual.
Un comprobante no se puede borrar ni reemplazar: es evidencia. Si te equivocas, sube el correcto y explícalo en el chat.
Errores
| Status | code | Significado |
|---|---|---|
| 400 | ORDER_REQUIRED | Oferta por rango sin ?order= |
| 400 | MULTIPART_REQUIRED | El cuerpo no es multipart |
| 400 | ATTACHMENT_MISSING | Falta el campo file |
| 403 | ATTACHMENT_PAYER_ONLY | Solo quien paga el fiat puede adjuntar |
| 409 | ATTACHMENT_STATE | El trato ya no admite comprobantes |
| 409 | ATTACHMENT_LIMIT | Ya subiste el máximo |
| 413 | ATTACHMENT_TOO_LARGE | Supera los 4 MB |
| 415 | ATTACHMENT_TYPE | Tipo no admitido |
| 429 | RATE_LIMITED | Demasiados seguidos |
| 503 | ATTACHMENTS_UNAVAILABLE | Inténtalo más tarde |
GET /p2p/:uuid/attachments/:id
Descarga el fichero. Responde 404 a quien no pueda verlo, también si el comprobante no existe.
Un comprobante no demuestra un pago: una captura se falsifica en minutos. Libera solo cuando el dinero esté en tu cuenta.