Skip to content

API de emisores

Gestiona los emisores de insignias — las organizaciones o personas que otorgan insignias.

Todos los endpoints requieren autenticación vía la cabecera X-Api-Key. Consulta Autenticación.

Crear emisor

Crea un nuevo emisor de insignias.

POST /issuers

Parámetros

ParámetroTipoObligatorioDescripción
namestringNombre de la organización (mínimo 3 caracteres)
urlstringSitio web de la organización (debe ser una URL HTTP/HTTPS válida)
emailstringCorreo de contacto del emisor
logostringNoImagen codificada en Base64 (PNG o JPG)
linkedinOrganizationIdstringNoID numérico de la página de empresa en LinkedIn. Si está establecido, cada página pública de otorgamiento de este emisor muestra un botón Añadir al perfil de LinkedIn.

Ejemplo

bash
curl -X POST https://api.badges.ninja/issuers \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
      "name": "Acme Academy",
      "url": "https://acme.example.com",
      "email": "badges@acme.example.com"
    }
  }'

Respuesta

json
{
  "statusCode": 200,
  "info": {
    "issuerId": "https://api.badges.ninja/certify-badge/issuer/a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}

Notas

  • Cuenta contra el límite de emisores de tu plan (Free: 1, Starter: 5, Pro: ilimitado). No descuenta cuota.
  • Si el correo del emisor coincide con el correo de tu cuenta, el emisor queda verificado automáticamente.
  • Si el correo es distinto, se envía un correo de verificación al correo del emisor.

Listar emisores

Recupera todos los emisores que hayas creado.

GET /issuers

Ejemplo

bash
curl -X GET https://api.badges.ninja/issuers \
  -H "X-Api-Key: bws_your_api_key_here"

Respuesta

json
{
  "statusCode": 200,
  "info": {
    "issuers": [
      {
        "id": "https://api.badges.ninja/certify-badge/issuer/a1b2c3d4-...",
        "name": "Acme Academy",
        "url": "https://acme.example.com",
        "email": "badges@acme.example.com",
        "verified": true,
        "timestamp": "2025-01-15T10:30:00.000Z"
      }
    ]
  }
}

Verificar emisor

Verifica un emisor usando el código de verificación enviado a su correo.

POST /issuers/{issuerId}/verify

Parámetros

ParámetroTipoObligatorioDescripción
issuerIdstringEl ID del emisor (parámetro de ruta)
codestringEl código de verificación del correo

Ejemplo

bash
curl -X POST https://api.badges.ninja/issuers/a1b2c3d4-e5f6-7890-abcd-ef1234567890/verify \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
      "issuerId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "code": "ABC123"
    }
  }'

Respuesta

json
{
  "statusCode": 200,
  "info": {
    "verified": true
  }
}

Eliminar emisor

Elimina un emisor. El emisor no debe tener insignias.

DELETE /issuers/{issuerId}

Ejemplo

bash
curl -X DELETE https://api.badges.ninja/issuers/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "X-Api-Key: bws_your_api_key_here"

Respuesta

json
{
  "statusCode": 200,
  "info": {
    "deleted": true
  }
}

Errores

  • 400 — el emisor tiene insignias u otorgamientos y no se puede eliminar (elimínalos primero)
  • 404 — emisor no encontrado

Actualizar emisor

Actualiza los campos de un emisor no verificado. Una vez verificado, solo logo y linkedinOrganizationId siguen siendo editables para preservar la estabilidad de las credenciales.

PUT /issuers/{issuerId}

Parámetros

ParámetroTipoObligatorioDescripción
issuerIdstringEl ID del emisor (parámetro de ruta)
namestringNoNuevo nombre (solo si no está verificado)
urlstringNoNueva URL (solo si no está verificado)
emailstringNoNuevo correo (solo si no está verificado — envía un nuevo correo de verificación)
logostringNoNuevo logo codificado en Base64
linkedinOrganizationIdstringNoNuevo ID de organización de LinkedIn (o cadena vacía para borrarlo)

Rotar código de verificación

Invalida el enlace de verificación anterior y envía por correo uno nuevo. Solo es válido mientras el emisor siga sin verificar.

POST /issuers/{issuerId}/rotate-code

Respuesta

json
{
  "statusCode": 200,
  "info": {
    "sent": true
  }
}

badges.ninja Documentation