Skip to content

API para desarrolladores

Con el plan Pro puedes crear tus propias claves y consultar el mercado desde tus programas: un bot de Telegram, una hoja de cálculo, un script que te avise o lo que quieras construir.

Lo que devuelve la API es lo mismo que ves en la tarjeta Mejores Oportunidades del panel principal: las ofertas abiertas donde mejor te sale comprar QUSD y donde mejor te sale venderlo.

Esta página es una referencia técnica. Por eso, a diferencia del resto de la documentación, usa los nombres exactos de los campos: son los que tu programa va a leer.


  1. Entra en Ajustes y baja hasta API Keys.
  2. Pulsa Nueva API key, ponle un nombre que te diga para qué es («Bot de avisos», «Hoja de precios») y confirma.
  3. Copia la clave en ese momento. Solo se muestra una vez: QvaMark no la guarda, así que no puede volver a enseñártela. Si la pierdes, revócala y crea otra.

Puedes tener hasta 5 claves activas y crear hasta 10 al día.

Quien tenga tu clave puede consultar la API en tu nombre y gastar tu cupo.

  • No la pongas en código que se ejecute en un navegador ni en un repositorio público.
  • Usa una clave distinta para cada programa: si una se filtra, revocas solo esa.
  • Si sospechas que alguien la tiene, revócala desde Ajustes. Deja de funcionar al instante.

Las claves dejan de funcionar mientras tu cuenta no tenga el plan Pro, y vuelven a funcionar solas si lo recuperas. Mientras tanto siguen apareciendo en Ajustes, así que puedes revocarlas cuando quieras.


Envía la clave en la cabecera Authorization:

Terminal window
curl -H "Authorization: Bearer qm_tu_clave" \
"https://qvamark.com/api/v2/offers/best?tick=BANK_CUP&limit=5"

También se acepta en la cabecera X-Api-Key: qm_tu_clave. La clave nunca va en la URL: las URLs acaban guardadas en historiales y registros.


GET /api/v2/offers/best
ParámetroObligatorioDescripción
tickSíLa moneda, tal como aparece en QvaMark: BANK_CUP, ETECSA, CLASICA… Da igual si va en mayúsculas o minúsculas.
limitNoCuántas ofertas por lado, de 1 a 10. Por defecto, 5.
{
"data": {
"coinTick": "BANK_CUP",
"toBuyFrom": [
{
"uuid": "9f1c…",
"ratio": 980,
"amount": 40.6,
"receive": 39788,
"publisher": {
"username": "goliatgallardo8",
"name": "Goliat",
"avatarUrl": "https://media.qvapay.com/…",
"kyc": true,
"vip": false,
"goldenCheck": false,
"ratingAvg": 4.9,
"ratingCount": 312
},
"requirements": { "onlyKyc": false, "onlyVip": false },
"url": "https://qvapay.com/p2p/9f1c…",
"publishedAt": "2026-09-24T13:58:10.000Z",
"lastSeenAt": "2026-09-24T14:02:31.000Z"
}
],
"toSellTo": []
},
"meta": {
"apiVersion": "2",
"limit": 5,
"generatedAt": "2026-09-24T14:02:40.000Z"
}
}
  • toBuyFrom — donde compras QUSD («Comprar QUSD» en el panel). Son ofertas de venta: el otro vende QUSD y tú pagas en la moneda. La más barata va primero.
  • toSellTo — donde vendes QUSD («Vender QUSD» en el panel). Son ofertas de compra: el otro compra QUSD y tú recibes la moneda. La que más paga va primero.

Cada oferta trae:

CampoQué es
ratioUnidades de la moneda por cada QUSD. Es el precio.
amountLos QUSD de la oferta.
receiveLo que se paga o se recibe en la moneda.
publisherQuién la publicó y su reputación en QvaPay.
requirementsSi la oferta solo admite usuarios con KYC o VIP.
urlLa oferta en QvaPay, para aplicar a ella.
publishedAtCuándo se publicó en QvaPay. Puede ser null.
lastSeenAtLa última vez que QvaMark la vio abierta.
  • Solo ofertas abiertas y vistas hace poco. Una oferta que QvaMark no ha vuelto a ver no se recomienda. Por eso las listas pueden salir vacías en una moneda con poco movimiento.
  • Se descartan los precios absurdos, por ejemplo una venta a una décima parte del precio de mercado, que casi siempre es un error al publicar o un cebo.
  • No aparecen las ofertas privadas ni el mensaje que el vendedor escribe en la oferta.

LímiteCuánto
Por clave60 peticiones por minuto
Por cuenta, sumando todas tus claves10.000 peticiones al día

Los precios se actualizan a medida que QvaMark repasa el mercado, así que consultar más de una vez por segundo no te dará datos más nuevos. Una vez cada pocos segundos es más que suficiente para un bot.

Cada respuesta te dice cuánto te queda:

CabeceraQué es
X-RateLimit-LimitTu límite en la ventana actual.
X-RateLimit-RemainingCuántas peticiones te quedan.
X-RateLimit-ResetCuándo se reinicia, en segundos Unix.
Retry-AfterSolo si te has pasado: cuántos segundos esperar.

Todos los errores tienen la misma forma:

{ "error": { "code": "rate_limited", "message": "Límite de 60 peticiones por minuto y key superado." } }

Programa contra code, no contra message: el texto puede cambiar, el código no.

HTTPcodeQué pasa
400invalid_requestFalta tick o algún parámetro no es válido.
401missing_api_keyLa petición no lleva clave.
401invalid_api_keyLa clave no existe, está revocada o ha caducado.
403insufficient_scopeLa clave no tiene permiso para esta consulta.
403plan_requiredTu cuenta no tiene el plan Pro.
403account_disabledLa cuenta dueña de la clave está desactivada.
404not_foundQvaMark no conoce esa moneda.
429rate_limitedTe has pasado del límite. Espera lo que diga Retry-After.
500internal_errorAlgo falló de nuestro lado. Reintenta en unos segundos.

Si repites muchas peticiones con claves inválidas, la API deja de responderte durante un minuto (429).