Skip to content
Prepline
LibraryLearning Science & Credentials97 min readUpdated 2026-08-05

Written as a build recommendation for a specific learning platform; the architecture generalizes to any credential issuer.

Architecture Course · August 2026

Skills Wallet Architecture
Verifiable Credentials, and What Coursera Should Actually Build

The certificate is a PDF. The verification is a support ticket. The learner owns nothing. Twelve modules on the standards stack that fixes this — W3C VC 2.0, Open Badges 3.0, CLR 2.0, DIDs — the wallet and issuer architecture underneath it, and a phased roadmap with honest cost estimates and kill criteria.

12 Modules·~2 hrs·Quizzes & Flashcards·Built for Mustafa Furniturewala, VP Engineering, Coursera

0 / 12 complete
Standards status check — what is actually final, as of August 2026

This field has a habit of being discussed in the future tense. Most of it is past tense now. Be precise in internal conversations:

  • W3C Verifiable Credentials 2.0 — a W3C Recommendation since 15 May 2025, along with six sibling specs (JOSE/COSE securing, Data Integrity cryptosuites, Controlled Identifiers, Bitstring Status List). Not a draft. Done.
  • Open Badges 3.0 and CLR 2.0 — 1EdTech final specs, built on VCs, with a live certification program. Credly by Pearson certified for OB 3.0 on 27 January 2026.
  • OpenID4VCI 1.0 (issuance) final September 2025; OpenID4VP 1.0 (presentation) final 10 July 2025; SD-JWT published as RFC 9901 in November 2025.
  • EU mandate: all 27 member states must offer a compliant EUDI Wallet by December 2026. Readiness varies, but the deadline is law.
  • Still genuinely unsettled: trust registries (who decides an issuer is legitimate), wallet-to-wallet portability, and the UX of key recovery. These are where the real engineering risk lives.

The honest summary: the specs stopped being the bottleneck around mid-2025. What is missing is issuers at scale and verifiers who care. Both of those are business problems wearing a technical costume.

1

The Credentialing Problem

A Coursera certificate today is a PDF with a URL on it. The URL is the entire security model. Everything in this course follows from taking that sentence seriously.

What a certificate actually is right now

Consider the artifact a learner receives on completion. It is a rendered document containing a name, a course title, a date, a signature image, and a verification link back to coursera.org. It looks official. It is designed to look official. And structurally it is a claim about a claim: the PDF asserts that somewhere on a server there is a record, and invites you to go check.

That design has three properties, and all three are problems.

Property 1
Unverifiable offline
The document itself carries no proof. Open it in a text editor and there is nothing to check. Verification requires a live round trip to the issuer — and a human deciding to make it. Most never do.
Property 2
Siloed
A learner with credentials from Coursera, a bootcamp, an employer LMS, and a state licensing board holds four artifacts in four formats with four verification portals. There is no composite view of that person's skills anywhere.
Property 3
Institution-controlled
The record of the achievement lives in the issuer's database. If the issuer changes its URL scheme, deprecates a product, gets acquired, or shuts down, the credential silently becomes unverifiable. The learner has no copy that stands on its own.
The one-sentence framing

Today's credential is a pointer to a database row the issuer controls. A verifiable credential is a signed statement the learner controls. Every architectural decision downstream — wallets, DIDs, status lists, selective disclosure — is a consequence of moving the authoritative artifact from the issuer's server into the learner's hands.

The cost of the status quo, measured honestly

It is tempting to describe the current state as broken. It is more accurate to say it is expensive and slow in ways that are invisible because they are distributed across parties who each absorb a small piece.

  • The employer pays in verification latency. A background-check vendor contacting a registrar to confirm a degree is a multi-day operation with a per-check fee. That cost is only tolerable because it happens once per hire, at the end of the funnel, for a small subset of claims.
  • The learner pays in unrecognized skill. A candidate who has completed nine specializations cannot present that as a single verifiable fact. They retype it into a resume, where it becomes indistinguishable from an assertion.
  • The issuer pays in support load and in the strategic cost of being a dead end. Every verification request that lands as a support ticket is an operational expense on a credential you already gave away for free.

The critical asymmetry: verification cost scales with the number of claims, but the current design assumes verification is rare. The moment skills-based hiring makes verification routine — per skill, not per degree — the model collapses under its own arithmetic. That moment has arrived.

The skills-based hiring shift, with real numbers

Coursera runs its own primary research here, which is convenient because it means the strongest available data on this question is data you can cite in your own planning documents without buying a report.

Coursera Micro-Credentials Impact Report 2026 — the numbers that matter

Surveying over 3,500 learners, employers, and higher-education leaders across the US, UK, India, Saudi Arabia, Mexico, Indonesia, and the Philippines:

  • 94% of employers are willing to offer higher starting salaries to graduates holding micro-credentials.
  • 92% say entry-level hires with micro-credentials perform better in their first year.
  • 86% rely on skills-based hiring for entry-level roles; 98% globally use skills-based hiring in some form.
  • 96% hired at least three micro-credential holders in the past year; 62% reported a notable productivity increase.
A number to get right before you put it in a deck

The widely repeated framing "70% of employers use skills-based hiring in 2026" is conservative to the point of being wrong relative to Coursera's own survey, which puts it at 86% for entry-level roles and 98% in some form. The gap is a definitional one — "uses skills-based hiring at all" versus "has replaced degree requirements" are very different questions, and the low numbers usually measure the latter.

Practical guidance: cite 86% for entry-level roles with the Coursera report attached. It is defensible, it is yours, and it is the number a skeptical executive can trace to a methodology.

Note carefully what the 94% figure does and does not say. It says employers report a willingness to pay a salary premium for micro-credential holders. It does not say they pay more for cryptographically verified credentials specifically — that study does not exist yet. The bridge between those two statements is an assumption, and it is the central commercial assumption of this entire course. State it as an assumption in any business case, because an executive who catches you conflating the two will discount everything else you said.

Market size: a range, not a number

The commonly quoted figure for this space is $1.13B growing at 21.7% CAGR. Treat it as one data point among many rather than a fact, because published estimates diverge wildly depending on what the analyst decided to count.

Source / scopeSizeCAGR
Commonly cited "digital credentials" figure$1.13B21.7%
Digital credential management software (Business Research Co.)$2.58B (2025) → $2.91B (2026)12.7%
Digital credential management software (Market Research Future)$3.14B (2025) → $11.77B (2034)15.2%
Digital credential management (Verified Market Reports)$1.25B (2024) → $3.85B (2033)14.2%
Digital badges only (narrower scope)~$0.24B–$0.32B (2025)17–19%
Why the spread is 10x, and why you should say so out loud

The scope definition is doing all the work. "Digital badges" counts badge-issuing SaaS. "Digital credential management software" counts credential platforms including HR-side verification. Neither counts the value of the hiring decisions the credentials inform, which is where the actual economics live.

My read: the TAM question is the wrong question for this initiative. Coursera is not entering the credential-software market — it already issues millions of credentials. The relevant question is whether verifiable issuance increases enrollment, completion, enterprise renewal, and pricing power on credentials it already sells. That is a defensible attribution study, not a TAM slide.

The scale of the credential landscape

Credential Engine's Counting Credentials 2025 report (December 2025) is the best census available:

1,850,034
Unique credentials in the US
134,000+
Distinct credential providers
1.02M
Badges — the largest category
$2.34T
Annual US investment in education & workforce

Up from 1.08 million credentials in 2022. Certificates account for 486,352 and degrees for 264,099 — meaning badges alone now outnumber degrees roughly four to one.

Sit with that for a moment, because it reframes the problem. The scarce resource is no longer credentials. It is discrimination between them. When a hiring manager sees 1.85 million possible credentials, the signal value of any individual one approaches zero unless something distinguishes a rigorously assessed credential from a completion certificate. That "something" is the real product.

Bring it home — the strategic reframe for Coursera

Coursera's advantage in a world of 1.85 million credentials is not that it issues a lot of them. Several platforms issue a lot of them. The advantage is that behind a meaningful subset of Coursera credentials sits graded assessment, proctored exams, and university or industry partner governance — and none of that provenance survives the trip into a PDF.

A verifiable credential can carry it. That is the actual thesis of this course: the wallet is not the product; the machine-readable assessment provenance is the product, and the wallet is how it travels. Module 5 makes this concrete with a schema, and Module 6 makes it commercial.

Isn't the real blocker just that employers don't check credentials at all?

Partly, and it is the strongest objection to this whole program. Today many employers do not verify because verification is expensive and the base rate of fraud is low enough to absorb. If verification stays optional, making it cryptographically possible changes nothing.

Two things break that equilibrium. First, cost: when verification is a free function call rather than a phone call, the calculus flips from "is it worth checking?" to "why wouldn't we?" Second, and more decisively, AI-driven screening. A human recruiter skimming 200 resumes cannot verify each claim. An agent processing 20,000 applications can verify every claim on every application, and will, because the marginal cost is a network round trip. The demand side for verification is being created by automation, not by policy.

This is why Module 7 matters more than it looks: the verification consumer of 2028 is probably not a person.

2

The Standards Stack

Six specifications, each solving exactly one problem, stacked so that a change at one layer does not force a change at the others. If you learn only one thing from this module, learn which layer owns which decision.

The stack, bottom to top

L0
Identifiers — Decentralized Identifiers (DIDs)
Answers: how do I name a party without a central registry issuing the name? A DID resolves to a DID document containing public keys. W3C DID Core 1.0 (REC, July 2022)
L1
Container — Verifiable Credentials Data Model 2.0
Answers: what is the generic shape of a signed claim, and how is it secured against tampering? Issuer, subject, validity window, status, proof. Domain-agnostic — it does not know what a course is. W3C REC, 15 May 2025
L2
Semantics — Open Badges 3.0
Answers: what does an achievement look like inside that container? Defines Achievement, AchievementSubject, criteria, evidence, alignment to skill frameworks. An OB 3.0 credential is a W3C VC with an extra context. 1EdTech, final
L3
Aggregation — Comprehensive Learner Record 2.0
Answers: how do I bundle many achievements into one signed record with relationships between them? A CLR is itself a VC that wraps an array of VCs — an outer onion layer that is also signed. 1EdTech, final, developed alongside OB 3.0
L4
Transport — OpenID4VCI / OpenID4VP
Answers: how does a credential actually get into a wallet, and how is it presented? The layer most architecture diagrams forget, and the one that determines whether your credential works in anyone else's wallet. OID4VCI 1.0 final Sept 2025; OID4VP 1.0 final 10 July 2025
L5
Lifecycle — Bitstring Status List 1.0
Answers: how do I revoke or suspend a credential I already handed out? A compressed bitstring published at a URL; each credential holds an index into it. W3C REC, part of the VC 2.0 family
The layering rule that makes this tractable

Each layer is replaceable without touching the ones above it. You can change DID method (L0) without changing your credential schema (L2). You can add CLR bundling (L3) without reissuing anything. You can swap transport (L4) without re-signing.

The one exception, and it bites people: the securing mechanism at L1 constrains selective disclosure at every layer above. If you sign with plain Ed25519 over the whole document, you have foreclosed field-level disclosure forever for those credentials. Module 11 covers the escape routes; the point here is that it is an L1 decision with L3 consequences, and it is close to irreversible at scale.

W3C Verifiable Credentials 2.0 — the container

Became a W3C Recommendation on 15 May 2025, alongside six sibling specifications covering JOSE/COSE securing, Data Integrity cryptosuites, Controlled Identifiers, and Bitstring Status Lists. This is a finished, stable, royalty-free web standard, not an emerging technology.

The data model is deliberately thin. A credential is:

Minimal VC 2.0 skeleton
{
  "@context": ["https://www.w3.org/ns/credentials/v2"],
  "id": "urn:uuid:3f9d2a1c-...",
  "type": ["VerifiableCredential"],
  "issuer": "did:web:coursera.org",
  "validFrom": "2026-08-05T14:22:00Z",
  "credentialSubject": {
    "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"
  },
  "credentialStatus": { ... },
  "proof": { ... }
}

Five things worth noting, because each is a trap for people carrying v1.1 habits:

  • validFrom / validUntil, not issuanceDate / expirationDate. The v1.1 names are gone in 2.0. Mixing them silently produces credentials that fail strict validation.
  • issuer may be a string or an object. Use the object form when you want to carry a display name and URL, which you do for anything a human will see.
  • credentialSubject.id is optional. A credential with no subject identifier is a bearer credential — anyone holding it can present it. Sometimes correct; usually not what you want for a learner achievement.
  • proof is not the only way to secure a credential. The VC-JOSE-COSE spec lets you wrap the credential in a JWT instead, with no proof member at all. Two legitimate securing mechanisms, and verifiers must handle whichever you chose.
  • The @context is load-bearing. JSON-LD processing means unknown terms are an error, not something to ignore. Every field you add needs a context entry.

Open Badges 3.0 — the achievement semantics

1EdTech rebuilt Open Badges on top of W3C VCs for version 3.0, and developed CLR 2.0 alongside it so the two share a data model. The practical consequence: an Open Badges 3.0 assertion is a Verifiable Credential. There is no conversion step. You add a context and a type, and the achievement-specific vocabulary becomes available.

Open Badges 3.0 — the shape that matters
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
  ],
  "type": ["VerifiableCredential", "OpenBadgeCredential"],
  "issuer": {
    "id": "did:web:coursera.org",
    "type": ["Profile"],
    "name": "Coursera",
    "url": "https://www.coursera.org"
  },
  "validFrom": "2026-08-05T14:22:00Z",
  "credentialSubject": {
    "type": ["AchievementSubject"],
    "id": "did:key:z6MkhaXgBZ...",
    "achievement": {
      "id": "https://coursera.org/achievements/gen-ai-for-everyone",
      "type": ["Achievement"],
      "achievementType": "Certificate",
      "name": "Generative AI for Everyone",
      "description": "...",
      "criteria": { "narrative": "Completed all graded assessments with 80% or higher." },
      "alignment": [ ... ]
    }
  }
}

The two fields that carry the strategic weight are criteria and alignment, and both are routinely left empty by lazy issuers.

  • criteria is what a human or agent reads to understand what the learner had to do. "Watched the videos" and "passed a proctored exam at 80%" are the same badge shape with radically different meaning. Fill this in.
  • alignment points the achievement at an external skill framework — O*NET, ESCO, a competency framework, or Credential Engine's CTDL. This is what makes credentials comparable across issuers, which is what makes skills-based search possible at all.
The unglamorous field that decides whether any of this works

alignment is the difference between a portable credential and a portable image. Without it, an employer holding badges from Coursera, Google, and a bootcamp has three incomparable strings. With it, all three point at the same skill concept and become a set operation.

This is also where Coursera has an unusual asset. Coursera already maintains an internal skills taxonomy mapped across its catalog. Emitting that mapping as alignment entries is comparatively cheap engineering with outsized strategic value — it makes Coursera credentials machine-comparable while competitors emit bare strings. If one thing in this course gets funded, make it this.

CLR 2.0 — the bundle

A Comprehensive Learner Record allows many Open Badge achievement credentials to be bundled together with defined associations between them — another onion layer wrapping the inner set of credentials, and itself signed.

Two things this buys you that individual badges cannot:

  1. Relationships. "This specialization certificate is composed of these five course certificates" is expressible as structure rather than convention. A verifier can traverse it.
  2. Multi-source aggregation. A CLR can bundle credentials from different issuers into one presentable record — which is what a transcript actually is, and what a resume is pretending to be.

The subtlety worth internalizing: bundling does not re-attest. A CLR containing a third-party credential does not mean the CLR signer vouches for that credential's content. It means "I assembled these." Verifiers must check each inner credential's own proof independently. Getting this wrong is the most common CLR implementation bug — and it is a security bug, not a correctness one.

DIDs — identifiers without a registrar

A DID is a URI that resolves to a DID document containing public keys and service endpoints. The critical property: resolution requires no central authority to have issued the identifier.

MethodHow it resolvesGood forTrade-off
did:webHTTPS fetch of /.well-known/did.json at the domainInstitutional issuers. Trust inherits from the domain and its TLS certificate.Centralized — if you lose the domain, you lose the identity. For Coursera this is a feature.
did:keyNothing to fetch — the key is encoded in the identifier itselfLearners. Zero infrastructure, works offline, generated on-device in milliseconds.No rotation. Key loss is identity loss. Static across verifiers, so it correlates.
did:jwkSame idea as did:key, JWK-encodedJOSE-native stacksSame rotation limitation
did:ion, did:ethr, ledger methodsDistributed ledger lookupCensorship resistanceOperational complexity, cost, latency, and a governance story you must defend
The recommendation, stated plainly

did:web for Coursera. did:key for learners. No ledger anywhere.

Coursera's trust genuinely does derive from controlling coursera.org — pretending otherwise by putting an identifier on a chain adds operational cost and a governance conversation while removing nothing. And did:web means a verifier's "resolve the issuer" step is an HTTPS GET their existing infrastructure already knows how to do, cache, and monitor.

The one legitimate objection: did:web means a verifier can tell that a credential was issued by Coursera before checking anything else, and that domain control is a single point of failure. Both are true. Both are acceptable for an institutional issuer whose whole value proposition is being a recognized institution.

How the layers actually compose

1
L0 — IdentifyCoursera publishes did:web:coursera.org. The learner's wallet generates did:key:z6Mk... on device.
2
L2 — DescribeCoursera assembles an OpenBadgeCredential naming the achievement, criteria, and skill alignments.
3
L5 — Allocate statusThe issuer assigns an index in a published bitstring status list so the credential can be revoked later.
4
L1 — SecureThe credential is signed — a Data Integrity proof or a JWT — referencing a key in Coursera's DID document.
5
L4 — DeliverAn OID4VCI credential offer is generated as a link or QR. The wallet redeems it and stores the credential.
6
L3 — AggregateLater, the learner bundles several credentials into a signed CLR for a single application.
7
L4 — PresentAn employer requests specific credentials over OID4VP. The wallet builds a Verifiable Presentation, signed by the learner's key, bound to that verifier and a one-time challenge.

What is genuinely not settled

Three unsolved problems — know them before someone else names them in your review

1. Trust registries. Verifying a signature proves who issued a credential. It says nothing about whether that issuer should be believed. Anyone can stand up did:web:definitely-a-real-university.example and issue perfect credentials. The ecosystem answer — accreditation-backed issuer registries — exists in fragments (1EdTech certification, Credential Engine, national registries) with no interoperable resolution story. This is the largest open gap in the field.

2. Wallet portability. Credentials are portable in principle. Moving your whole wallet — keys, credentials, history — from one vendor to another is not standardized. A learner who picks the wrong wallet in 2026 may be stuck.

3. Key recovery. A did:key learner who loses their phone loses their identity, and every credential bound to it must be reissued. Every proposed fix (custodial backup, social recovery, seed phrases) trades away either self-sovereignty or usability. Nobody has solved this. Module 4 treats it as the hardest problem in wallet design, because it is.

Why not just sign a JSON blob with our own scheme? We control both ends anyway.

You do not control both ends — that is the entire premise. Controlling both ends is what you have today, and it is what makes a Coursera certificate valueless outside Coursera.

A proprietary signed blob gets you tamper-evidence, which is genuinely the easy 20%. What it does not get you: a verifier who already has a library that parses it, a wallet that will store it, an ATS that can ingest it, a skills framework it aligns to, a revocation mechanism verifiers already poll, or a regulator who recognizes it. In the EU, where all 27 member states must ship EUDI Wallets by December 2026, a proprietary format is simply not admissible into the wallet.

The standards are not there because they are elegant. They are there because the value of a credential is proportional to the number of parties who can check it without a prior agreement with you. A custom format sets that number to one.

3

The Trust Triangle

Issuer, Holder, Verifier. Three roles, and one property that makes the whole thing worth building: the verifier never has to talk to the issuer.

The three roles — and the fourth corner everyone forgets

Issuer
Coursera
Asserts a claim and signs it with a private key. Publishes the corresponding public key in a DID document. Maintains a revocation status list. Then steps out of the transaction permanently.
Holder
The learner
Stores credentials in a wallet. Decides what to share, with whom, and how much. Signs presentations with their own key to prove they are the subject and not merely a possessor.
Verifier
The employer
Requests credentials, checks the cryptographic proof against the issuer's published key, checks revocation status, and decides whether to trust the issuer at all.
The fourth corner
Verifiable Data Registry
Wherever public keys, schemas, and status lists are published. For did:web this is simply HTTPS + DNS + the CA system — no ledger required. Most diagrams draw a blockchain here and confuse everyone.
The property that justifies the entire architecture

The verifier never contacts the issuer about a specific learner. They fetch a public key (cacheable, learner-independent) and a status list (cacheable, covers ~131,000 credentials at once). Neither request reveals which learner is being checked.

Contrast with today: verification means asking Coursera about a named person. That is a privacy leak, a latency cost, an availability dependency, and a business relationship — four problems that vanish simultaneously. Everything else in this course is plumbing in service of this one property.

What actually happens on the wire

1
Verifier → HolderA presentation request: "I need a credential of type OpenBadgeCredential aligned to skill X." Includes a nonce and the verifier's identity (domain).
2
Holder (wallet)Matches local credentials against the request. Shows the learner exactly what is being asked for and what would be revealed. Learner approves.
3
HolderBuilds a VerifiablePresentation wrapping the selected credentials, and signs it with the learner's private key over the nonce and domain.
4
VerifierChecks the presentation signature → proves the presenter controls the subject DID, and that this presentation was made for this verifier, now.
5
Verifier → RegistryResolves did:web:coursera.orghttps://coursera.org/.well-known/did.json. Cached aggressively.
6
VerifierChecks each credential signature against the issuer's public key → proves the content is unmodified and genuinely from Coursera.
7
Verifier → RegistryFetches the status list, checks the credential's bit → not revoked. One fetch covers the whole list.
8
VerifierChecks validFrom/validUntil, schema conformance, and finally the business question: do I trust did:web:coursera.org? That last one is policy, not cryptography.
Step 4 is the one implementations skip

Checking the credential signature but not the presentation signature is a complete authentication bypass. Without step 4, anyone who obtains a copy of a credential can present it as their own — you have verified that Coursera said something true about Alice, and then handed the job to Bob.

The nonce and domain binding matter just as much: without them, a valid presentation captured by one verifier can be replayed to another. If you write a verifier library, these three checks — presentation signature, nonce freshness, domain match — are the ones to put a test around first.

Holder binding: proving you are the subject

The mechanism that makes a credential non-transferable is that credentialSubject.id contains the learner's DID, and presenting it requires signing with the corresponding private key. Possession of the document is not enough; you need the key.

This has a consequence people find surprising: a credential is only as non-transferable as the learner's willingness to hand over their key. Nothing stops a learner from giving someone their phone and PIN. Cryptography prevents theft, not collusion. Anyone claiming VCs eliminate credential fraud is overselling — they eliminate forgery and tampering, which is a large and worthwhile subset.

Selective disclosure — three mechanisms, honestly ranked

"Prove you have this skill without revealing your grade" is the canonical demo. Here is what actually delivers it, in ascending order of sophistication and descending order of readiness.

MechanismHow it worksUnlinkable?Readiness
Atomic credentialsIssue many small credentials instead of one big one. Share only the relevant ones.NoShip today — needs no crypto beyond ordinary signatures
SD-JWT (RFC 9901, Nov 2025)Issuer signs salted hashes of each claim; holder reveals only chosen claims plus their salts.No — the signature is a constant across presentationsProduction — an IETF RFC, used in EUDI
BBS+ / bbs-2023Multi-message signature scheme; holder derives a fresh zero-knowledge proof revealing a chosen subset.Yes — each derived proof is uniqueEmerging — cryptosuite still maturing, library support thin
ZK predicates ("score > 80" without the score)General-purpose zero-knowledge circuits over credential claims.YesResearch — no interoperable production deployment in education
Where the honest line sits, and where marketing crosses it

"Zero-knowledge proofs let a learner prove they scored above 80% without revealing the score" is the sentence that appears in every deck about this topic. That specific capability — a ZK predicate over a numeric claim — is not something you can ship interoperably in 2026.

What you can ship is selective disclosure of whole fields: reveal the skill, hide the score. Practically, this satisfies nearly every real use case, because employers want to know whether you have the skill far more often than they want a range proof over your grade.

My recommendation: design the schema so atomic disclosure is possible, secure with SD-JWT where field-level hiding is needed, and treat BBS+ as a fast-follow. Do not put ZK predicates on a roadmap you intend to be held to.

The unlinkability question, and why it may matter less than it seems

SD-JWT hides fields but not identity across presentations: the issuer's signature is a constant, so two verifiers who compare notes can tell they saw the same credential. BBS+ fixes this by deriving a fresh proof each time.

Whether you should care depends entirely on the credential. For an employment credential the learner is deliberately presenting under their real name to a named employer, correlation is largely moot — they already told you who they are. For an anonymous skills marketplace, or a credential asserting something sensitive (a disability accommodation, a recovery program completion), unlinkability is the whole ballgame.

Practical guidance: segment by sensitivity. Ordinary course completions do not need BBS+. If Coursera ever issues credentials touching protected categories, that class needs a different securing mechanism from day one — and as Module 2 noted, that decision is close to irreversible once issued at scale.

DIDComm — the encrypted channel, and its actual status

DIDComm v2 (Decentralized Identity Foundation) defines encrypted, authenticated, transport-agnostic messaging between DIDs. Messages are encrypted to the recipient's DID document keys and can travel over HTTPS, Bluetooth, or a mediator — enabling long-lived agent-to-agent relationships without a shared server.

Where DIDComm stands versus OpenID4VC — say this accurately

DIDComm is elegant and it is not what won for credential issuance and presentation. OpenID4VCI 1.0 (final September 2025) and OpenID4VP 1.0 (final 10 July 2025) are what the EU Digital Identity Wallet ecosystem standardized on, and at W3C TPAC in November 2025 the FedID working group hardcoded a finite protocol list for the browser Digital Credentials API: openid4vp-v1-*, org-iso-mdoc, and openid4vci-v1. DIDComm is not on that list.

The practical read for an architect: build OID4VCI/OID4VP first. That is what wallets, browsers, and the EU stack speak. Treat DIDComm as an option for peer-to-peer flows outside issuance and presentation — not as your primary transport. Choosing DIDComm as the main channel in 2026 means building bridges to reach every wallet that matters.

If the verifier never contacts the issuer, how does revocation work without a phone-home?

It is a phone-home to a list, not to a lookup. Bitstring Status List works by publishing one compressed bitstring covering a large population of credentials — commonly 131,072 or more. Each credential carries an index. The verifier fetches the entire list and reads one bit.

That gives herd privacy: the issuer learns that someone checked list #3, not which of the 131,072 credentials in it. With a CDN in front and no per-request logging, even the timing signal is weak. Compressed, such a list is a few kilobytes.

Two residual leaks worth naming honestly. First, the fetch reveals the verifier's IP and rough timing to whoever serves the list, so serve it from a CDN and do not log. Second, if a status list is small or a credential type is rare, the anonymity set shrinks and the herd stops helping — which is an argument for large, well-mixed lists rather than one list per course.

4

Wallet Architecture

A wallet is four hard problems in a trench coat: key custody, storage, protocol handling, and recovery. Three of them are solved. The fourth is why wallets are still bad.

Component architecture

Component 1
Key store
Generates and holds the learner's private key. Should be hardware-backed — Secure Enclave on iOS, StrongBox / Android Keystore — so the key is non-extractable: the OS signs on the app's behalf and never hands over the bytes.
Component 2
Credential store
Encrypted local database of credentials plus metadata (source, date received, presentation history). Encryption key derived from a user secret and/or held in the key store.
Component 3
Protocol handlers
OID4VCI for receiving, OID4VP for presenting, plus deep-link and QR handling. This is where interoperability lives or dies — and where most of the ongoing maintenance is.
Component 4
Presentation engine
Matches incoming requests against held credentials, computes what would be revealed, renders that to the learner in language they understand, and builds the signed presentation on approval.
Component 5
Backup & recovery
The hard one. Encrypted export, cloud-backed restore, or social recovery — each trading self-sovereignty against the certainty that people lose phones.
Component 6
Trust & policy UI
Shows who is asking, whether the issuer is recognized, and what a "verified" checkmark actually means. Mostly a design problem, and the one that determines whether learners get phished.

Key management: the non-negotiables

  • Generate on device, never transmit. A private key that touched a server is a private key the server's operator could have kept. If Coursera generates learner keys, Coursera can impersonate learners — and the entire self-sovereignty claim is theater.
  • Hardware-backed and non-extractable. Use the platform keystore so signing happens inside the secure element. Malware on a rooted device can request signatures; it cannot exfiltrate the key and sign forever elsewhere.
  • Bind unlock to biometrics or device passcode. Signing should require a user-presence gesture, not merely an unlocked app.
  • Consider per-verifier keys. One static did:key presented to every employer is a persistent cross-verifier identifier — effectively a cookie that cannot be cleared. Pairwise DIDs fix it at real cost in complexity and credential reuse, since a credential is bound to one subject DID.
Recovery: the unsolved problem, stated without euphemism

A learner whose device is lost, stolen, or factory-reset has lost their private key. Every credential bound to that did:key is now unpresentable. Not revoked — just orphaned. The options, all bad in different ways:

  • Reissue from the issuer. Works, and is the only path most deployments actually use. But it means the issuer must retain enough to reissue — which quietly reintroduces the issuer-controlled database the architecture was meant to escape. Honest, and fine, as long as nobody pretends otherwise.
  • Encrypted cloud backup. Good UX; makes the cloud provider a custodian of the encrypted blob, and the passphrase becomes the new single point of failure.
  • Seed phrase. Fully self-sovereign; catastrophic usability. A decade of crypto-wallet evidence says ordinary users lose seed phrases at high rates.
  • Social recovery. Elegant on paper; requires the learner to have designated guardians in advance, which almost nobody does.

The pragmatic answer for an education issuer: hardware-backed keys, encrypted optional backup, and a frictionless reissuance path as the real safety net. Design reissuance as a first-class flow rather than a support escalation — because at Coursera's scale it will be the most-used recovery mechanism by an enormous margin.

Storage: on-device versus cloud-backed

On-device onlyCloud-backed (encrypted)Custodial / web wallet
Key custodyLearner, hardware-backedLearner; encrypted backup escrowedProvider holds keys
Device lossTotal lossRecoverableNothing to lose
Multi-deviceNoYesYes
Provider can impersonateNoNo (if E2E)Yes
Onboarding frictionApp installApp install + backup setupA login
Honest labelSelf-sovereignSelf-sovereign with a safety netNot self-sovereign — say so
The uncomfortable recommendation

For a platform with a very large, global, mobile-diverse learner base, a custodial web wallet will out-adopt a self-sovereign mobile wallet by an order of magnitude, because "log in and your credentials are there" beats "install an app, secure a key, save a backup" every time.

The right move is not to pick one. It is to ship the custodial web wallet for reach and support export to any standards-compliant wallet for sovereignty — and to be scrupulously honest in the UI about which mode a learner is in. The failure mode to avoid is marketing a custodial product as self-sovereign. That is the kind of claim that gets quoted back at you in a conference talk.

Import, export, and the multi-issuer reality

A wallet that only holds Coursera credentials is a Coursera feature, not a wallet. The import paths that must work:

  1. OID4VCI credential offer — the standard path. Issuer generates an offer (deep link or QR), wallet redeems it for the credential. Works with any conforming issuer.
  2. File import — a .json or .jwt credential dropped in from email or downloads. Unglamorous, and how a great deal of real-world movement happens.
  3. Legacy Open Badges 2.0 — hosted or baked-in-PNG badges. Millions exist. A wallet that cannot ingest them starts empty, and an empty wallet gets deleted.

Export must be equally serious: standards-compliant credential files, an encrypted full-wallet archive, and a plain human-readable summary. If export is worse than import, you have built a roach motel and the ecosystem will notice.

Reference implementations worth studying

MIT's Learner Credential Wallet — the obvious starting point

Developed by the Digital Credentials Consortium (a global network of universities including MIT), originally with US Department of Education grant funding from 2020. Cross-platform iOS and Android, supports W3C VCs and Open Badges 3.0.

Stewardship has moved to the OpenWallet Foundation (a Linux Foundation initiative); the code lives at openwallet-foundation-labs/learner-credential-wallet on GitHub. The DCC itself now operates as the Digital Credentials Commons.

Why it matters for a build-versus-fork decision: it is education-native (built around learner credentials rather than government ID), open source, already shipped to both app stores, and governed by a neutral foundation rather than a vendor. That last point is what makes forking it defensible in a partner conversation — you are not adopting a competitor's stack.

ASU Pocket — the real-world deployment to learn from

Arizona State University's digital wallet for storing achievements across work and learning — badges, experiences, academic and employment records — as Verifiable Credentials, stored encrypted on device. It went to open beta on iOS and Android in November 2023, sits alongside ASU's Trusted Learner Network, and spawned a sibling app, My Skills Pocket, aimed at career mobility for retail workers.

The lesson is less technical than organizational. ASU did not ship a wallet and wait. It shipped a wallet plus an issuer network plus a target population with a concrete career-mobility use case. The wallet was the least interesting part. Any Coursera plan that funds the app and underfunds the issuance pipeline and the demand side will reproduce the most common failure in this field: a well-built wallet with nothing worth putting in it.

Revocation from the wallet's side

Wallets do not enforce revocation — verifiers do. But a good wallet surfaces it: periodically re-check status lists for held credentials and tell the learner when something has been revoked or expired, rather than letting them discover it in an interview.

This creates a genuine privacy tension. Background status polling means the wallet phones the issuer's CDN on a schedule, producing a traffic pattern tied to a device. Mitigations: batch checks across all credentials, randomize timing, route through the same CDN as everything else, and let the learner turn it off. Worth doing, worth documenting, and worth not pretending is free.

Bring it home — should Coursera build a wallet at all?

Here is the contrarian read, and I think it is the correct one. The wallet is the least defensible part of this stack and the most expensive to run. It is a consumer mobile app with key custody, a support burden, app-store release cycles, and a long tail of device-specific bugs — competing against Apple Wallet, Google Wallet, EUDI national wallets, and every government ID app, all of which will hold credentials eventually.

What is defensible is being the best issuer in the world: credentials so well-structured, so richly aligned to skills, and so honestly graded that every wallet wants them and every verifier trusts them.

Recommendation: ship a lightweight custodial web wallet for reach (weeks of work, not quarters), invest heavily in standards-compliant issuance and export, and defer a native mobile wallet until there is evidence learners want one that is not their government's or their phone vendor's. Module 10 sequences this explicitly, and it is the biggest single departure from the conventional roadmap.

If we fork MIT's wallet, what are we actually signing up for?

A React Native codebase, two app-store relationships, and an ongoing protocol-compatibility treadmill. Concretely: two annual OS major versions to chase, biometric and keystore API churn, OID4VCI/VP profile drift as the EU ecosystem iterates, credential-format additions (mdoc, SD-JWT VC), and a support queue where the top ticket will be "I got a new phone."

Call it 3–4 engineers steady-state after launch, not counting design and support. That is not an argument against doing it — it is an argument for knowing that a wallet is a product line with a permanent staffing commitment, not a project. Most organizations that regret building a wallet regret the year-three cost, not the year-one build.

The counter-argument in favor: forking gets you standards conformance and an education-native data model for free, and OpenWallet Foundation stewardship means you are contributing to a commons rather than to a competitor. If the strategic goal is credibility with university partners, that matters.

5

The Issuer Side — What Coursera Needs to Build

This is the module that matters most, because issuance is the part Coursera is uniquely positioned to do well and the part nobody else can do on its behalf.

The issuance pipeline

1
TriggerCompletion event. A learner finishes a course, specialization, or professional certificate. Emitted onto a durable queue — never issued synchronously in the request path.
2
GateEligibility & integrity check. Grades finalized? Honor-code flags clear? Payment settled? Refund window closed? This gate is what makes the credential worth signing — and the source of nearly every "why was I not issued" ticket.
3
AssembleClaim assembly. Pull achievement definition, skill alignments, assessment metadata, instructor, partner institution, effort hours. Resolve the learner's subject DID (or mint a placeholder if they have no wallet yet).
4
ValidateSchema validation. Validate against OB 3.0 before signing. A signed invalid credential is worse than no credential — it is a permanent, publicly verifiable bug.
5
AllocateStatus list index. Reserve an index in the current bitstring status list. Persist the mapping durably before signing, or you lose the ability to revoke.
6
SignSigning service. The only component with access to the private key. Takes a validated document, returns a secured credential. Small, boring, heavily audited, separately deployed.
7
DeliverOffer generation. Create an OID4VCI credential offer, plus a hosted fallback URL and a downloadable file. Not every learner has a wallet, and the ones who do not are the majority.
8
NotifyLearner notification. Email/in-app: what they earned, what it proves, how to claim it into a wallet, and how to share it. The step that determines whether any of the previous seven mattered.
The architectural rule: separate assembly from signing

Assembly is complex, changes often, and touches many systems. Signing is simple, changes rarely, and touches a private key. Putting them in one service means every schema change is a change to code with key access — and every one of those changes needs a security review.

Keep the signing service to a few hundred lines: accept a validated document plus a key identifier, return a secured credential. Everything interesting happens upstream. This is the same instinct that keeps payment code out of your product services, and it pays off the first time you need to rotate a key under pressure.

Signing infrastructure and the rotation problem

Coursera publishes did:web:coursera.org, resolved at https://coursera.org/.well-known/did.json:

/.well-known/did.json
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/multikey/v1"
  ],
  "id": "did:web:coursera.org",
  "verificationMethod": [
    {
      "id": "did:web:coursera.org#key-2026-01",
      "type": "Multikey",
      "controller": "did:web:coursera.org",
      "publicKeyMultibase": "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"
    },
    {
      "id": "did:web:coursera.org#key-2025-01",
      "type": "Multikey",
      "controller": "did:web:coursera.org",
      "publicKeyMultibase": "z6MkjchhfUsD6mmvni8mCdXHw216Xrm9bQe2mBH1P5RDjVJG"
    }
  ],
  "assertionMethod": [
    "did:web:coursera.org#key-2026-01",
    "did:web:coursera.org#key-2025-01"
  ]
}
The rotation trap that will bite you exactly once

Rotate a signing key the way you would rotate a TLS certificate — remove the old one — and every credential ever signed with it becomes unverifiable. Not revoked. Unverifiable, which reads to a verifier as forged. At Coursera's volume that could be tens of millions of credentials broken by one deploy.

The rule: old verification methods are never deleted from the DID document. You stop signing with a retired key, but you keep publishing its public half forever. The document grows by one entry per rotation, which is fine — it is a few hundred bytes a year.

Corollary: if a key is ever compromised, removing it is not the fix either, because that invalidates legitimate historical credentials too. The fix is revoking the credentials fraudulently issued with it via the status list, and publishing the compromise window. Write that runbook before you need it.

Practical setup: private keys in a KMS or HSM (AWS KMS with Ed25519, or CloudHSM for stricter custody), one active signing key with a documented rotation cadence, and dual control on key operations. The signing service holds a key reference, never key material.

Schema design: what goes in a Coursera credential

This is where the strategy becomes a data structure. The default is a badge with a name and a date. The differentiated version carries provenance a verifier can reason about.

A Coursera OB 3.0 credential, with the fields that matter
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
  ],
  "id": "urn:uuid:9f2a4c81-6b3e-4f77-9c21-8ad5e0e1b774",
  "type": ["VerifiableCredential", "OpenBadgeCredential"],
  "issuer": {
    "id": "did:web:coursera.org",
    "type": ["Profile"],
    "name": "Coursera",
    "url": "https://www.coursera.org"
  },
  "validFrom": "2026-08-05T14:22:00Z",
  "credentialSubject": {
    "type": ["AchievementSubject"],
    "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK",
    "achievement": {
      "id": "https://coursera.org/achievements/deep-learning-specialization",
      "type": ["Achievement"],
      "achievementType": "Certificate",
      "name": "Deep Learning Specialization",
      "description": "Five-course specialization covering neural networks, ...",
      "criteria": {
        "narrative": "Passed all 5 courses with a weighted average of 80% or
                      higher across 23 graded programming assignments and
                      12 quizzes. Identity verified at enrollment."
      },
      "alignment": [
        {
          "type": ["Alignment"],
          "targetName": "Deep Learning",
          "targetFramework": "Coursera Skills Taxonomy",
          "targetUrl": "https://coursera.org/skills/deep-learning"
        },
        {
          "type": ["Alignment"],
          "targetName": "Machine Learning",
          "targetFramework": "O*NET",
          "targetCode": "15-2051.01",
          "targetUrl": "https://www.onetonline.org/link/summary/15-2051.01"
        }
      ]
    },
    "result": [
      { "type": ["Result"], "achievedLevel": "Passed", "resultDescription": "..." }
    ]
  },
  "credentialStatus": {
    "id": "https://credentials.coursera.org/status/3#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://credentials.coursera.org/status/3"
  },
  "proof": {
    "type": "DataIntegrityProof",
    "cryptosuite": "eddsa-rdfc-2022",
    "created": "2026-08-05T14:22:01Z",
    "verificationMethod": "did:web:coursera.org#key-2026-01",
    "proofPurpose": "assertionMethod",
    "proofValue": "z58DvkA9L2mHq..."
  }
}

The assessment integrity tier — the differentiating design decision

Every credential should carry a machine-readable statement of how rigorously it was assessed. Not buried in prose — as a field a verifier can filter on.

TierWhat it meansEvidence carriedEmployer read
T4 — ProctoredIdentity-verified, proctored, timed assessmentProctoring provider, identity-verification method, score bandStrongest — comparable to a certification exam
T3 — Auto-gradedMachine-graded programming assignments and quizzes with a pass thresholdAssignment count, threshold, weighted average bandStrong — demonstrates applied capability
T2 — Peer-reviewedHuman-reviewed submissions against a rubricRubric reference, reviewer countModerate — good for open-ended work, noisier signal
T1 — CompletionContent consumed; no meaningful assessmentEffort hours, modules completedParticipation — exposure, not capability
Why publishing a tier that includes an unflattering level is the strongest move available

The instinct is to make every credential look maximally impressive. Resist it. In a market with 1.85 million credentials, the issuer who tells you which of their credentials are weak is the issuer you believe about the strong ones.

Concretely: an employer filtering for T4 and T3 credentials gets a high-precision candidate pool. That employer now has a reason to prefer Coursera credentials over a competitor emitting undifferentiated badges — not because Coursera's badges are better on average, but because Coursera's badges are legible. Legibility is the moat. It is also the thing a competitor cannot copy quickly, because it requires actually having the assessment data.

The internal cost is real and worth naming: someone has to defend the tier assignments, and product teams will lobby for upgrades. Put the taxonomy under the same governance as academic integrity, not under marketing.

Batch issuance at Coursera scale

Suppose the retroactive backfill is on the order of tens of millions of credentials. Where does that actually hurt?

StageCost per credentialBottleneck?
Ed25519 signatureTens of microsecondsNo — a single core does tens of thousands/sec
JSON-LD canonicalization (RDFC-1.0)Single-digit to tens of millisecondsYes — often 100–1000x the signing cost
Context resolution over the networkUnboundedCatastrophic if not pre-cached — and a liveness dependency on third-party hosts
Claim assembly (DB reads)MillisecondsManageable with batching
Status list allocationMicroseconds, but contendedNeeds care — pre-allocate index ranges per worker
The counter-intuitive result: the crypto is free, the JSON-LD is not

Engineers plan capacity around signature throughput and are then surprised. The real cost in a Data Integrity pipeline is RDF canonicalization — parsing JSON-LD, expanding contexts, and producing a deterministic N-Quads serialization before hashing.

Three mitigations, in order of impact:

  • Pin and pre-load every context locally. Never fetch @context URLs at signing time. This is both a performance fix and a security fix — a remote context is remote code execution over your semantics.
  • Consider JWT/SD-JWT securing for bulk issuance. VC-JOSE-COSE skips canonicalization entirely. Faster, simpler, and it buys SD-JWT selective disclosure. The trade: you give up Data Integrity's JSON-LD-native properties and BBS+ compatibility.
  • Parallelize by status-list shard so index allocation never contends across workers.

Rough shape: a backfill of tens of millions of credentials is a days-long batch job on a modest cluster if you do this right, and a multi-month ordeal if you canonicalize with remote contexts.

Retroactive issuance for existing completions

Millions of learners hold completions predating any of this. Backfilling is high-value — it is what makes a wallet non-empty on day one — and has three sharp edges:

  1. Date semantics. validFrom is when the credential became valid; the achievement date belongs in awardedDate on the subject. A 2019 completion issued in 2026 has a 2026 validFrom and a 2019 awardedDate. Conflating them produces credentials that look backdated, which reads as fraud.
  2. No subject DID. Historical learners have no wallet and no key. Two options: issue unbound credentials held in a custodial account and bind on first wallet claim, or defer issuance until claim. Prefer deferred issuance — it avoids minting tens of millions of credentials nobody ever claims, and avoids a bearer-credential population you would rather not have.
  3. Retroactive integrity. Data quality on old completions is worse: missing assessment metadata, deprecated courses, changed criteria. Either backfill at a lower, honestly labeled tier, or exclude records you cannot substantiate. Do not reconstruct criteria you do not have — a signed guess is still a signed statement.
The recommended backfill design

Lazy issuance with an eligibility index. Precompute, for every historical completion, whether it is credential-eligible and at what tier — a cheap batch job over existing data. Store that index. Issue the actual signed credential only when a learner claims it.

Benefits: no wasted signing, credentials bound to a real subject DID at creation, no orphan population, and the ability to fix schema mistakes before most credentials exist. Cost: claim latency of a few hundred milliseconds, which nobody will notice.

Coursera for Campus and Coursera for Business

Enterprise and campus change the issuer question, because the institution wants its name on the credential and often has accreditation standing that Coursera does not.

ModelWho signsVerifier seesWhen to use
Coursera as sole issuerdid:web:coursera.orgCoursera, with the partner named in the achievementDefault. Simplest, one key, one trust decision.
Sub-issuer DIDdid:web:coursera.org:issuers:asuA Coursera-hosted identity clearly scoped to the partnerPartner wants distinct identity without running infrastructure. The sweet spot.
Partner as issuer, Coursera as deliverydid:web:asu.eduASUAccredited award where the institution must be the attesting party. Requires partner key custody.
Dual credentialsBoth, separatelyTwo linked credentialsBoth parties assert different things — Coursera the assessment, the institution the academic award.

The sub-issuer pattern is underrated. did:web supports path-based identifiers, so did:web:coursera.org:issuers:asu resolves to https://coursera.org/issuers/asu/did.json — a distinct identity with its own keys, hosted by Coursera, requiring zero partner infrastructure. It gives partners the branding and separation they want while keeping key custody in one operationally mature place.

Bring it home — the enterprise wedge nobody is talking about

For Coursera for Business, the compelling artifact is not the individual badge. It is the verifiable workforce skills record: a CLR that an enterprise can hold for its own workforce, showing verified skills across thousands of employees, portable into their HRIS, and re-verifiable without trusting Coursera's dashboard.

That flips the sale. Today the pitch is "your employees will learn things." The verifiable pitch is "you will have a cryptographically auditable record of what your workforce can actually do" — which speaks to compliance, workforce planning, and M&A diligence, and is a fundamentally different budget line than L&D. It also outlives the subscription, which is exactly why it is worth paying for.

Why not just let a vendor like Credly issue on our behalf?

It is a legitimate option and the fastest path to OB 3.0 issuance — Credly by Pearson was certified for Open Badges 3.0 on 27 January 2026 and operates the largest badge network, with 3,700+ issuers and a catalog around 200,000 credentials. If the goal is "issue standards-compliant badges this quarter," buying beats building.

What you give up is the thing this course argues is the actual asset. A vendor issues a generic badge from a generic template; the assessment-tier taxonomy, the skills-taxonomy alignments, and the evidence provenance are Coursera-specific data the vendor has no path to represent well. You would be outsourcing the commodity and the differentiator together.

The synthesis most large issuers land on: build the pipeline for your flagship credentials where provenance matters, and use a vendor for the long tail where a plain badge is genuinely sufficient. That also gives you a real interoperability test — if your credentials and the vendor's both land in the same wallet and verify, your standards conformance is not theoretical.

6

The Verifier Side — What Employers See

Issuance without verification is a science project. This module is about the side of the market that decides whether any of the previous five modules produced value.

What "instant verification" actually means

The phrase gets used loosely. Precisely, a verifier performs six checks, and only one of them requires a network call that is not aggressively cacheable:

#CheckNetwork?Typical cost
1Presentation signature valid, nonce fresh, domain matchesNoMicroseconds
2Resolve issuer DID → public keyYes, cacheable for hours~50 ms cold, 0 warm
3Credential signature valid against that keyNoMicroseconds
4Status list bit not setYes, one fetch per ~131k credentials~50 ms cold, 0 warm
5validFrom / validUntil window, schema conformanceNoMicroseconds
6Do I trust this issuer?Policy lookupDepends entirely on your trust model

In steady state, verification is two cached fetches and some elliptic-curve math. Sub-millisecond warm. That is the number that changes employer behavior: verification stops being a procurement decision and becomes a line in a function.

Check 6 is the whole ballgame, and it is not cryptography

Checks 1–5 are mechanical and a library does them. Check 6 — should I believe did:web:coursera.org? — has no standardized answer, and it is where every real deployment stalls.

Today's practical answers are all unsatisfying: a hardcoded allowlist of known issuers, 1EdTech certification as a proxy, an accreditation database lookup, or "the domain is coursera.org and I have heard of Coursera." That last one is doing most of the work in practice, and it is precisely why did:web is the pragmatic choice for institutional issuers — it lets a verifier reuse the trust judgment they already make about domains.

Verification API design

Most verifiers will not implement checks 1–5 themselves in year one. They will call something. Designing that endpoint well is how Coursera stays in the loop without becoming a bottleneck.

POST https://verify.coursera.org/v1/verify
{
  "verifiablePresentation": { ... },
  "options": {
    "checkStatus": true,
    "challenge": "b3f1e7a2-...",
    "domain": "careers.acme-corp.com"
  }
}
Response — note what is returned beyond a boolean
{
  "verified": true,
  "checks": {
    "presentationSignature": "valid",
    "holderBinding": "valid",
    "credentialSignature": "valid",
    "issuerResolved": "did:web:coursera.org",
    "revocationStatus": "active",
    "validityWindow": "in_range",
    "schemaConformance": "valid"
  },
  "credentials": [
    {
      "achievement": "Deep Learning Specialization",
      "awardedDate": "2026-06-14",
      "assessmentTier": "T3_AUTO_GRADED",
      "assessmentDetail": {
        "gradedAssignments": 23,
        "passThreshold": 0.80,
        "identityVerified": true
      },
      "skills": [
        { "name": "Deep Learning", "framework": "Coursera Skills Taxonomy" },
        { "name": "Machine Learning", "framework": "O*NET", "code": "15-2051.01" }
      ],
      "effortHours": 128,
      "partner": "DeepLearning.AI"
    }
  ],
  "warnings": []
}
Four API design rules that matter more than the schema
  1. Never return a bare boolean. Return every check individually. A verifier with a compliance obligation needs to log which checks passed, and a partially-valid result (valid signature, expired window) is far more useful than false.
  2. Return warnings distinctly from failures. "Signed with a key retired in 2025" is a warning, not a failure. Collapsing the two makes verifiers reject legitimate credentials.
  3. Make the API stateless and side-effect free. No account required for basic verification. The moment verification requires an API key, you have rebuilt the business relationship the architecture eliminated.
  4. Publish an open-source client that does not call you. This is counter-intuitive and correct — see the callout below.
Ship a verifier library that does not need your API

The strongest possible move is to publish an open-source verification library that performs checks 1–5 entirely locally against your published DID document and status lists, with no call to Coursera at all.

Why give away the thing you might charge for? Because ubiquity of verification is worth more than revenue from verification. A credential's value is proportional to how many parties can check it without a prior relationship with you. Every gate you put in front of verification reduces that number. And if you do not publish the library, someone else will — the standards are open, so this is not a defensible chokepoint.

Charge for enrichment instead: skills-graph context, cohort percentiles, bulk operations, assessment provenance detail. Module 7 builds the commercial model on exactly that split.

Skills-based candidate search

Once credentials carry alignment entries pointing at shared frameworks, a fundamentally different query becomes possible. Instead of "candidates who list PyTorch on a resume," a verifier can ask for candidates holding verified credentials aligned to a skill, above an assessment tier, within a recency window.

The query that only works if Module 2's alignment field was populated
SELECT candidates WHERE
  verified_credential.alignment INCLUDES 'onet:15-2051.01'
  AND verified_credential.assessmentTier >= 'T3'
  AND verified_credential.awardedDate > '2024-01-01'
  AND verified_credential.issuer IN trusted_issuer_registry

Three preconditions, all of which are issuer-side decisions made in Module 5: alignments must be populated, the tier must be machine-readable, and issuer trust must be resolvable. Miss any one and the query degrades to string matching — which is what resumes already are.

Trust scoring: beyond the verified checkmark

A binary "verified" badge is a weak product. It answers "is this real?" while the employer is asking "is this good?"

Signal 1
Assessment depth
The T1–T4 tier from Module 5. The single highest-information field, and the one competitors cannot fabricate without the underlying data.
Signal 2
Issuer standing
Is the issuer accredited, 1EdTech-certified, present in a recognized registry? Independent of the individual credential.
Signal 3
Recency & decay
A 2016 cloud certification and a 2026 one are not equivalent claims. Expose the date prominently rather than making the verifier compute relevance.
Signal 4
Cohort context
"Top decile of 340,000 learners" is enormously more informative than "passed." Also the most privacy-sensitive — it must be learner-opt-in and selectively disclosable.
Do not ship a single composite trust score

The temptation is to collapse these into one number: "Coursera Trust Score: 87." Resist it, for three reasons.

It is unauditable. A candidate rejected because of an 87 cannot contest an opaque weighting, and in several jurisdictions automated employment decisions carry explainability obligations. It invites gaming. Any published composite becomes an optimization target within a quarter. And it makes Coursera the arbiter of candidate quality — a position with real legal exposure under emerging AI-hiring rules, including bias-audit requirements like NYC Local Law 144.

Expose the signals, let the verifier weight them, and keep the weighting on their side of the line. This is a legal architecture decision as much as a product one.

ATS integration — the unglamorous reality

Applicant tracking systems are where credentials must land to matter, and the honest status is: they do not speak Verifiable Credentials. Workday, Greenhouse, iCIMS, Lever and the rest have well-developed APIs for candidates, attachments, and custom fields, and essentially no native VC support.

Integration patternHow it worksEffortFidelity
Verification receipt attachmentCandidate verifies via a hosted page; a signed PDF/JSON receipt attaches to the applicationLowLow — a human reads it
Custom field populationAn integration writes verified skills into ATS custom fields the recruiter can filter onMediumMedium — filterable but lossy
Marketplace appA native app in the Workday/Greenhouse marketplace performing verification in-flowHighHigh — but per-ATS build and certification
Velocity Network relayPublish into an HR-industry network that ATS vendors already integrate withMediumHigh — if the network has real reach
The sequencing that avoids sinking a year into integrations

Start with the verification receipt. It is unglamorous, works with every ATS ever built because it is an attachment, and requires zero partner engineering. It also generates the usage data you need to justify the deeper integrations.

Then go where the volume is, not where the standard is prettiest. Two or three ATS vendors cover the large majority of enterprise hiring; build a marketplace app for those. Treat Velocity Network as a parallel bet on the industry consolidating, not as the primary path.

The trap: building a beautiful OID4VP integration nobody can consume because the ATS has no place to put the result. The bottleneck is the recruiter's screen, not the protocol.

Bring it home — the demand-side chicken-and-egg

Coursera can unilaterally become an excellent issuer. It cannot unilaterally create verifiers. Every credentialing initiative that has failed, failed here.

Three levers Coursera has that most issuers do not:

  • Coursera for Business customers are employers. Thousands of enterprises already have a commercial relationship and a reason to verify their own workforce first. That is a captive verifier population — and internal verification (skills inventory, compliance, mobility) is an easier first use case than external hiring.
  • Coursera hiring partners and the job-board surface can require verified credentials in postings, creating learner-side pull.
  • Google Career Certificates are delivered on Coursera. Any large partner adopting verified issuance drags its own employer network along.

Sequence accordingly: verify inside enterprises first, hiring second. Do not launch by asking the open market to care.

What stops an employer from just calling our existing verification URL, like they do today?

Nothing, and that is exactly the point — today's URL check is a real product with real usage. The question is not whether it works but what it costs both sides.

The URL check requires Coursera to be online, reveals to Coursera which learner is being checked and by whom, cannot be automated at scale without rate limits and an agreement, works only for Coursera credentials, and returns a rendered page rather than structured data. It cannot answer "does this candidate hold any credential aligned to O*NET 15-2051.01 above tier T3," because the answer lives in a page, not a schema.

The VC path removes the online dependency, removes the privacy leak, makes automation free, works identically across issuers, and returns machine-readable skill alignments. Same question, four orders of magnitude cheaper, and answerable by software. That difference is what makes verification routine rather than exceptional — which is the entire thesis.

7

The Cloudflare Wallets Intersection

Two different things are called a "wallet" in this course. One holds credentials, the other holds money. The interesting question is what happens where they meet — and the answer is more constrained than it first looks.

Two wallets, one word

Skills WalletCloudflare Wallet
HoldsVerifiable CredentialsSpending authority over funds
OwnerA learnerA human account owner, delegating to agents
StandardsW3C VC 2.0, OB 3.0, OID4VPx402 over HTTP, Web Bot Auth
Answers"Can I prove I have this skill?""Can an agent pay for one request?"
Status (Aug 2026)Specs final; issuance scalingSell side (Monetization Gateway) live since ~July 2026; buy side largely announced

They intersect at exactly one point: verification is an API call, and API calls can be priced. Everything in this module follows from that sentence — including its limits.

The x402 flow applied to verification

1
Agent → WorkerPOST /v1/verify/enriched with a Verifiable Presentation. No credentials, no account, no prior relationship.
2
Worker → Agent402 Payment Required with a PAYMENT-REQUIRED header carrying an accepts array: schemes, networks, assets, and amounts the endpoint will take.
3
AgentPicks a scheme it can satisfy and signs an authorization — fixed value, bounded validity window, nonce against replay.
4
Agent → WorkerRetries with PAYMENT-SIGNATURE.
5
Worker → Facilitator/verify then /settle. The Worker never touches a chain, a node, or a private key.
6
WorkerPerforms the actual credential verification — signature, status, enrichment.
7
Worker → Agent200 OK with the enriched result and a PAYMENT-RESPONSE receipt.
Why the 402 round trip is a first-contact cost, not a per-call cost

The PAYMENT-REQUIRED payload is stable per route. A well-built agent caches it after first contact and goes straight to a signed request thereafter. Keep your requirements stable enough to be cacheable and the extra round trip disappears from steady-state traffic.

Unit gotcha worth a test assertion: amounts are strings in the asset's smallest unit. With USDC's six decimals, "50000" is $0.05, not $50,000. This is a classic off-by-six.

A verification Worker with x402

Cloudflare Worker — free basic tier, paid enrichment
const PRICE_USDC_BASE_UNITS = "50000"; // $0.05 — USDC has 6 decimals

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    const body = await request.json();

    // Tier 1: basic verification is ALWAYS free. This is strategic,
    // not generous — see the note below on why gating it is fatal.
    if (url.pathname === "/v1/verify") {
      return Response.json(await verifyPresentation(body, env));
    }

    // Tier 2: enriched verification is metered via x402.
    if (url.pathname === "/v1/verify/enriched") {
      const payment = request.headers.get("PAYMENT-SIGNATURE");

      if (!payment) {
        return new Response(null, {
          status: 402,
          headers: {
            "PAYMENT-REQUIRED": btoa(JSON.stringify({
              x402Version: 2,
              accepts: [{
                scheme: "exact",
                network: "base",
                asset: env.USDC_CONTRACT,
                amount: PRICE_USDC_BASE_UNITS,
                payTo: env.COURSERA_WALLET,
                resource: url.toString(),
                description: "Enriched credential verification",
                maxTimeoutSeconds: 60
              }]
            }))
          }
        });
      }

      // Facilitator does verify + settle. We never touch a chain.
      const settlement = await settleViaFacilitator(payment, env);
      if (!settlement.ok) return new Response("Payment failed", { status: 402 });

      const result = await verifyPresentation(body, env);
      const enriched = await enrich(result, env); // skills graph, percentile, provenance

      return Response.json(enriched, {
        headers: { "PAYMENT-RESPONSE": btoa(JSON.stringify(settlement.receipt)) }
      });
    }

    return new Response("Not found", { status: 404 });
  }
};

Note what the Worker does not do: no node, no gas management, no private key, no invoicing, no metering service. The facilitator abstraction is what makes this adoptable by an ordinary backend team, and Cloudflare plays that role at the edge in its own stack.

The revenue model, with the skepticism it deserves

The seductive arithmetic: a million verifications a day at five cents is $50,000 a day, or roughly $18M a year. Before anyone puts that in a plan, interrogate the denominator.

ScenarioDaily paid verificationsAt $0.05AnnualPlausibility
Today's world (humans checking at offer stage)~1,000–10,000$50–$500$18K–$180KNear-certain — and not a business
Enterprise skills inventory (C4B workforce audits)~50,000$2,500~$900KPlausible — but better sold as a subscription
Agent-screened hiring (every application verified)~1M$50,000~$18MSpeculative — requires agentic screening at scale
Ambient verification (every skill claim, everywhere)~10M+$500,000~$180MFantasy without an ecosystem shift
The uncomfortable truth about the middle two rows

The agent-screened row is the whole thesis, and it depends on something Coursera does not control: employers deploying AI screening agents that verify claims rather than parsing resumes. That is a plausible 2027–2028 development, not an August 2026 fact.

Meanwhile the enterprise row — the one that is genuinely reachable — is better monetized as a seat-based or contract line in Coursera for Business than as micropayments. Enterprises hate unpredictable per-call billing and have procurement processes built around subscriptions. Charging an existing customer five cents a call to verify credentials you issued them would be a strange conversation.

So the honest conclusion: x402 verification is the right architecture for the agent segment specifically — anonymous, high-volume, no prior relationship, no procurement. It is the wrong billing model for the enterprise segment. Build the endpoint because the marginal cost is near zero and it positions you for the agent wave; do not put its revenue in next year's plan.

The rule that must not be broken

Basic verification is free, forever, with no key, no account, and no rate limit that a legitimate verifier would notice.

Charging to verify a credential you already issued and were already paid for is a trust-destroying move. It tells the ecosystem that Coursera credentials carry a toll, and a verifier facing a toll chooses the issuer without one. Given that a competent engineer can implement checks 1–5 locally from published open standards anyway, gating basic verification would cost you adoption and earn nothing.

Charge for enrichment — skills-graph context, cohort percentiles, assessment provenance, bulk operations, agent-scale throughput. Those are genuinely Coursera-only data products, and paying for them is a fair trade rather than a toll.

Why Workers specifically

  • Verification is embarrassingly cacheable. DID documents and status lists are static artifacts fetched by every verifier — exactly what a CDN edge is for. Serving them from Workers with long cache TTLs makes the fetch effectively free and hides verifier IPs behind the edge, which is also the privacy mitigation from Module 3.
  • Verification is stateless and CPU-light. Signature checks and a bitstring lookup. No database in the hot path.
  • Global latency matters for a learner population that is majority outside the US.
  • x402 support is native at the edge as of Cloudflare's July 2026 Monetization Gateway, so pricing becomes configuration rather than code.
Bring it home — the two-sided position this creates

Coursera's unusual position is that it sits on both sides of the agentic credential economy. Sell side: it issues credentials and can meter enriched verification. Buy side: Coursera's own agents will increasingly need to pay for third-party APIs — labor-market data, assessment services, content licensing — per call rather than per contract.

The strategic move is not to bet on either half. It is to make sure the credential is agent-legible: structured, aligned to shared skill frameworks, verifiable without a human, and priced coherently at the enrichment boundary. If an agent screening 20,000 applications finds Coursera credentials trivially machine-verifiable and everyone else's require a human to squint at a PDF, the format advantage compounds long before the revenue does.

That is the real prize here, and it is a distribution prize, not a payments one.

Why not just use ordinary API keys and metered billing for the enrichment tier?

For enterprises, you should — that is the better model, as the table above argues. The x402 path is specifically for callers you have no relationship with and never will.

An API key presumes a prior agreement: someone signed up, agreed to terms, and got provisioned. That works for a hundred enterprise customers and fails for the case that motivates this entire module — an autonomous agent that discovers your verification endpoint mid-task, needs it once, and would happily pay five cents rather than open a business-development conversation. You cannot enumerate those callers in advance, which is exactly why pre-provisioning breaks down.

The honest framing: x402 is not a replacement for enterprise billing, it is a long-tail on-ramp. Run both. The 401-to-402 conversion is additive — existing authenticated partners with keys never see a 402, so nothing migrates and no partner needs to be told anything.

8

The Ecosystem

A map of who is building what, which bodies actually confer legitimacy, and where Coursera should show up versus merely watch.

Standards bodies and consortia

OrganizationOwnsWhy it matters to CourseraPosture
W3CVC Data Model 2.0, DIDs, Bitstring Status List, Digital Credentials APIThe container everything else builds on. VC 2.0 became a Recommendation 15 May 2025.Follow
1EdTechOpen Badges 3.0, CLR 2.0, and the certification programThe gate that matters in education. Certification is how partners and buyers judge conformance.Join & certify
OpenID FoundationOID4VCI 1.0 (final Sept 2025), OID4VP 1.0 (final 10 July 2025), SIOPv2The transport every wallet and the EU stack speaks.Follow
IETFSD-JWT (RFC 9901, Nov 2025)The practical selective-disclosure mechanism.Follow
OpenWallet Foundation (Linux Foundation)Stewards the Learner Credential Wallet and related OSSNeutral home for wallet code — forking here is defensible with partners.Contribute
Digital Credentials Commons (formerly DCC)University consortium; built the LCW with US DOE funding from 2020Where Coursera's degree partners already are.Engage
Velocity Network FoundationThe "Internet of Careers" — a public permissioned network for career credentialsHR-side interoperability; members hold career data on 1B+ individuals.Evaluate
Credential EngineCredential Registry and CTDL; Counting Credentials researchWhere a credential becomes publicly discoverable and describable.Publish into

Velocity Network Foundation — the Internet of Careers

A non-profit membership organization operating a public permissioned blockchain for exchanging verifiable career credentials. Its pitch is HR-industry interoperability: members span HCM vendors, gig platforms, background and certification processors, education institutions, training vendors, and employers — collectively holding career data on more than a billion individuals.

The measured read

Velocity's strategic insight is right: the bottleneck is the HR side, not the education side. Universities have been issuing badges for a decade; the reason it did not matter is that no HR system consumed them. A network with HCM vendors as members attacks the correct problem.

Two reasons for caution. First, most of the publicly visible material dates from 2020–2022; verify current member composition and live transaction volume directly before committing — a network's value is entirely its reach, and reach is exactly what press releases overstate. Second, the ledger component adds a governance and operational story you would otherwise not need, since VCs verify perfectly well without one.

Recommendation: engage as an observer or associate member, publish credentials in standard formats that a Velocity relay can pick up, and let membership follow demonstrated ATS pull rather than lead it. Do not architect around it.

Platforms and issuers

PlayerPositionOB 3.0 statusRelevance
Credly by PearsonThe largest badge network — 3,700+ issuers, ~200,000 credentials in catalog, 85% of top IT certificationsCertified 27 Jan 2026The default incumbent. Also powers the Google Cloud Credential Wallet.
AccredibleCertificates and badges for education and associationsOB 3.0Common in higher-ed procurement bake-offs
Canvas Credentials (Instructure, formerly Badgr)Badging tied to the dominant higher-ed LMSOB 3.0LMS-adjacent distribution — credentials issued where coursework already lives
TerritoriumCLR-first learner recordsCLR 2.0 + OB 3.0 certifiedOne of the few with real CLR 2.0 implementation experience
POKBlockchain-anchored credentialsOB 3.0Ledger-anchoring niche
ASU / Trusted Learner NetworkInstitution running its own issuance + walletVC-nativeThe reference deployment for a university-scale program
Note who is not on this list: LinkedIn

The most widely used repository of skill claims on earth issues no verifiable credentials and consumes none. That is either the biggest gap in the ecosystem or evidence that verifiability is not what the market rewards. Module 9 argues it is genuinely both — and that the resolution depends on who does the screening.

Credential Engine and the discovery layer

Credential Engine maintains the Credential Registry and the Credential Transparency Description Language (CTDL). Its Counting Credentials 2025 report (December 2025) found 1,850,034 unique US credentials from 134,000+ providers, against $2.34 trillion invested annually in US education and workforce development.

The distinction that matters architecturally: Credential Engine describes credential types; Verifiable Credentials assert instances. The registry says "this certificate exists, here is what it requires, here are the skills it maps to." A VC says "this person earned it." They are complementary, and the pairing is powerful — a verifier resolving an achievement URI into a registry description gets independent third-party context on what the credential means, from someone other than the issuer.

Publishing Coursera's credential catalog into the Credential Registry with CTDL descriptions is comparatively cheap and makes credentials discoverable to state talent marketplaces and workforce systems that query the registry directly — including the ones being funded right now.

Public-sector programs shaping demand

United States
Connecting Talent to Opportunity Challenge
A $15M US Department of Education prize competition inviting state Governors to assemble teams building or scaling Talent Marketplaces — combining a credential registry, Learning and Employment Records (LERs), and skills-based job-description generators. Three phases, up to 10 semifinalists and finalists sharing the prize pool with technical assistance. This is federal money creating verifier demand at the state level.
European Union
EDC, ELM, and the EUDI Wallet
European Digital Credentials for Learning are the EU's format for diplomas, certificates, and micro-credentials, described using the European Learning Model. All 27 member states must offer a compliant EUDI Wallet by December 2026 — a legal mandate, though national readiness varies and several states have signaled limited launch functionality.
Bring it home — why the EU deadline is the forcing function

The December 2026 EUDI mandate creates something that has never existed: hundreds of millions of people with a government-issued credential wallet already on their phone. The chronic chicken-and-egg — no wallets, so no point issuing; no credentials, so no point installing — is being broken by regulation in one of Coursera's largest markets.

Two concrete implications. First, EU learners will have a wallet whether or not Coursera builds one, which strengthens the Module 4 argument for deprioritizing a native app. Second, being EDC/ELM-mappable is not a nice-to-have for the European business — institutions operating under EU frameworks will increasingly expect it, and a proprietary format is simply not admissible into a EUDI wallet.

My read on sequencing: the EU is where a verifiable-credentials program has the clearest, date-certain business case. The US case rests on employer behavior change; the EU case rests on a legal deadline that already passed through the legislature.

Do we need to join 1EdTech, or is conformance enough?

Conformance is what makes the credentials work. Certification is what makes people believe they work, and in education procurement the difference is decisive.

1EdTech certification is a listed, checkable status. When a university's procurement team or a state workforce agency asks "is this Open Badges 3.0 compliant," a certification listing ends the conversation; an engineer's assurance does not. Credly by Pearson certified on 27 January 2026 and Territorium certified for both CLR 2.0 and OB 3.0 — in a bake-off, an uncertified competitor is answering questions the certified ones are not.

Cost is modest relative to the credibility, and the certification suite doubles as a genuinely useful conformance test harness during development. Do it in Phase 1, not later.

9

Competitive Analysis

The incumbent in skills verification is not another course platform. It is a social network that verifies nothing and wins anyway.

LinkedIn — the incumbent to actually worry about

LinkedIn holds the world's largest repository of skill claims, a skills graph mapping people to skills to jobs, and — decisively — it is where the hiring workflow already happens. Recruiters live there. Candidates maintain profiles there. Coursera already integrates with it: on completing a Google Career Certificate, learners get a link to import the credential badge into LinkedIn's Licenses & Certifications section.

DimensionLinkedInA verifiable Skills Wallet
DistributionOverwhelmingStarting from zero
Recruiter workflow integrationIt is the workflowNone
Cryptographic verificationNone — claims are self-reportedNative
Assessment provenanceAbsentMachine-readable tier + evidence
Learner ownershipLinkedIn-owned profileLearner-held credential
Cross-platform portabilityLocked inStandards-based
The uncomfortable strategic fact

LinkedIn wins on the only dimension that has mattered so far. A self-reported certification on a LinkedIn profile influences more hiring decisions today than every verifiable credential ever issued, combined. Not because it is trustworthy, but because it is where the recruiter is looking.

Any strategy premised on "verifiable credentials will displace LinkedIn profiles" is wrong. The correct framing is that verifiable credentials are a trust layer that can sit underneath any surface, including LinkedIn's. The goal is not to replace the profile; it is to make the entry on the profile checkable.

The scenario where this flips is the one from Module 1: when screening moves from a recruiter skimming profiles to an agent processing applications, self-reported claims become a liability rather than a shortcut, because the agent can verify at zero marginal cost and will start discounting anything it cannot. Coursera's bet is on that transition. It should be stated as a bet, not as a certainty.

Google — the partner who is also a competitor

Google occupies an unusual position: Google Career Certificates are delivered on Coursera, making Google simultaneously one of the largest content partners and a credential brand with its own distribution ambitions.

  • Google Career Certificates — the 2026 catalog spans Advanced Data Analytics, Business Intelligence, IT Automation with Python, alongside foundational Data Analytics, Project Management, and IT Support. Non-expiring, and delivered through Coursera.
  • Google Cloud Credential Wallet — launched for Google Cloud credential holders, powered by Credly, with Labor Market Insights surfacing job opportunities, titles, employers, and salary data against verified skills.
  • Google Wallet — increasingly a container for identity documents, and the obvious eventual home for credentials on Android.
What the Credential Wallet choice tells you

Google built a credential wallet and did not build the credential infrastructure — it used Credly. That is a company with unlimited engineering capacity concluding that badge issuance is not worth owning.

Two readings, and both are worth holding. The pessimistic one: credential issuance is a commodity, and Coursera building it in-house is undifferentiated work. The optimistic one, which I find more persuasive: Google's credentials do not carry deep assessment provenance, so a generic badge platform is genuinely sufficient for them. Coursera's flagship credentials do have that provenance — graded assignments, proctored exams, partner governance — and representing it is exactly what a generic platform cannot do.

The strategic tell to watch: the Labor Market Insights layer. Google is attaching labor-market context to credentials, which is the same enrichment play Module 6 recommends. That is the competition worth tracking — not badge issuance.

edX / 2U and the rest of the online-education field

edX's verified certificates use ID verification at enrollment, which is a genuine integrity signal, but the credential artifact remains a hosted page rather than a portable Verifiable Credential. 2U's financial difficulties have limited investment in forward-looking credential infrastructure.

The broader field — Udacity, Udemy, Pluralsight, LinkedIn Learning — is largely in the same position: certificates as marketing artifacts rather than verifiable claims. This is a genuine opening. There is no online-learning platform at Coursera's scale with a serious verifiable-credentials program, which means first-mover advantage in this category is real and currently unclaimed.

Canvas Credentials and the LMS flank

Instructure's Canvas Credentials (formerly Badgr) issues Open Badges 3.0 from inside the dominant higher-education LMS. That is a structurally strong position: credentials issued where the coursework already lives, with no integration required by the institution.

For Coursera this is the flank to watch. If universities issue verifiable credentials natively from Canvas for their own coursework, the Coursera-delivered credential becomes one input among many rather than the record itself — and the aggregation layer (CLR) moves to the LMS. Two responses, and they are not exclusive: make Coursera credentials trivially ingestible into institutional records, and compete on the assessment provenance an LMS badge cannot carry.

Where Coursera actually differentiates

Asset 1
Assessment depth
Proctored exams, auto-graded programming assignments, identity verification. The T1–T4 tier from Module 5 is only expressible by an issuer that has the underlying data. This is the moat.
Asset 2
Partner governance
University and industry partners with accreditation standing. A credential co-signed by a recognized institution answers the trust-registry problem that has no general solution.
Asset 3
Skills taxonomy
An existing skills mapping across the catalog. Emitting it as alignment makes credentials machine-comparable while competitors emit bare strings. Cheap to build, hard to copy.
Asset 4
Two-sided reach
Millions of learners on one side, thousands of enterprises on the other. Almost nobody else can seed both issuance and verification from inside one customer base.
The three ways this loses, stated plainly

1. Nobody verifies. Coursera issues beautiful credentials into a market that keeps hiring on resumes and LinkedIn profiles. Mitigation: seed verification inside Coursera for Business before asking the open market to care. This is the most likely failure mode.

2. A neutral utility wins the layer. Credly, Google, or a government wallet becomes the default container, and Coursera is one issuer among thousands with no special position. Mitigation: do not fight for the container — win on credential quality and be present in every container.

3. Coursera builds a wallet nobody installs. Engineering goes into a consumer app competing with Apple, Google, and EUDI national wallets. Mitigation: Module 4's recommendation — custodial web wallet for reach, defer the native app.

Bring it home — the positioning statement

Not "Coursera has a credential wallet." That is a feature claim, easily matched, and it competes on the layer Coursera is weakest at.

"A Coursera credential is the most trustworthy machine-readable claim about a person's skills that exists — because it carries the assessment behind it, and any system can check it in a millisecond without asking us."

That is a claim only an issuer with real assessment infrastructure can make, it is verifiable rather than aspirational, and it wins in exactly the world Module 1 argues is arriving: one where the entity reading the credential is software.

If LinkedIn added verifiable credential support tomorrow, is this whole program dead?

No — it would be the single best thing that could happen to it.

LinkedIn adding VC support would make it a verifier, and verifiers are the scarce resource. Coursera would remain the issuer, and the trust layer under a LinkedIn "verified" checkmark would be Coursera's signature and Coursera's assessment provenance. The value of being a high-quality issuer goes up when a high-distribution surface starts checking, because it finally makes the difference between a rigorous credential and a completion certificate visible where hiring decisions get made.

The scenario that actually threatens the program is the opposite: LinkedIn becoming an issuer of assessed credentials with its own verification, capturing both sides. LinkedIn Learning plus LinkedIn Skill Assessments is the seed of that, and it is worth watching. But it would require LinkedIn to build assessment rigor it has shown little appetite for, in a business with much worse margins than advertising and recruiter seats.

10

Coursera Implementation Roadmap

Five phases over eighteen months, with the phase-two departure from conventional wisdom flagged loudly, and explicit criteria for killing the program.

How to read the estimates

Engineering counts below are directional, outside-in estimates from someone without visibility into Coursera's internal systems, team topology, or existing credential infrastructure. Treat them as a starting shape for a planning conversation, not as a bid. The relative sizing between phases is more reliable than the absolute numbers, and the sequencing logic is the part worth arguing about.

Phase 1 Become an excellent issuer Months 0–3

Everything downstream depends on this and nothing downstream substitutes for it. If only one phase ships, this is the one that creates value on its own.

  • Publish did:web:coursera.org with a documented key-rotation policy and the never-delete rule enforced in code review.
  • KMS/HSM-backed signing service — small, separately deployed, dual-controlled, audited.
  • Open Badges 3.0 issuance for new completions, with criteria and alignment populated, not stubbed.
  • Assessment integrity tier (T1–T4) as a machine-readable field, governed by academic integrity rather than marketing.
  • Bitstring status list infrastructure, CDN-served, with a written revocation policy answering "what would make us revoke?"
  • Hosted verification page plus an open-source verifier library that does not call Coursera.
  • 1EdTech OB 3.0 certification — start the process in week two, not month three.
  • Publish the credential catalog into Credential Engine with CTDL descriptions.

~6–8 engineers (2 crypto/security, 3 backend, 1 frontend, 1–2 data for taxonomy alignment) + PM + academic-integrity stakeholder.
Exit criteria: a third party verifies a Coursera credential using only published standards and a library they did not get from Coursera.

Phase 2 Lightweight wallet + delivery (revised from the conventional plan) Months 3–9
The departure, stated explicitly

The conventional Phase 2 is "fork MIT's Learner Credential Wallet and ship a native app in six months." I recommend against leading with that.

A native wallet is a permanent product line — roughly 3–4 engineers steady-state, two app stores, OS churn, a protocol treadmill, and a support queue whose top ticket is "I got a new phone" — competing against Apple Wallet, Google Wallet, and EUDI national wallets that all 27 EU member states must ship by December 2026. Learners in Coursera's largest markets will have a wallet regardless.

Do this instead: a custodial web wallet for reach plus OID4VCI export so any standards-compliant wallet can hold a Coursera credential. Weeks of work rather than quarters, and it makes the native-app decision a data-driven one in Phase 4 rather than a bet made now.

  • Custodial web wallet: log in, see credentials, share a link, download the credential file. Honest UI labelling about custody.
  • OID4VCI issuance endpoint so any conforming wallet — LCW, ASU Pocket, a EUDI wallet — can claim a Coursera credential.
  • OID4VP presentation support for verifier-initiated requests.
  • Lazy retroactive issuance: eligibility-and-tier index over historical completions, signing on claim.
  • Legacy Open Badges 2.0 import, so a wallet is not empty on first open.
  • Instrument everything: claim rate, wallet choice, share events, verification events. This data decides Phase 4.

~8–10 engineers (5 backend/protocol, 3 frontend, 1 data) + PM + design.
Exit criteria: a learner claims a Coursera credential into a third-party wallet and presents it to a third-party verifier successfully.

Phase 3 CLR 2.0 and multi-source aggregation Months 9–15
  • CLR 2.0 issuance bundling course, specialization, and degree credentials with defined associations.
  • Import of third-party credentials into the learner record — with correct semantics: bundling is assembly, not attestation, and every inner credential verifies independently.
  • Coursera for Business workforce skills record — enterprise-held CLRs across their workforce, exportable to HRIS. This is the commercial centrepiece of the phase.
  • Sub-issuer DIDs (did:web:coursera.org:issuers:<partner>) for campus and enterprise partners.
  • EDC/ELM mapping for the European business, ahead of the December 2026 EUDI deadline.
  • 1EdTech CLR 2.0 certification.

~10–12 engineers + enterprise PM + partner solutions engineering.
Exit criteria: an enterprise customer verifies its own workforce's skills from a CLR without using a Coursera dashboard.

Phase 4 Verification API, enrichment, and x402 Months 12–18
  • Production verification API on Cloudflare Workers — basic tier free and unkeyed, permanently.
  • Enriched tier: skills-graph context, cohort percentiles (opt-in), assessment provenance detail, bulk operations.
  • x402 metering on the enriched tier for agent traffic; conventional contract billing for enterprises. Both, not one.
  • Edge-cached DID documents and status lists — performance and the Module 3 privacy mitigation in one move.
  • Native wallet decision gate using Phase 2 instrumentation: if a meaningful share of learners claim into third-party wallets, do not build a native app.

~6–8 engineers (3 edge/platform, 2 data/enrichment, 1–2 payments integration) + PM.
Exit criteria: a third-party agent verifies a credential and pays for enrichment with no prior Coursera relationship.

Phase 5 Ecosystem and ATS distribution Months 15–24
  • Verification receipt attachment flow — works with every ATS, zero partner engineering. Ship first.
  • Marketplace apps for the two or three ATS platforms covering the majority of enterprise hiring volume.
  • Velocity Network engagement, sized to demonstrated ATS pull rather than to the pitch.
  • State talent-marketplace integration, tracking US DOE Connecting Talent to Opportunity Challenge outcomes.
  • EUDI wallet interoperability testing against national implementations.

~6–8 engineers + partnerships + solutions engineering.
Exit criteria: a hiring manager sees a verified Coursera credential inside their ATS without leaving it.

Cumulative investment shape

PhaseWindowEng (peak)Eng-monthsValue created on its own
1 — Issuer0–36–8~21High — standalone credible
2 — Wallet + delivery3–98–10~54High — learners can actually use them
3 — CLR + enterprise9–1510–12~66Medium-high — the enterprise wedge
4 — Verification API12–186–8~42Medium — option value on the agent wave
5 — Ecosystem15–246–8~63Medium-high — where demand is realized
Total (overlapping phases)~245 eng-months≈ 20 engineer-years
The sequencing argument in one paragraph

Phases 1 and 2 create value with or without anything after them: learners get portable credentials and Coursera gets standards credibility with university partners. Phase 3 is where the money is, because the enterprise workforce record is a new budget line rather than a feature. Phase 4 is an option on the agent wave — cheap to buy, and worth buying precisely because it is cheap. Phase 5 is where demand is realized and is the phase most dependent on parties outside Coursera's control, which is why it comes last despite being the most important.

Organizational changes

New function
Credential Operations
Owns schema governance, tier assignment, revocation decisions, and issuance-failure triage. Closest analogue is a university registrar. 3–5 people, not engineers. The most commonly omitted line in plans like this.
Existing team
Security — key custody
Signing keys are a new class of asset: compromise means forged Coursera credentials in the wild. Needs an owner, an audit cadence, dual control, and a written compromise runbook before Phase 1 ships.
Existing team
Legal & policy
Revocation policy, GDPR/FERPA posture, cross-border recognition, and the standing question of what Coursera warrants when it signs a statement about a person.
Existing team
Academic integrity
Owns the T1–T4 taxonomy and defends it against internal pressure to upgrade tiers. If this sits under marketing, the tier is worthless within two quarters.
Kill criteria — write these down before starting

A program that cannot be falsified will run forever on narrative. Set these at the outset and hold to them:

  • After Phase 2: if fewer than 5% of eligible learners claim a credential into any wallet within 90 days of eligibility, the learner demand hypothesis is wrong. Stop and reconsider — do not fund Phase 3 to fix a demand problem with more features.
  • After Phase 3: if no enterprise customer will pay for the workforce skills record, the enterprise wedge is wrong. That was the strongest commercial hypothesis; its failure is disqualifying, not a signal to build harder.
  • After Phase 4: if paid enrichment verifications are below a few thousand per day, the agent thesis has not arrived yet. Keep the free tier running — it is cheap and it is strategically correct — and shelve the metering.
  • At any point: if a neutral utility becomes the de facto standard container and Coursera's differentiated fields are not representable in it, revisit build-versus-partner immediately rather than at the next planning cycle.
Bring it home — if you only get funding for one thing

Fund Phase 1, and inside Phase 1 fund the alignment and assessment-tier work above everything else.

That is a small data-and-schema project, not a platform. It produces credentials that are machine-comparable and honestly graded — which is the only asset in this entire course that competitors cannot copy by buying a vendor. The wallet, the API, and the ecosystem work are all replaceable later. Assessment provenance emitted at issuance time is not: every credential issued without it is permanently impoverished, because you cannot retroactively add fields to a signed document without reissuing it.

That last sentence is the real deadline. Every month of issuance without these fields is a month of credentials that will need reissuing to ever carry them.

What would make you argue for buying rather than building?

If two things were true simultaneously, buying would be right: (a) Coursera's assessment data is not actually rich enough to populate a meaningful integrity tier, and (b) partner-driven demand for OB 3.0 issuance is arriving faster than a 3-month build can serve.

In that world, license Credly or Accredible, ship compliant badges next quarter, and treat issuance as procurement. The tell would be discovering during Phase 1 discovery that assessment metadata is inconsistent, unavailable, or not trustworthy across the catalog — which is a real possibility worth testing in the first two weeks rather than assuming away.

The hybrid most large issuers land on stays available either way: build the pipeline for flagship credentials where provenance is the point, buy for the long tail where a plain badge is genuinely sufficient. That also gives you a live interoperability test, since your credentials and the vendor's must both verify in the same wallet.

11

Technical Deep Dive

The parts that decide whether an implementation works: securing mechanisms, DID methods, proof formats, status lists, and the lifecycle fields everyone forgets until a credential expires in production.

Two securing mechanisms, one data model

A VC 2.0 credential can be secured two ways, and a verifier must handle whichever the issuer chose. This is the single most consequential implementation decision in the stack.

Data Integrity (JSON-LD native)VC-JOSE-COSE (JWT / SD-JWT)
ShapeCredential JSON with an embedded proofCredential as a JWT payload; signature in the JWS
CanonicalizationRequired (RDFC-1.0) — expensiveNone — sign the bytes
ThroughputCanonicalization-boundSignature-bound (much faster)
Selective disclosureecdsa-sd-2023, bbs-2023SD-JWT (RFC 9901)
UnlinkabilityPossible with BBS+No — signature is constant
Multiple signaturesNatural — several proofs on one documentAwkward
Ecosystem pull1EdTech, DCC, education toolingEUDI, mDL, OID4VC, mobile wallets
DebuggabilityReadable JSONBase64 blob until decoded
The recommendation, and the reason it is uncomfortable

Support both. Default to Data Integrity for education-ecosystem interoperability; use JWT/SD-JWT for bulk issuance and mobile-wallet delivery.

This is genuinely more work and I would normally argue against dual paths. Here it is warranted because the two ecosystems have not converged and neither is going away: 1EdTech and university tooling expect Data Integrity JSON-LD, while EUDI, mDL, and the mobile-wallet world are JOSE-native. Picking one forecloses a market.

Mitigate the cost by keeping the signing service format-agnostic — it takes a validated claim set and a target format, and everything upstream is shared. The dual path then lives in one small, well-tested component rather than spreading through the pipeline.

The JWT form, concretely

Decoded JWT header and payload for the same credential
// Header
{
  "alg": "EdDSA",
  "typ": "vc+jwt",
  "kid": "did:web:coursera.org#key-2026-01"
}

// Payload — the credential lives under "vc"
{
  "iss": "did:web:coursera.org",
  "sub": "did:key:z6MkhaXgBZ...",
  "nbf": 1785942120,
  "jti": "urn:uuid:9f2a4c81-...",
  "vc": {
    "@context": [
      "https://www.w3.org/ns/credentials/v2",
      "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
    ],
    "type": ["VerifiableCredential", "OpenBadgeCredential"],
    "credentialSubject": { ... }
  }
}

Note there is no proof member. The JWS signature is the proof, and kid points at the verification method in the issuer's DID document. A verifier that only knows how to look for proof will reject this as unsigned — a common and confusing interop failure.

Proof formats and cryptosuites

Cryptosuite / formatCurveSelective disclosureUnlinkableUse for
eddsa-rdfc-2022Ed25519NoNoDefault. Fast, small, widely supported
ecdsa-rdfc-2019P-256 / P-384NoNoFIPS / HSM environments requiring NIST curves
ecdsa-sd-2023P-256YesNoSelective disclosure on NIST curves
bbs-2023BLS12-381YesYesPrivacy-sensitive credentials; still maturing
SD-JWT (RFC 9901)Any JOSE algYesNoMobile wallets, EUDI, OID4VC flows

Ed25519 is the right default: 64-byte signatures, fast verification, no curve-parameter footguns, and support in every relevant library. Move off it only for a specific reason — a FIPS requirement pushes you to P-256, and a genuine unlinkability requirement pushes you to BBS+ with the understanding that tooling is thinner.

How SD-JWT actually achieves selective disclosure

1
IssuerFor each selectively-disclosable claim, generate a random salt and compute hash(salt, claimName, claimValue).
2
IssuerPut only the hashes in the signed JWT payload under _sd. The plaintext values never appear in the signed body.
3
Issuer → HolderSend the JWT plus the full set of disclosures (salt + name + value triples), one per hidden claim.
4
HolderTo reveal a subset, present the JWT plus only the disclosures for claims being revealed. Withheld disclosures are simply not sent.
5
VerifierVerify the JWT signature, then re-hash each provided disclosure and confirm it appears in _sd. Revealed claims are proven; hidden ones are unknowable.

Elegant, cheap, and it explains the linkability limitation precisely: the JWT signature is identical across every presentation, so two verifiers comparing notes can tell they saw the same credential even if they saw different fields.

Bitstring Status List mechanics

The status list is itself a Verifiable Credential
{
  "@context": ["https://www.w3.org/ns/credentials/v2"],
  "id": "https://credentials.coursera.org/status/3",
  "type": ["VerifiableCredential", "BitstringStatusListCredential"],
  "issuer": "did:web:coursera.org",
  "validFrom": "2026-08-05T00:00:00Z",
  "credentialSubject": {
    "id": "https://credentials.coursera.org/status/3#list",
    "type": "BitstringStatusList",
    "statusPurpose": "revocation",
    "encodedList": "uH4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA"
  },
  "proof": { ... }
}

Mechanics and sizing:

  • The list is a GZIP-compressed, base64url-encoded bitstring. Minimum length is 131,072 entries (16 KB raw) — and because revocations are rare, the compressed payload is typically a couple of kilobytes.
  • Each credential carries its index in credentialStatus.statusListIndex. The verifier decompresses and reads one bit.
  • statusPurpose distinguishes revocation from suspension. Revocation is permanent; suspension is reversible. Different lists, different semantics — a suspended credential can come back.
  • The status list is itself signed, so a verifier can confirm the revocation data genuinely came from the issuer rather than an attacker who intercepted the fetch.
Status list operational rules
  • Serve from a CDN with a short cache TTL (minutes). Long TTLs delay revocation propagation; no cache means you serve the fetch volume of every verification on earth.
  • Do not log requests. Herd privacy is the property being purchased; access logs are how you accidentally sell it back.
  • Keep lists large and well-mixed. One list per course shrinks the anonymity set until the herd stops helping — the fetch itself reveals which course is being checked.
  • Pre-allocate index ranges per worker during batch issuance so allocation never contends.
  • Never reuse an index. Ever. Reuse silently transfers one credential's revocation state to another.

Credential refresh and expiration

FieldMeaningGuidance for education credentials
validFromWhen the credential becomes validIssuance timestamp. On backfill this is today, not the original completion date.
validUntilWhen it stops being validUsually omit. A completed course does not un-complete.
awardedDate (on the subject)When the achievement occurredThe real completion date. This is what a human cares about.
refreshServiceWhere to obtain a fresh credentialUseful for renewable certifications and for credentials signed with a retired key.
Do not set expirations you do not mean

The instinct to set validUntil two years out "to be safe" is wrong and expensive. A course completion is a historical fact; it does not decay. An expired credential reads to a verifier as invalid, not as old, and at Coursera's volume that means millions of legitimate credentials silently failing verification on a rolling basis, with no event to alert anyone.

Expire only what genuinely expires: time-boxed certifications, credentials tied to a product version, credentials with a regulatory renewal cycle. For everything else, let recency be a signal the verifier weighs via awardedDate rather than a cliff you impose. Module 6 makes recency an exposed signal precisely so it does not have to be an expiration.

A verifier, end to end

TypeScript — the shape of the checks (library calls elided)
async function verifyPresentation(vp: object, opts: VerifyOptions) {
  const checks: Record<string, string> = {};
  const warnings: string[] = [];

  // 1. Presentation signature + replay protection.  DO NOT SKIP.
  const holderDid = getHolder(vp);
  const holderDoc = await resolveDid(holderDid);
  if (!(await verifyProof(vp, holderDoc))) throw new Error("bad presentation signature");
  if (getChallenge(vp) !== opts.challenge) throw new Error("nonce mismatch");
  if (getDomain(vp) !== opts.domain)       throw new Error("domain mismatch");
  checks.presentationSignature = "valid";

  for (const vc of getCredentials(vp)) {
    // 2. Holder binding — the credential must be about the presenter.
    if (vc.credentialSubject.id !== holderDid) throw new Error("holder binding failed");

    // 3. Resolve issuer and verify the credential signature.
    const issuerDid = typeof vc.issuer === "string" ? vc.issuer : vc.issuer.id;
    const issuerDoc = await resolveDid(issuerDid);          // cached for hours
    const vm = findVerificationMethod(issuerDoc, proofKeyId(vc));
    if (!vm) throw new Error("unknown verification method");
    if (!(await verifyProof(vc, vm))) throw new Error("bad credential signature");

    // A retired key is a WARNING, not a failure — historical credentials
    // stay valid, which is exactly why retired keys are never deleted.
    if (isRetired(vm)) warnings.push(`signed with retired key ${vm.id}`);

    // 4. Revocation — one fetch covers ~131k credentials.
    if (vc.credentialStatus && await isRevoked(vc.credentialStatus)) {
      throw new Error("credential revoked");
    }

    // 5. Validity window and schema.
    assertValidityWindow(vc);
    assertSchema(vc);
  }

  // 6. Issuer trust — POLICY, not cryptography. Yours to define.
  //    Everything above is mechanical; this line is the actual decision.
  return { verified: true, checks, warnings, trustDecision: opts.trustPolicy(vp) };
}
Why is JSON-LD canonicalization so expensive, and can we avoid it?

Data Integrity proofs sign a canonical form of the graph, not the JSON bytes, so that semantically identical documents produce identical signatures regardless of key order or formatting. Producing that form means parsing JSON-LD, expanding every term against its @context, converting to RDF quads, and running RDFC-1.0 — which includes a deterministic labelling step for blank nodes that can be genuinely costly on complex graphs.

Three ways to avoid the pain. Pin contexts locally so expansion never hits the network — mandatory for both performance and security, since a remote context is remote code execution over your semantics. Keep credential graphs shallow, avoiding deeply nested blank-node structures. Or use JWT securing, which skips canonicalization entirely by signing the serialized bytes — at the cost of the JSON-LD-native properties and BBS+ compatibility.

For bulk backfill specifically, JWT securing turns a multi-week job into a multi-day one. That is a strong enough argument to make backfill JWT-secured even if forward issuance stays Data Integrity.

12

Privacy & Compliance

Learner-held credentials improve the privacy posture on almost every axis — and create two genuinely new problems that the architecture makes harder, not easier.

Scope note

This module is an engineering-oriented analysis of where the legal questions land in the architecture, not legal advice. Every position below needs review by counsel with the actual facts of Coursera's data-processing arrangements, and several turn on contractual details no external analysis can see.

GDPR: better on most axes, genuinely harder on one

GDPR principleToday (issuer-hosted)With verifiable credentials
Data minimisation (Art. 5)Verification page reveals whatever the page showsBetter — selective disclosure reveals only requested fields
Purpose limitationIssuer sees every verification and could repurpose itBetter — the issuer is not in the transaction
Data portability (Art. 20)Export produces a PDFMuch better — machine-readable, interoperable, a live artifact
Right of access (Art. 15)Subject access request to the issuerBetter — the learner already holds the data
Right to erasure (Art. 17)Delete the database rowHarder — you cannot delete a copy someone else holds
Correlation riskBounded — the issuer is the only observerNew risk — a static DID is a cross-verifier identifier

The erasure paradox, resolved

An issued credential is a signed document in the learner's possession, possibly copied to verifiers. Coursera cannot reach into a wallet and delete it. So what does erasure mean?

The four-part answer
  1. Delete Coursera's copy and the issuance record — that is the personal data Coursera controls, and erasure applies to it fully.
  2. Revoke via the status list so any future verification fails. The credential becomes inert even where it exists.
  3. Recognise that the learner's own copy is theirs. A learner holding a document about themselves is not Coursera processing their data; erasure rights run against controllers, not against the data subject's own records.
  4. Verifier copies are the verifier's responsibility — they are a separate controller with their own retention obligations, exactly as they are today for a PDF someone emailed them.

This is a defensible position and materially better than the status quo, where a PDF emailed to fifty employers is equally unreachable and has no revocation mechanism at all.

The residual issue counsel will find

The status list creates an ongoing processing relationship after erasure. To keep a revoked credential revoked, Coursera must keep publishing a bitstring in which that learner's index is set — which means retaining an index-to-learner mapping, which is personal data, after being asked to erase it.

Two mitigations, and neither is free. Keep the mapping in a separate minimal store with its own retention basis (legal obligation / legitimate interest in credential integrity), holding only the index and a hash rather than learner details. Or accept un-revocation on erasure — delete the mapping, let the bit stay set with no way to explain why, and document that the revocation is permanent and unattributable. Decide this deliberately in Phase 1 rather than discovering it in a Phase 3 audit.

FERPA: verifiable credentials are close to the ideal case

FERPA governs education records at US institutions receiving federal funding. Coursera's own position varies by product line — direct-to-consumer courses are generally not FERPA-covered, while degree programs delivered with university partners typically are, with Coursera acting under the school-official exception. That distinction should be settled per product line before Phase 1, because it changes who may authorize disclosure.

Where the architecture helps, the help is structural rather than incidental:

  • Disclosure becomes learner-initiated by construction. FERPA's core mechanism is consent for disclosure of education records. A VC presentation is a consent event: the learner chose to present, to a named verifier, at a specific time. That maps to FERPA's model more cleanly than any consent checkbox.
  • Selective disclosure is data minimisation for records. Sharing a credential rather than a transcript discloses less by default.
  • The audit trail lives in the right place. The wallet can log every presentation for the learner, giving them a record of who they shared with — which is closer to FERPA's spirit than an institutional log the learner cannot see.
The FERPA trap in the enterprise product

The Coursera for Business workforce skills record from Module 10 sits in a different position from a learner sharing their own credential. If an employer sponsors a learner in a FERPA-covered program and receives a CLR about that learner, that is disclosure to a third party and needs a consent basis independent of the employment relationship.

Design implication: the enterprise record must be built on learner-consented presentations, not on issuer-side data export. Those two produce a superficially identical dashboard and are legally very different objects. Build the consented path first even though the export path is easier — retrofitting consent into a shipped enterprise feature is far worse than designing for it.

Correlation: the new risk the architecture creates

A learner presenting the same did:key to every verifier has handed out a persistent, unique, cross-context identifier — effectively a cookie that cannot be cleared and that they cannot see.

MitigationHow it worksCost
Pairwise DIDsA distinct subject DID per verifier relationshipCredentials are bound to one subject DID, so this needs per-relationship issuance or re-binding — substantial
BBS+ derived proofsFresh unlinkable proof per presentationCryptosuite and library maturity; an L1 decision made at issuance
Batch issuance of single-use credentialsIssue N copies with distinct identifiers; use each onceStorage and issuance overhead; refresh logistics
Accept it, disclose itDocument that presentations are correlatableFree — and honest, which counts for more than it seems
The proportionate position

For employment credentials, correlation is largely a non-issue: the learner is deliberately presenting under their real name to a named employer. They have already told the verifier who they are — a stable DID adds little.

Correlation matters intensely for two cases: anonymous or pseudonymous skill marketplaces, and credentials touching protected categories — disability accommodations, recovery-program completions, credentials revealing immigration or veteran status.

Recommendation: accept correlation for ordinary course credentials and say so plainly in the privacy documentation. If Coursera ever issues credentials in a sensitive category, that class needs BBS+ from day one — because as Module 2 established, the securing decision is effectively irreversible once credentials are issued at scale.

Cross-border portability

  • The credential itself crosses borders trivially — it is a signed document verified against a public key, with no data transfer to a third country in the GDPR sense when a learner presents their own credential to a foreign verifier.
  • EU recognition runs through EDC/ELM. Mapping Coursera achievements into the European Learning Model is what makes them describable in EU frameworks, and the December 2026 EUDI mandate makes this a dated requirement rather than an aspiration.
  • The issuer-side data — the completion record, the issuance log — remains subject to ordinary transfer rules and is unaffected by any of this.
  • Trust does not cross borders automatically. A European verifier may not recognize did:web:coursera.org as an accredited issuer, which is the trust-registry gap from Module 2 wearing a jurisdictional hat. National accreditation registries are the emerging answer, and they are not interoperable yet.

Accessibility and the equity question

The learner without a smartphone

A wallet-first architecture quietly assumes a modern smartphone with hardware-backed key storage, reliable connectivity, and app-store access. For a global learner base that assumption excludes real people — often exactly the learners for whom a portable credential would matter most.

Requirements that follow: the web wallet must be fully functional on low-end devices and slow connections; a downloadable credential file must work with no wallet at all; the hosted verification page must remain available indefinitely as the universal fallback; and none of these should be presented as a degraded tier.

This is not a footnote. If verifiable credentials become the high-trust path and they require hardware most of the world does not have, the technology has widened a gap rather than closed one — which would be a genuinely bad outcome for a mission-driven education platform, and one that is entirely foreseeable now.

The revocation policy question

Technical revocation is easy. The policy is not, and it must be written before the first credential is signed:

  • Academic integrity violation discovered after issuance — revoke. Clear case.
  • Issuance error (wrong course, wrong learner, wrong tier) — revoke and reissue correctly.
  • Course later found to be substandarddo not revoke. The learner did the work in good faith. Deprecate the achievement definition instead so no new credentials are issued.
  • Partner relationship endsdo not revoke. The achievement happened. Nothing about it became false.
  • Learner requests deletion — revoke plus erase Coursera's copy, subject to the status-list retention question above.
  • Legal order — revoke, and publish transparency reporting on the aggregate.
Bring it home — the principle that keeps revocation trustworthy

Revocation is for statements that were never true, or are no longer true. It is not a business lever.

The moment credentials are revoked because a partnership soured, a product was sunset, or a learner stopped paying, the signature stops meaning "this is true" and starts meaning "Coursera currently endorses this." Those are entirely different products, and the second one is worth far less — because a verifier can no longer treat a valid signature as evidence about the learner.

Write the revocation policy in Phase 1, publish it, and treat it as a commitment to the ecosystem rather than an internal runbook. It is the cheapest credibility Coursera can buy in this space, and one visible violation would cost more than the entire program.

Does issuing verifiable credentials make Coursera a data controller in new ways?

For the issuance itself, no — Coursera already processes completion data as a controller, and signing a statement about it is a new format for existing processing, not a new purpose.

Two genuinely new positions do arise. First, the status list is ongoing processing: publishing a bitstring keyed to learner-specific indexes continues indefinitely, including after an erasure request, which is the residual issue flagged above. Second, if Coursera operates a custodial wallet, it becomes a processor (arguably a controller) for credentials issued by other parties that learners store there — a materially different and larger obligation than issuing your own.

That second point is an underrated argument for the Module 4 recommendation. A custodial wallet holding third-party credentials means accepting controller-ish obligations over data Coursera did not create and cannot validate. Export-first architecture keeps that surface small, which is a compliance benefit on top of the cost and strategy arguments already made.

Resources & Primary Sources

Specifications

Wallets and reference implementations

Market research and primary data

Ecosystem and policy

Protocols and cryptography

Related courses in this collection

  • Cloudflare Wallets — the payments half of Module 7: x402 on the wire, Account vs Virtual Wallets, the Monetization Gateway
  • Cloudflare for Developers — Workers, KV, R2, and the edge platform the verification API would run on
  • AI-Native Learning — the assessment and pedagogy side of what a credential should attest to
  • Instructure — Canvas Credentials and the LMS flank from Module 9
The five sentences to remember
  1. A traditional credential is a pointer to a database row the issuer controls; a verifiable credential is a signed statement the learner controls.
  2. The specs stopped being the bottleneck in mid-2025 — what is missing is issuers at scale and verifiers who care.
  3. The wallet is not the product. Machine-readable assessment provenance is the product, and the wallet is how it travels.
  4. Basic verification must be free forever; charge for enrichment, never for the check.
  5. You cannot add fields to a signed document retroactively — so every month issued without alignment and an assessment tier is a month of permanently impoverished credentials.

Need this for a date?

Turn this course into a ramp-up pack sized to your minutes per day, or build an interview or certification pack for the day you need it.