Enhanced Certificate Generation: Completion, Grades, and Tiers

Overview

We’ve built a new, flexible certificate and credential system that supports PDF certificates, multiple eligibility rules (not just grades), tiered recognition, and badges; all built to be extensible and maintainable.

Problem

The certificates you can create in Open edX today mostly just look at a student’s overall course grade. But we know that teaching and learning aren’t always that simple. Maybe you want to recognize students who complete all lessons, pass a tough final exam, or even engage in course discussions. The current system doesn’t easily let you set up those kinds of detailed rules or offer different certificate levels.

We’ve looked at existing options, and unfortunately, many are limited, outdated, or need a lot of extra work to fit these needs. Plus, complex technical workarounds just add more hassle behind the scenes.

So, we’ve built an easy-to-manage system that fits right into Open edX and gives educators more flexibility. This system can support different types of certificates and badges, like:

  • Certificate of Achievement: For students who pass both assignments and the final exam.
  • Certificate of Completion: For students who complete a set percentage of the course.
  • Badges: For achievements of completion.
    “Learning Paths” Credentials: For students who successfully complete a full set of courses within a Learning Path. (The Core Product Working Group is currently developing a solution to support course bundling and sequencing, for this feature idea, we’re referring to it as “Learning Paths.”)
  • Special Achievements: Recognizing extra things like forum activity or specific performance milestones.

Use Cases

  • As a course author, I want to easily set credential rules like “pass final exam and all assignments” or “complete 80% of course content” to better reward achievement.
  • As a learner, I want clear, tiered recognition for achievements across courses and learning paths, not just a single certificate.
  • As a platform admin, I want a maintainable, extensible plugin that integrates smoothly with Open edX, minimizing system complexity and upgrade risks.

Supporting Data

This system is already deployed in production with these features:

  • PDF certificate generation
  • Completion-based and grade-based eligibility
  • Granular grading logic (eg. minimum final exam score)
  • Multiple certificate tiers within courses
  • Combined eligibility rules (completion + grades)
  • Support for badges and Learning Path credentials
  • Full Learning Path compatibility
  • Roadmap for plugin support to allow custom credential logic and generation

Here’s a quick look at how this compares with what’s currently possible in Open edX:

Feature Current Open edX Proposed Feature
Certificate Format Basic PDF/HTML Richer PDF support
Eligibility Criteria Based on total course grade Completion, grade thresholds, or both
Granular Grade Logic Total grade only Specific requirements (eg. “70% on final exam”)
Multiple Certificate Tiers One per course Tiered certs (eg. Pass, Merit, Distinction)
Learning Path Support Not available Fully supported
Extensibility Limited Plugin-ready for logic and output
System Design Static and tightly coupled Modular, API-driven, minimal dependencies on core models

We’re sharing this to gauge interest across the community and see if others are facing similar limitations. Posting here allows us to:

  • Collect feedback and ideas
  • Build a broader consensus for prioritization
  • Explore collaboration and co-funding to integrate this as a shared, supported feature in Open edX

If you find this useful, please comment, and ask questions your input is key to making this happen :slight_smile:

5 Likes

@egordon @jmakowski @Mahnoor_Sarwat I’d be interested in your feedback! :slight_smile:

1 Like

Thanks for sharing putting this together, Cassie! A few thoughts and questions:

  • Will there be weighting or anti-spam logic? For example, how do we prevent “spam” engagement just to earn a badge?
  • How will authors define certificate logic? Is there a form-based builder, or do they configure rules manually?
  • Will this support translations/localization for global deployments?
  • I think considering CBE would also be helpful here
  • Can learners track progress toward these credentials in real time? Especially for Learning Paths?

Really excited to see where this goes!

1 Like

this looks cool, especially plug-in support for custom logic and generation. I have a few questions:

  1. How will this integrate with the current Credentials IDA? Will use the Badges and Verifiable Credentials apps that are already in that IDA? That IDA is already extensible and plug-in ready for Badges, Verifiable Credentials, extra credentials, and program certificates. It’s not flexible with regards to course certificates, however; it delegates the logic for generating a course certificate to edx-platform.
  2. Will this use any remnants of the old PDF certificate logic that has been almost but not entirely ripped out?
    • If so, which parts of it will use?
    • If not, will it make sure to remove all of those old components so they don’t conflict with the new code?
    • Will it rely on Mongo and permanent hosting of PDFs and verification signing files like the old system?
  3. I absolutely agree that it would be great to be able to have more modular grading logic, but some of the limitations that you list aren’t exactly limitations of the system. For example, you can already make a certificate predicated on getting 70% on your final exam.
  4. Has this been developed in conjunction with any of the work going on at Axim to rethink how we handle credentials? @e0d has been leading some interesting architecture, and there would be value in combining efforts.
1 Like

I’m curious to know how this was implemented. I suspect that it was built as a new platform plugin, but please let me know whether that’s correct.

We’ve been investing in adding things like badging, verifiable credentials integration, Credly and Accredible integrations via the Credentials IDA. I ask my self alot whether having a separate IDA for that makes sense :slight_smile: There are quite a few valuable features that are in the IDA today. They are mostly based on events.

2 Likes

@e0d Exactly what you thought. Here is the repo GitHub - open-craft/learning-credentials.

1 Like

@arunmozhi I would love to see credential and certificate flexibility being part of a coherent architectural plan (which does not mean that I am possessive about keeping that coherent plan being the existing, separate, Credentials IDA; I know @e0d has been thinking for a while about moving that functionality back into the monolith).

But instead of having a credentials IDA with a set of functionality, and a platform plug-in with an overlapping-but-distinct set of functionality, I’d like to have an architectural discussion about what to put where. Maybe we should keep both the plug-in and the IDA. In some cases they’d serve very different purposes, such as added flexibility to course certificates which belongs in the platform, versus program certificates which (as programs are currently construed) don’t belong there.

It would be good to discuss which functionalities each one should add, and write up an ADR about what and why. That way, for example, we won’t end up with a third implementation of badges (the one in the credentials IDA, and the old one that’s in the monolith already).

I love this increased level of criteria for certificates!

  • In our Ethiopian use case, we actually had many complaints that learners would game the system by just jumping ahead to the quizzes and guessing the answers to the multiple choice questions so they could get their certificates (which are required). Adding the completion percent would fix that. I would point out that we’ve noticed some “glitchiness” in the completion percentage (we have some users who report that they cannot get to 100% but are stuck at 98%, even when they have done everything), but its not a enough of a problem to prevent using it, just a point to consider in maybe being a little generous on what is set there.
  • I also like the ability to set a criteria for a specific gradable item (like the final exam), as we’ve played the “which grading combo makes the most sense” game, when what would be most helpful is emphasizing the final exam.
  • LOVE that it will work with Learning Paths, as we are very interested in that feature! :slight_smile:
2 Likes

@deborahgu I fully agree about creating an ADR to discuss the architectural plan.

I think the main reason @cassie created this post in the “Feature Requests” section and didn’t include the link to the plugin right away was, probably, to avoid the conversation getting into the technical bits too early.

From the discussion so far, there seems to be fair amount of things that need to be understood and streamlined from the product perspective as well. That is a good thing, as there is definitely interest in the community for an improved and more flexible solution.

1 Like

@deborahgu and @Mahnoor_Sarwat I’m compiling a list of answers to your questions and will answer them in one fell swoop :slight_smile:

@egordon :woman_dancing: :star_struck: Thanks for the great feedback. It’s really helpful to hear how this plays out in the real world. And how this could be a positive addition to your use case.

@Agrendalath @arunmozhi Do you know if anyone is aware of the above issue?

@arunmozhi @deborahgu Exactly! I wanted to gauge how widespread the pain point is before diving into technical details. If it turns out to be a common need, we can think through a more general, scalable solution that’s worth building out.

That said, we’ll still address your technical questions here @deborahgu so there’s clarity on what we’ve already built :slight_smile:

1 Like

Yes. I have a fix for this. We now have the upstreaming budget, so I can open the PR next week.

2 Likes

@Mahnoor_Sarwat,

It is already possible to specify combined criteria - e.g., the learner needs to achieve the specified engagement threshold and achieve a minimum grade at the same time. Also, the credentials need to be explicitly configured for each course or Learning Path. For example, instructors can decide not to offer any completion-based credentials in an open course.

Please see this document: Quick Start — learning-credentials 0.2.1 documentation. We are considering building the authoring interface in the next phase.

We do not have a use case for this at the moment, but the PRs are definitely welcome!

Would you mind elaborating on this point? Isn’t this something we could achieve with Learning Paths?

Yes, but only tracking the completion progress is available (please see the screenshots here: https://openedx.atlassian.net/wiki/spaces/OEPM/pages/5105483785/Proposed+Learning+Paths+by+OpenCraft#Learner-Experience). Calculating grades for different categories is a heavy operation, so displaying them in real time would be much more complex. We are still in a discovery phase and considering different approaches (e.g., a custom XBlock, Progress MFE plugins, etc.).

@deborahgu,

We decided to develop this as a much simpler alternative to the Credentials IDA (ref: 0001 Purpose of This Repo — learning-credentials 0.2.1 documentation) that supports courses and Learning Paths (an alternative to Programs) out of the box. After multiple internal investigations, we realized that using Credentials will require much more work. The current solution also bypasses the limitations of the edx-platform native certificates (e.g., supporting only one certificate per course).

This is a standalone implementation: learning-credentials/learning_credentials/generators.py at a4da5e4a612e1a4c1aa63d7329dfec76e0800efa · open-craft/learning-credentials · GitHub.

No - we store PDF certificates in S3.

This is not my answer, but I do not see it posted in this thread:

@e0d,

We implemented it as an edx-platform plugin (a Python package: GitHub - open-craft/learning-credentials). This architecture doc (0002 Architecture — learning-credentials 0.2.1 documentation) and this diagram (Quick Start — learning-credentials 0.2.1 documentation) show the basic mechanisms we use here. There is also the recording from our last year’s product talk where we described this solution (https://www.youtube.com/watch?v=x96vvsGwsko).

cc: @Cassie

1 Like

Hi everyone, we’ll be presenting our certificate feature at the next Open edX Monthly Meetup: Digital Transformation, Next-Gen Credentialing & Modern Payment Solutions on 11 September at 5pm GMT+3. Get your free ticket here :slight_smile:

1 Like

@Agrendalath A couple of questions came up in the meetup that I’m hoping you can help with:

  1. Multi-page PDFs: Is it possible to upload certificates with more than one page? Some institutions include a lot of detail, so their certificates often go beyond a single page. If this is supported, can metadata also be added to pages beyond the first?
  2. Roadmap timeline: Is there a timeline you can share for upcoming items on the roadmap? In particular, there was interest in when certificates will integrate with learning paths.

We also ran a small poll during the presentation asking attendees which features they were most excited about. Badges was the clear winner with 9 votes. Tiered recognition got 3 votes, and completion-based certificates got 0 votes.

1 Like

Thanks for the great presentation. I had asked Ali about possibilities to use certificate templates with multiple pages. She suggested I post here so she can get back with news. Our general use case are certificates for micro-degrees compatible with the CMF framework of the European MOOC Consortium. To be compatible with the framework, these certificates have to contain quite a lot of information. Currently, about 3 pages. Dynamic/personal information is only on page one. Pages 2 and 3 contain static, but course specific information.

1 Like

@TomS, currently, we assume that the template has only one page. However, it is possible to implement multi-page support without significant changes to the current mechanisms. We determine the place to write the metadata (like the learner’s name or course name) by reading the Y coordinate in the certificate configuration.
E.g., let’s say that our template has 3 pages with height 1000pt. If we wanted to write the name on the first page, we would specify name_y: 300. If we wanted to write it on the second page, we would use 1300, etc.

@ali_hugo, Learning Paths are already supported - you can use the steps key in the certificate configuration to specify fine-grained criteria for each course within the Learning Path.
Currently, we are working on a plugin to display Learning Credentials on the Progress page in the Learning MFE (it is already in the QA phase).

We don’t have any roadmap we could share here, but I’ll be happy to prepare one if there is interest in other features. If anybody would like to see some particular feature, please feel free to open an issue with your idea here.

1 Like

Sounds good. Thanks a lot. Have you also planned to add some verifiability mechanisms to make it harder for learners to tamper with the certificate contents? E.g. a QR-code/verification link that shows the original contents of the certificate on the Open edX instance?

1 Like

@egordon Pinging you here since you asked about the timeline of certificates and Learning Paths in the meetup. Please let us know if you have any additional questions about this.