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:
- El usuario vincula su clave pública de Nostr (
npub1…o la clave en hex). Quedapending. - 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. - 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
}
}
}| Campo | Descripción |
|---|---|
enabled | false mientras la función no esté disponible: el resto de campos no viene. |
available | Si el usuario puede vincular. Si es false, reason_code dice por qué: KYC_REQUIRED, NO_LN_ADDRESS o UNAVAILABLE. |
nip05 / lud16 | Lo que va en el perfil de Nostr. null sin Lightning Address. |
link | null 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:
| Estado | code | Cuándo |
|---|---|---|
| 403 | KYC_REQUIRED | La cuenta no tiene la verificación de identidad aprobada. |
| 409 | PUBKEY_TAKEN | La clave ya está vinculada a otra cuenta. |
| 422 | PUBKEY_INVALID | No es una clave pública de Nostr. |
| 422 | NO_LN_ADDRESS | El usuario no tiene Lightning Address. |
| 422 | NOT_LINKED | verify sin clave vinculada. |
| 422 | PROFILE_NOT_FOUND | No se encontró el perfil en los relays. |
| 422 | PROFILE_MISMATCH | El perfil no dice [email protected]; error dice qué tiene. |
| 429 | Más de 6 intentos por minuto. | |
| 503 | DISABLED | La 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}"