Skip to Content
QvaPay API
User

Identidad Nostr

Verificar la cuenta de Nostr del usuario como [email protected] (NIP-05), con el mismo nombre que su Lightning Address.

Un usuario con la verificación de identidad (KYC) aprobada y una Lightning Address activa puede vincular su cuenta de Nostr y verificarla como [email protected] (NIP-05). El nombre es el de su Lightning Address: [email protected] se verifica como [email protected]. Como un nombre de Lightning Address nunca se reasigna, el NIP-05 tampoco cambia de dueño.

Cómo funciona:

  1. El usuario vincula su clave pública de Nostr (npub1… o la clave en hex). Queda pending.
  2. En su app de Nostr pone [email protected] en el campo NIP-05 de su perfil, y [email protected] como Lightning Address para recibir pagos.
  3. Pide la verificación. QvaPay busca su perfil (kind 0) en los relays y comprueba que, firmado por esa clave, dice [email protected]. Solo el dueño de la clave puede firmar su perfil, así que no hace falta ninguna firma más.

Con la identidad verificada, https://qvapay.com/.well-known/nostr.json?name=nombre devuelve su clave. Deja de devolverla si el usuario la desvincula, cambia de clave (vuelve a pending), cambia el nombre de su Lightning Address o pierde la verificación de identidad. Una clave solo puede estar vinculada a una cuenta de QvaPay.

En la web está en Ajustes → Lightning.

GET /user/nostr

Estado de la identidad Nostr del usuario.

Autenticación

Bearer Token (Authorization: Bearer {token}).

Request

curl https://api.qvapay.com/user/nostr \
  -H "Authorization: Bearer {token}"

Response

{
  "data": {
    "enabled": true,
    "available": true,
    "reason_code": null,
    "message": null,
    "nip05": "[email protected]",
    "lud16": "[email protected]",
    "link": {
      "npub": "npub1…",
      "status": "verified",
      "verified_at": "2026-11-13T15:02:11.000Z",
      "last_check_at": "2026-11-13T15:02:11.000Z",
      "last_check_error": null
    }
  }
}
CampoDescripción
enabledfalse mientras la función no esté disponible: el resto de campos no viene.
availableSi el usuario puede vincular. Si es false, reason_code dice por qué: KYC_REQUIRED, NO_LN_ADDRESS o UNAVAILABLE.
nip05 / lud16Lo que va en el perfil de Nostr. null sin Lightning Address.
linknull sin clave vinculada. status es pending o verified; last_check_error explica la última verificación fallida.

POST /user/nostr

# Vincular (o cambiar) la clave: queda pendiente
curl -X POST https://api.qvapay.com/user/nostr \
  -H "Authorization: Bearer {token}" -H "Content-Type: application/json" \
  -d '{ "action": "link", "pubkey": "npub1…" }'

# Comprobar el perfil
curl -X POST https://api.qvapay.com/user/nostr \
  -H "Authorization: Bearer {token}" -H "Content-Type: application/json" \
  -d '{ "action": "verify" }'

Responde el mismo objeto que el GET. Errores:

EstadocodeCuándo
403KYC_REQUIREDLa cuenta no tiene la verificación de identidad aprobada.
409PUBKEY_TAKENLa clave ya está vinculada a otra cuenta.
422PUBKEY_INVALIDNo es una clave pública de Nostr.
422NO_LN_ADDRESSEl usuario no tiene Lightning Address.
422NOT_LINKEDverify sin clave vinculada.
422PROFILE_NOT_FOUNDNo se encontró el perfil en los relays.
422PROFILE_MISMATCHEl perfil no dice [email protected]; error dice qué tiene.
429Más de 6 intentos por minuto.
503DISABLEDLa función no está disponible.

DELETE /user/nostr

Desvincula la clave. El NIP-05 deja de responder por el usuario en ese momento.

curl -X DELETE https://api.qvapay.com/user/nostr \
  -H "Authorization: Bearer {token}"