Zo geef je Open Badges uit vanuit een CSV in minder dan 5 minuten

Stap voor stap: upload een CSV met ontvangers, kies je badge, klik op Uitgeven. Pauzeer en hervat halverwege de batch, probeer mislukkingen opnieuw, exporteer resultaten. Werkt voor groepen van 10 of 10.000.

Nacho Coll Door Bijgewerkt 9 min leestijd
Stap voor stap: upload een CSV met ontvangers, kies je badge, klik op Uitgeven. Pauzeer en hervat halverwege de batch, probeer mislukkingen opnieuw, exporteer resultaten. Werkt voor groepen van 10 of 10.000.

Als je ooit credentials aan een groep hebt uitgegeven, één ontvanger tegelijk, dan ken je het probleem al: het schaalt niet voorbij ongeveer tien mensen voordat het verandert in een middag lang namen en e-mails kopiëren en plakken. Een bootcamp-groep van 40 personen, een deelnemerslijst van 500 personen voor een conferentie of een bedrijfstraining-uitrol voor 5.000 personen hebben allemaal hetzelfde nodig — upload een lijst, kies een badge, klik op Uitgeven en loop weg.

Dat is precies wat Bulk Credentials op https://badges.ninja doet. Deze doorloop behandelt de hele flow: je CSV voorbereiden, de batch configureren, hem zien draaien en de rommelige praktijkgevallen afhandelen — een ontvangersrij met een typefout, een batch die halverwege wordt onderbroken, of een programma dat op dezelfde manier wil uitgeven vanuit zijn eigen systemen in plaats van het dashboard.

Voordat je begint: wat je nodig hebt

Twee dingen, die je waarschijnlijk allebei al hebt:

  1. Een badge — één keer ontworpen in de visuele designer, hergebruikt voor elke ontvanger in de batch. Als je er nog geen hebt gebouwd, bekijk dan onze gids over het ontwerpen van je eerste verifieerbare certificaat.
  2. Een CSV met ontvangers — naam, e-mail en (optioneel) een uitgiftedatum. Dat is het hele schema.

Je hebt geen uitgever-account per ontvanger nodig, geen mailserver en geen code. Alles in dit gedeelte gebeurt in het dashboard.

Stap 1: bereid je CSV voor

Het formaat van de ontvangerslijst is bewust minimaal:

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 — vereist. Vult het ontvangerveld op de assertion en het certificaat.
  • email — vereist. Dit wordt de ontvangersidentiteit op de Open Badge v2.0-assertion — gehasht met een salt per credential voordat het wordt opgeslagen, nooit in platte tekst bewaard.
  • issued_on — optioneel. Laat het leeg en de batch gebruikt het moment waarop elke rij wordt verwerkt; stel het expliciet in als je een groep bijwerkt die eigenlijk vorige maand klaar was.

De meeste programmabeheerders exporteren dit rechtstreeks vanuit waar ze afrondingen toch al bijhouden — Airtable, Google Sheets, een spreadsheet aangeleverd door een docent, of een CSV uit een LMS-cijferboek. Er is geen speciaal exporthulpmiddel nodig; elke CSV met die drie kolommen werkt.

Veelvoorkomende CSV-valkuilen (en hoe de preview ze opvangt)

Een handvol problemen duikt voortdurend op in echte ontvangerslijsten, meestal omdat de CSV is samengesteld door twee of drie bronbladen samen te voegen:

  • Overtollige spaties in e-mailadressen — een kopieer-plak vanuit een pdf-lijst of een Google Form-export sleept vaak een onzichtbare spatie mee. Het ziet er prima uit in een spreadsheetcel, maar faalt bij de e-mailvalidatie tijdens het uploaden.
  • Dubbele rijen — dezelfde ontvanger die twee keer voorkomt omdat een groepslijst en een lijst met late aanmelders zonder ontdubbeling aan elkaar zijn geplakt.
  • Inconsistente datumnotaties — een kolom met 2026-07-01 vermengd met 07/01/2026 uit een andere export. Houd je aan ISO 8601 (YYYY-MM-DD) en dit verdwijnt volledig.
  • Verschillen in hoofdlettergebruik in koptekstenEmail versus email versus E-mail. De parser is coulant voor veelvoorkomende varianten, maar een volledig aangepaste koptekstnaam wordt niet automatisch toegewezen.

Geen van deze is fataal — de preview-stap (hieronder) brengt elk ervan aan het licht voordat er iets wordt uitgegeven, dus de oplossing is “bewerk de spreadsheet, upload opnieuw” in plaats van “uitzoeken wie van de 3.000 ontvangers een kapotte badge kreeg”.

Stap 2: configureer de batch

Open vanuit het dashboard Credentials → Bulk Credentials en kies de badge die je uitgeeft. Dit is de stap waarin je alles instelt wat op de hele batch van toepassing is: de badge zelf, een gedeelde uitgiftedatum als je geen datums per rij in de CSV zet, en (als je uitgeversprofiel er een heeft) de LinkedIn-organisatie-ID waarmee elke ontvanger de credential in één klik aan zijn profiel kan toevoegen.

Bulk Credentials — stap 1, configureren

Dit is een goed moment om te controleren of de badge die je hebt geselecteerd de definitieve versie is — ontvangers zien welke afbeelding en criteria eraan gekoppeld zijn op het moment dat je uitgeeft, niet wat je er later aan bijwerkt.

Stap 3: upload en preview

Sleep je CSV erin en het platform parseert hem, toont je een previewtabel en markeert alles wat het niet kan verwerken — een ontbrekende e-mail, een misvormde datum, een dubbele rij. Er wordt niets uitgegeven totdat je de preview bevestigt.

Bulk Credentials — stap 2, uploaden

Deze preview-stap doet er meer toe dan het lijkt. Een typefout in één rij van een CSV met 2.000 rijen is met het blote oog makkelijk te missen, en het is veel goedkoper om hem op te vangen voordat 1.999 correcte rijen al zijn uitgegeven dan om het achteraf terug te draaien. Corrigeer de gemarkeerde rijen in je spreadsheet, upload opnieuw en de preview werkt bij.

Stap 4: draai de batch

Klik op Uitgeven en de batch begint met verwerken. Een voortgangsbalk houdt voltooide versus resterende rijen bij, en de batch draait serverzijdig — je hoeft het tabblad niet open te houden, en je laptop halverwege de batch dichtklappen laat je plek niet verloren gaan.

Dat laatste stukje is het waard om expliciet te maken, want het is het detail dat er echt toe doet voor grote groepen: de batchstatus leeft op de server, niet in je browser. Als je verbinding wegvalt, je laptop in slaapstand gaat, of je gewoon het tabblad sluit omdat er een vergadering begint, dan blijft de batch draaien (of hervat precies waar hij gebleven was als je hem pauzeerde) in plaats van vanaf nul te herstarten. Voor een bootcamp-groep van 40 personen is dit een leuke bonus. Voor een bedrijfsuitrol van 5.000 rijen is het het verschil tussen “het werkt gewoon” en “iemand moet twintig minuten lang een browsertabblad babysitten”.

Je kunt een draaiende batch ook opzettelijk pauzeren — stel, iemand meldt dat de tekst van de badgecriteria halverwege een run van 3.000 rijen een aanpassing nodig heeft — het probleem oplossen en hervatten zonder de al voltooide rijen opnieuw uit te geven.

Stap 5: handel mislukkingen af

Echte ontvangerslijsten bevatten slechte rijen: een e-maildomein met een typefout, een naamveld dat eigenlijk leeg is, een dubbel item doordat twee geëxporteerde bladen zijn samengevoegd. Wanneer een rij mislukt, stopt de batch niet — hij blijft de rest verwerken en markeert de mislukking voor latere beoordeling. Je krijgt een resultatenexport die precies laat zien welke rijen zijn geslaagd en welke niet, zodat je alleen de mislukte rijen kunt corrigeren en een kleine vervolgbatch opnieuw kunt draaien in plaats van de hele lijst opnieuw te controleren.

Dit is belangrijk voor de CSV-exportgewoonte die al gebruikelijk is op het credentials-dashboard — je kunt op elk moment een CSV opvragen van wat er daadwerkelijk is uitgegeven, hem afzetten tegen je bronlijst en precies weten wie nog een badge nodig heeft.

Het API-pad: dezelfde flow, geen dashboard

Al het bovenstaande gaat ervan uit dat er iemand aan het dashboard zit die door de wizard klikt. Als je afrondingen al in een systeem leven — een LMS, een CRM, een spreadsheet-automatisering — kun je diezelfde bulk-credential-flow rechtstreeks aansturen vanuit de Awards API.

Een minimale uitgifte-aanroep per ontvanger ziet er zo uit:

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"
  }'

Of in Python, in een lus over rijen gelezen uit dezelfde CSV die je anders met de hand zou uploaden:

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,
            },
        )

Dit is de moeite waard wanneer credential-uitgifte wordt geactiveerd door iets heel anders — een cursusafronding-webhook, een CRM-fasewisseling, een formulierinzending — in plaats van door een persoon die handmatig een CSV exporteert. We behandelen authenticatie en de volledige request/response-vorm in de API-quickstart. Elke op deze manier gemaakte credential is identiek aan een die via de dashboardwizard is gemaakt: dezelfde Open Badge v2.0-assertion, dezelfde verificatie-URL, hetzelfde pdf-certificaat.

Dashboardwizard vs. API: welke wil je nou echt?

Dashboard Bulk CredentialsAwards API
Best voorEen eenmalige of incidentele batch (afstuderen van een groep, conferentiedeelname)Een terugkerende trigger (elke cursusafronding, elke aankoop)
OpzetinspanningGeen — exporteer een CSV, upload hemEenmalig integratiewerk (webhook of script)
Wie draait hetProgrammabeheerder, geen codeWie het triggerende systeem beheert
FoutafhandelingPreview + resultatenexport per rijHTTP-status per request, afgehandeld in je eigen retry-logica

De meeste teams beginnen met de dashboardwizard omdat die niets meer vereist dan een CSV, en stappen pas over op de API zodra dezelfde batch drie of vier keer handmatig is gedraaid en het patroon duidelijk de moeite van het automatiseren waard is.

Privacy: wat er eigenlijk wordt opgeslagen

Een CSV met namen en e-mails is persoonsgegeven, en het is goed om te weten wat ermee gebeurt na het uploaden. Het e-mailadres van de ontvanger wordt nooit in platte tekst opgeslagen op de credential zelf — het wordt gehasht met een salt per credential als onderdeel van de Open Badge v2.0-assertion, volgens het hashed-formaat voor ontvangersidentiteit uit de spec. Die hash is wat een verificateur controleert, niet het ruwe adres. Het naamveld wordt opgeslagen zoals ingevoerd, aangezien het bedoeld is om zichtbaar te zijn op het certificaat en de verificatiepagina. Als een rij na uitgifte gecorrigeerd moet worden — meestal een verkeerd gespelde naam — kun je de individuele credential bewerken of intrekken vanuit het credentials-dashboard zonder de rest van de batch aan te raken.

Na de batch: breng ontvangers op de hoogte

De badge uitgeven en de ontvanger erover vertellen zijn twee verschillende stappen. Als je CSV niet al een e-mail via je eigen systeem activeert, laat de bulk-deelflow van het dashboard je de credentials die je zojuist hebt gemaakt multi-selecteren en in één keer een gepersonaliseerde deel-e-mail naar allemaal sturen — zie het in bulk verzenden van deel-e-mails voor de volledige doorloop, inclusief hoe personalisatie per ontvanger (naam, badge-afbeelding, verificatielink) automatisch wordt ingevuld.

Wanneer Bulk Credentials het juiste hulpmiddel is

Uitgifte in bulk is de juiste keuze wanneer het “batch”-kader op de echte wereld past: een groep die op dezelfde dag klaar was, een conferentie die net is afgelopen, een trainingsuitrol die een nalevingsdeadline haalt. Als je in plaats daarvan eenmalige credentials uitgeeft naarmate individuele mijlpalen worden bereikt — één promotie, één projectafronding — dan is het formulier voor een enkele credential sneller dan een CSV van één rij in elkaar zetten.

Voor alles wat terugkeert — dezelfde cursus die elke maand draait, een doorlopende onboarding-pijplijn — is het bovenstaande API-pad de moeite waard om één keer op te zetten. Het verandert “draai elke groep handmatig bulk credentials” in “afrondingen geven al automatisch credentials uit”, wat de versie van deze workflow is die de meeste programmabeheerders eigenlijk willen na de tweede of derde handmatige batch.

Klaar om je eerste verifieerbare credential uit te geven? Begin gratis op badges.ninja — visuele designer, publieke verificatiepagina, pdf-certificaat, Open Badge v2.0-output. Geen creditcard nodig.

Nacho Coll

Over de auteur

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.

Terug naar blog

Gerelateerde artikelen