Keycode banks and digital products
Storing eCard, eBook or online-module access codes in banks, automatic assignment at checkout, sending codes manually, and what students see.
Updated · JoinCPR help center
A keycode bank holds a list of one-time codes, such as AHA eCard or eBook codes, that students need for a course's digital material. When a student registers on your portal, JoinCPR hands out the next available code and emails it. Admins and staff manage banks under Manage → Keycode Banks.
Creating a bank
Click New Bank:
| Field | Notes |
|---|---|
| Name | For example "AHA BLS eCards - Q2 2026" |
| Course | The course whose registrations should receive codes from this bank. "No course (standalone)" banks never assign automatically. |
| Description | Shown to students with their code |
| Access URL | Where students redeem the code. Becomes the Access Your Keycode button in the email and the Access Material link in their account. Enter one; banks without a URL may fail to save. |
| Active | Only active banks assign codes at checkout |
Several banks can point at the same course; codes are taken from any active bank for that course.
Adding codes
Add Keycodes accepts one code per line. Blank lines and duplicates within the paste are dropped, and codes that already exist anywhere in your account are skipped ("N duplicates skipped"). Codes are stored exactly as typed.
Automatic assignment
When a student checkout (single or group, paid, free or pay-later) creates a registration for a course with an active bank:
- The lowest-numbered available code is assigned to that registration and marked Sent.
- The student immediately receives the Your Keycode — {class} email with the code, the bank name and the Access button.
- If no codes are left, the registration goes ahead without one and appears under Pending Assignments.
Important
Only checkout assigns automatically. Registrations created by staff from a roster, by the student import, or through the client portal do not receive codes. Send those from the bank page (below).
Sending codes manually
- Pending Assignments (on the Keycode Banks page): confirmed or completed registrations for a course with an active bank that have no sent code. Assign takes the next available code, marks it Manually Sent and emails it.
- Assignment History (on a bank's page): every assigned code plus pending registrations, searchable, with the code masked and a Show toggle. Row menu: Send Keycode (pending rows), Resend Keycode (sends the same code again), Copy Keycode, View Registration.
Staff can also see and copy a student's code from View Details on the roster or the student profile.
Stock
The list shows Total, Available (a red 0 when empty) and Assigned per bank, and the bank page shows Pending Students. After adding codes you are told how many students are waiting. There is no automatic low-stock email, so check the list before big classes.
What students see
- The keycode email (fixed wording, not editable, cannot be switched off).
- My Account → My Keycodes (if student login is enabled): bank name, course, class, the code, an Access Material link and the description. Codes show as Redeemed from the moment they are assigned.
Rules to know
- Assigning a code uses it up. Cancelling, refunding or transferring a registration does not return the code to the pool, and there is no un-assign action. The code travels with a transferred registration.
- Deactivate a bank you no longer want to draw from. Delete hides the bank but codes already sent stay attached to their registrations; prefer deactivating once any code has been handed out.
- Reports → Keycodes summarises totals per bank with CSV and PDF exports. See Reports.
Digital products
"Digital product" is the technical name for a keycode bank. A digital product is delivered only as a code plus an optional access link; there is no file download or separate purchase. Charge for it through the class price or an add-on.