Cómo emitir Open Badges desde un CSV en menos de 5 minutos
Paso a paso: sube un CSV de destinatarios, elige tu insignia y pulsa Emitir. Pausa y reanuda a mitad del lote, reintenta los fallos, exporta los resultados. Sirve para grupos de 10 o de 10.000.
Nacho founded Badges Ninja to make issuing verifiable digital credentials as simple as a single API call — Open Badge v2.0 badges and certificates, minted, hosted, and verifiable without standing up your own issuer infrastructure.
Si alguna vez has emitido credenciales a un grupo de una en una, ya conoces el problema: no escala más allá de unas diez personas antes de convertirse en una tarde entera copiando y pegando nombres y correos. Un grupo de bootcamp de 40 personas, una lista de asistentes a una conferencia de 500, o el despliegue de una formación corporativa para 5.000 necesitan exactamente lo mismo: subir una lista, elegir una insignia, hacer clic en Emitir y marcharte.
Eso es justo lo que hace Bulk Credentials en https://badges.ninja. Este recorrido cubre todo el flujo: preparar tu CSV, configurar el lote, verlo ejecutarse y manejar los casos complicados del mundo real: una fila de destinatario con un error tipográfico, un lote que se interrumpe a mitad de camino, o un programa que quiere emitir de la misma forma desde sus propios sistemas en lugar del panel.
Antes de empezar: lo que necesitas
Dos cosas, ambas que probablemente ya tienes:
- Una insignia — diseñada una sola vez en el diseñador visual y reutilizada para cada destinatario del lote. Si aún no has creado una, consulta nuestra guía sobre cómo diseñar tu primer certificado verificable.
- Un CSV de destinatarios — nombre, correo y (opcionalmente) una fecha de emisión. Ese es todo el esquema.
No necesitas una cuenta de emisor por destinatario, ni un servidor de correo, ni nada de código. Todo lo de esta sección ocurre en el panel.
Paso 1: Prepara tu CSV
El formato de la lista de destinatarios es deliberadamente mínimo:
name,email,issued_on
Maria Gonzalez,maria@example.com,2026-07-01
David Kim,david@example.com,2026-07-01
Priya Patel,priya@example.com,
- name — obligatorio. Rellena el campo de destinatario en la aserción y en el certificado.
- email — obligatorio. Se convierte en la identidad del destinatario en la aserción de Open Badge v2.0 — se convierte en hash con un salt por credencial antes de almacenarse, nunca se guarda en texto plano.
- issued_on — opcional. Déjalo en blanco y el lote usará el momento en que se procesa cada fila; ponlo explícitamente si estás rellenando retroactivamente un grupo que en realidad terminó el mes pasado.
La mayoría de los responsables de programa exportan esto directamente desde donde ya llevan el control de las finalizaciones: Airtable, Google Sheets, una hoja de cálculo entregada por un instructor, o un CSV extraído del libro de calificaciones de un LMS. No se requiere ninguna herramienta de exportación especial; cualquier CSV con esas tres columnas funciona.
Errores comunes en el CSV (y cómo la vista previa los detecta)
Un puñado de problemas aparecen constantemente en las listas reales de destinatarios, normalmente porque el CSV se armó fusionando dos o tres hojas de origen:
- Espacios en blanco al final de las direcciones de correo — un copia y pega desde una lista en PDF o una exportación de Google Forms a menudo arrastra un espacio invisible. Se ve bien en una celda de la hoja de cálculo pero falla la validación de correo al subirlo.
- Filas duplicadas — el mismo destinatario aparece dos veces porque una lista del grupo y una lista de inscritos tardíos se concatenaron sin eliminar duplicados.
- Formatos de fecha inconsistentes — una columna con
2026-07-01mezclada con07/01/2026de otra exportación. Cíñete a ISO 8601 (YYYY-MM-DD) y esto desaparece por completo. - Diferencias de mayúsculas en los encabezados —
EmailvsemailvsE-mail. El analizador es tolerante con las variantes comunes, pero un encabezado con un nombre totalmente personalizado no se asignará automáticamente.
Ninguno de estos es fatal — el paso de vista previa (más abajo) muestra cada uno antes de emitir nada, así que la solución es “edita la hoja de cálculo, vuelve a subir” en lugar de “averigua cuál de 3.000 destinatarios recibió una insignia rota”.
Paso 2: Configura el lote
Desde el panel, abre Credentials → Bulk Credentials y elige la insignia que vas a emitir. Este es el paso donde configuras todo lo que se aplica al lote completo: la insignia en sí, una fecha de emisión compartida si no vas a poner fechas por fila en el CSV, y (si tu perfil de emisor tiene uno) el ID de organización de LinkedIn que permitirá a cada destinatario añadir la credencial a su perfil con un solo clic.

Este es un buen momento para verificar dos veces que la insignia que has seleccionado es la versión final — los destinatarios verán la imagen y los criterios que estén adjuntos a ella en el momento en que emitas, no lo que actualices después.
Paso 3: Sube y previsualiza
Suelta tu CSV y la plataforma lo analiza, te muestra una tabla de vista previa y marca todo lo que no puede procesar: un correo faltante, una fecha mal formada, una fila duplicada. Nada se emite hasta que confirmes la vista previa.

Este paso de vista previa importa más de lo que parece. Un error tipográfico en una fila de un CSV de 2.000 filas es fácil de pasar por alto a simple vista, y es mucho más barato detectarlo antes de que 1.999 filas correctas ya estén emitidas que intentar deshacerlo después. Corrige las filas marcadas en tu hoja de cálculo, vuelve a subir, y la vista previa se actualiza.
Paso 4: Ejecuta el lote
Pulsa Emitir y el lote empieza a procesarse. Una barra de progreso registra las filas completadas frente a las restantes, y el lote se ejecuta del lado del servidor — no necesitas mantener la pestaña abierta, y cerrar tu portátil a mitad del lote no pierde tu lugar.
Vale la pena detallar esa última parte porque es el detalle que realmente importa para los grupos grandes: el estado del lote vive en el servidor, no en tu navegador. Si se te cae la conexión, tu portátil se suspende, o simplemente cierras la pestaña porque empieza una reunión, el lote sigue ejecutándose (o se reanuda exactamente donde lo dejaste si lo pausaste) en lugar de reiniciarse desde cero. Para un grupo de bootcamp de 40 personas esto es un lujo. Para un despliegue corporativo de 5.000 filas, es la diferencia entre “simplemente funciona” y “alguien tiene que vigilar una pestaña del navegador durante veinte minutos”.
También puedes pausar un lote en ejecución a propósito — digamos que alguien avisa de que el texto de los criterios de la insignia necesita un ajuste a mitad de una tanda de 3.000 filas — corregir el problema y reanudar sin volver a emitir las filas ya completadas.
Paso 5: Maneja los fallos
Las listas reales de destinatarios tienen filas defectuosas: un dominio de correo con error tipográfico, un campo de nombre que en realidad está vacío, una entrada duplicada de dos hojas exportadas que se fusionaron. Cuando una fila falla, el lote no se detiene — sigue procesando el resto y marca el fallo para revisarlo después. Obtienes una exportación de resultados que muestra exactamente qué filas tuvieron éxito y cuáles no, para que puedas corregir solo las filas fallidas y volver a ejecutar un pequeño lote de seguimiento en lugar de revisar toda la lista de nuevo.
Esto importa para el hábito de exportar a CSV que ya es común en el panel de credenciales — puedes extraer un CSV de lo que realmente se emitió en cualquier momento, cruzarlo con tu lista de origen y saber con precisión quién todavía necesita una insignia.
La vía de la API: mismo flujo, sin panel
Todo lo anterior asume que alguien está sentado en el panel haciendo clic por el asistente. Si tus finalizaciones ya viven en un sistema — un LMS, un CRM, una automatización de hoja de cálculo — puedes impulsar el mismo flujo de credenciales en lote directamente desde la Awards API en su lugar.
Una llamada mínima de emisión por destinatario se ve así:
curl -X POST https://api.badges.ninja/awards \
-H "X-Api-Key: bws_1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d" \
-H "Content-Type: application/json" \
-d '{
"badgeId": "badge_9f8e7d6c5b4a",
"recipient": {
"name": "Maria Gonzalez",
"email": "maria@example.com"
},
"issuedOn": "2026-07-01T00:00:00Z"
}'
O en Python, recorriendo en bucle las filas leídas del mismo CSV que de otro modo subirías a mano:
import csv
import requests
API_KEY = "bws_1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d"
BADGE_ID = "badge_9f8e7d6c5b4a"
with open("recipients.csv") as f:
for row in csv.DictReader(f):
requests.post(
"https://api.badges.ninja/awards",
headers={"X-Api-Key": API_KEY},
json={
"badgeId": BADGE_ID,
"recipient": {"name": row["name"], "email": row["email"]},
"issuedOn": row.get("issued_on") or None,
},
)
Vale la pena recurrir a esto cuando la emisión de credenciales se dispara por algo completamente distinto — un webhook de finalización de curso, un cambio de etapa en un CRM, el envío de un formulario — en lugar de una persona exportando manualmente un CSV. Cubrimos la autenticación y la forma completa de la petición/respuesta en el inicio rápido de la API. Cada credencial creada de esta manera es idéntica a una creada a través del asistente del panel: misma aserción de Open Badge v2.0, misma URL de verificación, mismo certificado en PDF.
Asistente del panel vs. API: ¿cuál quieres en realidad?
| Dashboard Bulk Credentials | Awards API | |
|---|---|---|
| Mejor para | Un lote puntual u ocasional (graduación de un grupo, asistencia a una conferencia) | Un disparador recurrente (cada finalización de curso, cada compra) |
| Esfuerzo de configuración | Ninguno — exporta un CSV, súbelo | Trabajo de integración puntual (webhook o script) |
| Quién lo ejecuta | Responsable de programa, sin código | Quien sea el dueño del sistema que dispara |
| Manejo de fallos | Vista previa + exportación de resultados por fila | Estado HTTP por petición, manejado en tu propia lógica de reintentos |
La mayoría de los equipos empiezan con el asistente del panel porque no requiere nada más allá de un CSV, y solo pasan a la API una vez que el mismo lote se ha ejecutado manualmente tres o cuatro veces y el patrón claramente vale la pena automatizarlo.
Privacidad: qué se almacena en realidad
Un CSV de nombres y correos es dato personal, y vale la pena saber qué le pasa después de subirlo. La dirección de correo del destinatario nunca se almacena en texto plano en la credencial en sí — se convierte en hash con un salt por credencial como parte de la aserción de Open Badge v2.0, siguiendo el formato de identidad de destinatario hashed de la especificación. Ese hash es lo que un verificador comprueba, no la dirección en bruto. El campo de nombre se almacena tal como se introdujo, ya que está destinado a ser visible en el certificado y en la página de verificación. Si una fila necesita corrección después de la emisión — un nombre mal escrito, lo más común — puedes editar o revocar la credencial individual desde el panel de credenciales sin tocar el resto del lote.
Después del lote: notifica a los destinatarios
Emitir la insignia y avisar al destinatario son dos pasos distintos. Si tu CSV no dispara ya un correo a través de tu propio sistema, el flujo de compartición en lote del panel te permite seleccionar múltiples credenciales que acabas de crear y enviar un correo de compartición personalizado a todas ellas de una sola pasada — consulta el envío en lote de correos de compartición para el recorrido completo, incluido cómo la personalización por destinatario (nombre, imagen de la insignia, enlace de verificación) se sustituye automáticamente.
Cuándo Bulk Credentials es la herramienta adecuada
La emisión en lote es la elección correcta siempre que el encuadre de “lote” encaje con el mundo real: un grupo que terminó el mismo día, una conferencia que acaba de terminar, un despliegue de formación que llega a una fecha límite de cumplimiento. Si en cambio estás emitiendo credenciales puntuales a medida que se alcanzan hitos individuales — un solo ascenso, la finalización de un solo proyecto — el formulario de credencial individual es más rápido que armar un CSV de una sola fila.
Para cualquier cosa recurrente — el mismo curso que se imparte cada mes, una tubería de incorporación continua — la vía de la API de arriba vale la pena configurarla una sola vez. Convierte “ejecutar credenciales en lote manualmente cada grupo” en “las finalizaciones ya emiten credenciales automáticamente”, que es la versión de este flujo de trabajo que la mayoría de los responsables de programa realmente quieren después del segundo o tercer lote manual.
¿Listo para emitir tu primera credencial verificable? Empieza gratis en badges.ninja — diseñador visual, página de verificación pública, certificado en PDF, salida de Open Badge v2.0. No se requiere tarjeta de crédito.
Cómo se hizo este artículo
Algunos artículos de este blog se redactan con la ayuda de un asistente de IA y luego son revisados, verificados y editados por el equipo de Badges Ninja antes de publicarse. Cada ejemplo de código y precio se verifica con el producto en vivo. Más información sobre nuestro proceso editorial y de IA en nuestra página de proceso editorial .

Sobre el autor
Nacho Coll
Founder & Engineer at Badges Ninja
Nacho founded Badges Ninja to make issuing verifiable digital credentials as simple as a single API call — Open Badge v2.0 badges and certificates, minted, hosted, and verifiable without standing up your own issuer infrastructure. Writes about the Open Badges spec, credential verification, and running a credentialing platform serverless on AWS, from the operator side of the wire.
Más de Nacho Coll
- Cómo agregar un botón “Agregar al perfil” de LinkedIn a tus Open Badges20 ago 2026 · 11min de lectura
- Open Badges vs. certificados PDF: ¿cuál es la mejor opción para tu programa en 2026?10 ago 2026 · 7min de lectura
- Open Badge v2 vs v3 explicado: ¿qué especificación deberías usar hoy?6 ago 2026 · 10min de lectura


