Skip to content

API de emisores

Gestiona emisores de credenciales — las organizaciones o personas que entregan credenciales.

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

Crear emisor

Crea un nuevo emisor.

POST /issuers

Parámetros

ParámetroTipoObligatorioDescripción
namestringNombre de la organización (mínimo 3 caracteres)
urlstringSitio web de la organización (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 se define, cada página pública de otorgamiento de este emisor mostrará un botón Add to LinkedIn Profile.

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

  • Se contabiliza contra el límite de emisores de tu plan (Free: 1, Starter: 5, Pro: ilimitados). Sin descuento de cuota.
  • Si el correo del emisor coincide con el correo de tu cuenta, se verifica automáticamente.
  • Si el correo es distinto, se manda un correo de verificación a la dirección del emisor.

Listar emisores

Recupera todos los emisores que has 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 mediante 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 recibido en el 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 puede tener credenciales.

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 credenciales o otorgamientos y no puede eliminarse (suprímelos antes)
  • 404 — emisor no encontrado

Actualizar emisor

Actualiza los campos de un emisor no verificado. Una vez verificado, solo logo y linkedinOrganizationId quedan 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 logotipo codificado en Base64
linkedinOrganizationIdstringNoNuevo LinkedIn organization ID (o cadena vacía para borrarlo)

Rotar código de verificación

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

POST /issuers/{issuerId}/rotate-code

Respuesta

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

badges.ninja Documentation