Issuer documentation
The manual an issuing organisation actually reads
Sixteen chapters and five appendices, written from the console as it behaves today and illustrated with screenshots taken from the live service.
- Chapters
- 16 + 5 appendices
- Screenshots
- 23
- Captured from
- app.certlink.io
- Interface language
- English
Front matter
CertLink · Issuer Manual
Issuing verifiable digital certificates and badges https://app.certlink.io
This manual is for the people who issue credentials — the administrator who registers the organisation, the designer who lays out the certificate, and the person who presses Issue.
If you are here because you received a credential, you need §13.2 and §13.5 only.
How to read it
Chapters 1–12 are in the order you will actually do them. If you are setting up for the first time, read them in order; each one ends where the next begins. Chapters 13–16 are reference.
| Part 1 · Getting started | |
|---|---|
| 1 | Creating your account |
| 2 | Registering your organisation |
| 3 | Securing your account |
| Part 3 · Issuing and running | |
|---|---|
| 10 | Issuing credentials |
| 11 | After issuing |
| 12 | Organisation settings |
| Part 4 · Reference | |
|---|---|
| 13 | What recipients and verifiers see |
| 14 | Languages |
| 15 | Announcements, FAQ and support |
| 16 | When something goes wrong |
| Appendices A–E — glossary · permissions · upload columns · number rules · public addresses |
Five things worth knowing before you start
1 · A credential cannot be edited. Once it is signed it has been downloaded, printed, emailed or added to a wallet. A mistake is corrected by revoking and re-issuing (§11.5), never by editing. This one rule explains most of the product's behaviour.
2 · Your workspace address is permanent. It is written into your issuer DID, which is inside every credential you sign (§2.3). Choose it as carefully as a domain name.
3 · Old signing keys are never deleted. They are the only thing that can verify what they signed (§6.3).
4 · Anyone who can issue needs two-step verification. And you cannot grant issuing rights to someone who has not enrolled — plan onboarding around it (§4.4).
5 · Nothing verifies until your organisation is approved. But you can build everything else while you wait (§2.5).
Getting help
The console carries Announcements and a Frequently asked questions section. For anything else, use the contact form at https://certlink.io/contact — and quote the error code if you have one (§16.11).
Part 1, Chapter 1
1. Creating your account
Everything in CertLink starts with a personal account. An organisation is registered from an account (Chapter 2), and every operator you later invite signs in with an account of their own.
One thing to know up front: issuers and recipients use the same kind of account. The sign-up screen says so — "Issuers and recipients use the same kind of account." You do not pick a role here. What you can do is decided later, by the organisation you create or are invited to.
1.1 Before you start
| You need | Why |
|---|---|
| An email address you can open right now | Sign-up is not finished until you click a link we send there |
| A work email on your organisation's own domain — recommended | In Chapter 2 a contact address that does not match the organisation's domain triggers a stricter document review |
| An authenticator app — soon, not yet | Anyone who can issue or revoke credentials must turn on two-step verification (Chapter 3) |
1.2 Two ways to sign up
| Method | Choose this when |
|---|---|
| Email and password | The normal path. You set a password now |
| Continue with Google | You want to use an existing Google account. No password is created — you can add one later (§1.5) |
Both create the same kind of account. You can add Google sign-in to an email account later, and you can add a password to a Google account later. Neither choice locks you in.
1.3 Sign up with email and password
Go to https://app.certlink.io/signup and fill in the form.
| Field | Required | Notes |
|---|---|---|
| ● | This is your sign-in identifier. It cannot be changed later from the profile screen | |
| Full name | ● | 2–30 characters, and must contain at least one letter |
| Password | ● | See the rules below |
| Confirm password | ● | Must match exactly |
| Country | ● | Pick from the list. This also sets the dialling code on the phone field |
| Language | ● | The language of your console screens and the emails we send you. Defaults to the language the sign-up page is currently displayed in |
| Phone number | ○ | "Optional. Used for notifications." The dialling code follows the country you picked, until you change it yourself |
Then the agreements:
| Checkbox | Required |
|---|---|
| "I agree to the Terms of Service." | ● |
| "I agree to the Privacy Policy." | ● |
| "I agree to receive marketing messages. (Optional)" | ○ |
The Terms and the Privacy Policy open in a new tab, so you will not lose what you have typed. If you submit without the two required boxes, the form answers "Please accept the required agreements."
Press Create account.
Password rules
"Between 8 and 64 characters. It cannot contain your email or name."
| Rule | Message if you break it |
|---|---|
| At least 8 characters | "The password must be at least 8 characters." |
| At most 64 characters | "The password must be 64 characters or fewer." |
| Must not contain your email address or your name | "The password cannot contain your email or name." |
| Must not be a password known from a public breach | "That password has appeared in known breaches. Please choose another." |
A strength meter appears as you type — Not usable · Weak · Fair · Strong. It is guidance, not a gate; the four rules above are the gate.
Note — The Language field here is not the language of the certificates you will issue. Those are two different settings, and a third one is fixed onto each credential at the moment it is issued. Chapter 14 explains all three.
1.4 Verify your email
After Create account the screen changes to:
Verification email sent "Open the link in the email to finish verification. The link is valid for 24 hours and can be used once."
| Fact | Detail |
|---|---|
| Validity | 24 hours |
| Uses | Once. Opening it a second time shows "This account is already verified." |
| If it expires | "Verification links are valid for 24 hours. Request a new one from the sign-up page. (E-AUTH-004)" |
| Resending | Use Resend verification email. There is a short cool-down of about a minute between sends |
Until you verify, signing in is refused with "Your email is not verified yet." (E-AUTH-003). The sign-in screen offers resend the verification email right there, so you do not have to go back to sign-up.
If the mail has not arrived after a minute or two, check the spam folder before resending.
1.5 Sign up with Google
Press Continue with Google on either the sign-up or the sign-in screen, and pick your Google account. By continuing you accept the Terms of Service and the Privacy Policy — the screen states this next to the button.
Three things behave differently on this path:
| Situation | What happens |
|---|---|
| Your Google account's email address is not verified at Google | Sign-in is refused: "That Google account has an unverified email address, so we cannot sign you in." Verify it with Google first |
| A CertLink account with the same email address already exists | Google sign-in is linked to that existing account — "We linked Google sign-in to your existing account with the same email." You do not end up with two accounts, and nothing you already had is lost |
| The sign-in does not complete | "We could not finish signing in with Google. Please try again." |
An account created this way has no password. You can sign in with Google indefinitely, but if you also want to sign in with an email and password, open Account → Password. The screen is titled Set a password and explains why it is offered: "You signed up with Google, so this account has no password. Set one to sign in with your email as well." See §3.5.
1.6 Signing in
Go to https://app.certlink.io/login, enter your email and password, and press Sign in.
One option on this screen decides how long you stay signed in:
| Keep me signed in (30 days) | Session lasts |
|---|---|
| Not ticked | 12 hours |
| Ticked | 30 days |
If your account has two-step verification turned on, the code screen comes next — that is Chapter 3.
1.7 When you cannot get in
| What you see | What it means | What to do |
|---|---|---|
"That email or password is not correct." (E-AUTH-001) | Either the address is not registered or the password is wrong. We deliberately do not tell you which — saying "no such account" would let anyone test whether an address is registered here | Check the address for typos, then use Forgot password |
"Your email is not verified yet." (E-AUTH-003) | Sign-up was never finished | Use resend the verification email on the sign-in screen |
"That email is already registered." (E-AUTH-005) | Shown during sign-up | Sign in instead, or use Forgot password |
"This account is locked. Please check the email we sent you." (E-AUTH-007) | See below | Wait for the lock to lift, or reset your password |
About the lock
Repeated wrong passwords make each further attempt slower. Beyond that, only accounts that can issue credentials are locked outright: more than 10 failures locks the account for 30 minutes, and we send an email saying so. Ordinary accounts are slowed but not locked — a lock that anyone could trigger against any address would itself be a way to keep people out.
Forgot password
- Forgot password on the sign-in screen.
- Enter your address. The screen answers "If that address is registered, a reset link is on its way. Check your spam folder if it does not arrive." — the same answer either way, for the reason given above.
- Open the link. It is valid for 30 minutes.
- Set the new password. The screen warns first: "All sessions on every device will end after the reset."
A password reset does more than change the password. It ends every session on every device, and it clears every remembered browser on the account, so a browser that was skipping the two-step code will start asking for it again (§3.4). This is intended: if you are resetting because something went wrong, the reset has to be able to undo everything it left behind.
1.8 What comes next
You now have an account, but no organisation — so there is nothing to issue from yet. Signing in takes you to a screen that asks you to create one.
→ Chapter 2 · Registering your organisation and getting approved
Part 1, Chapter 2
2. Registering your organisation
An account is a person. An organisation — called a workspace in the console — is the issuer whose name appears on every credential you produce. You cannot issue anything until you have one and it has been approved.
One workspace is one issuing body. If your institution issues under two distinct brands that recipients would recognise as separate issuers, register two workspaces. The person who creates a workspace automatically becomes its Owner.
2.1 Opening the form
Sign in and you are taken to the workspace list. If you have none, the console asks you to create one. From inside an existing console you will find + New workspace in the organisation switcher at the top of the sidebar.
The screen is titled Create a workspace: "Register as an issuer. You can issue credentials once the review is approved."
2.2 Organisation
| Field | Required | What to enter |
|---|---|---|
| Organisation name | ● | "Used as the issuer name on credentials." Up to 100 characters. This is the name a recipient and a verifier will read |
| Organisation name (English) | ○ | Up to 100 characters |
| Organisation type | ● | Institution · Association · School · Company · Non-profit |
| Workspace address | ● | See §2.3 — this one is permanent |
| Primary domain | ● | "Your organisation's official domain. Ownership will be verified." e.g. vtex.co.kr |
| Business registration number | ○ | Used during the review |
| About the organisation | ○ | Up to 500 characters |
2.3 The workspace address cannot be changed
Workspace address is the short identifier in your console URL — app.certlink.io/console/vtex.
| Rule | Detail |
|---|---|
| Characters | "Lowercase letters, digits and hyphens, 3–30 characters." |
| Availability | Checked as you type. When it is free the hint becomes ✅ Available. Issuer DID: did:web:…:org:{slug} |
| If taken | The form refuses to submit and answers E-ORG-002, suggesting alternatives such as vtex-1 or vtex-kr |
| Changing it later | Not possible. "Once set it is baked into the DID and cannot be changed." |
⚠️ Why this one is permanent. The workspace address becomes part of your issuer's DID — the identifier that is written inside every credential you sign, and that any external verifier resolves to check your signature. Credentials already in recipients' hands cannot be rewritten. Changing the address would break the verification of everything you have ever issued.
Take a moment over it. Use the name your recipients would recognise, not a project code.
2.4 Contact and formats
| Field | Required | What to enter |
|---|---|---|
| Contact name | ● | Pre-filled from your account |
| Contact phone | ○ | |
| Contact email | ● | Pre-filled from your account. "We recommend an address on the primary domain. A mismatch means a stricter document review." |
| Time zone | ● | "Used to compute issue and expiry dates and to reset credential numbers. Changing it later can put it out of step with credentials already issued." |
On the time zone. This is not a display preference. Issue dates, expiry dates and the point at which a daily or monthly credential-number counter resets are all computed in it, and the date printed on a credential is frozen using the setting that was in force at the time of issue. Set it to the zone your organisation actually operates in, and then leave it alone.
Press Submit for review.
2.5 While the review runs
Your workspace opens immediately, with a status badge at the top of the dashboard.
| Badge | Meaning |
|---|---|
| Under review | The default after submission |
| Approved | You can issue |
| Declined | The review did not pass |
| Suspended | "The console is read-only. Verification of existing credentials keeps working." |
The dashboard shows: Review in progress (within 3 business days) — "While the review is pending you can still create designs and credential definitions, but issuing stays blocked. (E-ORG-001)"
So the waiting time is not dead time. You can do most of Part 2 now:
| While Under review | |
|---|---|
| ✅ Invite operators and set roles | Chapter 4 |
| ✅ Define custom attributes | Chapter 7 |
| ✅ Build designs | Chapter 8 |
| ✅ Create credential definitions | Chapter 9 |
| ❌ Issue anything | Blocked with E-ORG-001 |
| ❌ Signing key and DID | Created for you on approval, not before |
When approval comes through, the issuer DID and your first signing key are generated automatically — you do not have to ask for them. Chapter 6 explains what they are and the one rule you must never break with them.
2.6 What you can change later, and what you cannot
| Setting | Later? | Consequence |
|---|---|---|
| Workspace address | Never | It is inside the DID |
| Organisation name | Yes | "Changing this does not affect credentials already issued — they keep the name they were issued under." Old credentials keep the old name, permanently and correctly |
| Primary domain | Yes | "Changing it triggers another review." |
| Time zone | Yes, but | It can fall out of step with credentials already issued |
| Contact details, description, branding | Yes | No side effects. Chapter 12 |
The pattern behind this table is worth internalising, because it repeats throughout the product: anything that has been signed into a credential and handed to someone cannot be edited. It can only be superseded by a new issue. Settings that only affect future issues are freely editable; settings that are baked into past ones are not.
2.7 Working in more than one organisation
One account can belong to several organisations, with a different role in each. The switcher at the top of the sidebar (Switch organisation) moves between them, and + New workspace starts another registration.
Your permissions are per organisation. Being an Owner in one says nothing about what you can do in another.
2.8 What comes next
Before you can issue — and, for many of you, before the console will even show you the Issue button — your account needs two-step verification.
→ Chapter 3 · Securing your account
Part 1, Chapter 3
3. Securing your account
Issuing a credential is not an ordinary write. A signed credential and a printed certificate are already in someone's hands the moment they go out, and they cannot be recalled — only revoked. That is why the accounts able to do it are held to a higher standard than the rest.
This chapter covers two-step verification, remembered browsers, and your password.
3.1 Who has to turn it on
Two-step verification is mandatory for the Owner of an organisation and for anyone who can issue credentials. Until they enrol, those accounts can sign in and look around, but the console blocks the actions that matter:
Two-step verification is required. "This account can issue credentials, so issuing and revoking stay blocked until you enrol." [ Enrol now ]
The security screen says the same thing: "This account can issue credentials, so two-step verification is mandatory. Issuing and revoking stay blocked until you enrol."
For everyone else it is optional and still recommended: "Even if your password leaks, no one can sign in without your authenticator app."
For Owners and Administrators — this also works in the other direction. You cannot grant someone issuing permission until their account has two-step verification on. Chapter 4 covers what that means for onboarding a new colleague.
3.2 Turning it on
Go to Account → Security and press Turn on two-step verification.
- "In your authenticator app (Google Authenticator, 1Password, …) choose 'Scan QR code'."
- "Scan the QR code below, or type the secret in by hand if scanning is not possible."
- "Enter the 6-digit code shown in the app."
Press Verify and turn on. The screen confirms Two-step verification is now on, and — if your account required it — "You can now issue and revoke credentials."
Any standard TOTP authenticator works. The QR code is labelled with your email address so you can tell it apart from other entries in the app.
3.3 Backup codes — read this part
Immediately after enrolment you are shown 10 backup codes, each in the form A1B2C-3D4E5.
"These backup codes are shown only once. They are the only way back in if you lose your authenticator. Keep them somewhere safe."
| Fact | Detail |
|---|---|
| How many | 10 |
| Shown | Once. They are not retrievable afterwards |
| Where to use | The same box as the 6-digit code, on the sign-in screen |
| Reuse | None. "Each backup code works once." |
| Running low | The security screen warns you: "# backup codes left. If you lose your authenticator you will not be able to get in, so we recommend regenerating them." |
Save them before you tick I have saved the backup codes somewhere safe. A password manager or a sealed printout in a safe are both fine; a screenshot in your photo library is not.
If you lose the authenticator and the backup codes, you cannot recover the account yourself — contact CertLink support, who can reset the second factor after verifying who you are.
3.4 When you will be asked for a code
Two different questions are being asked, and they have different answers.
Signing in asks "is this the right person?" — you enter a code once per sign-in.
Sensitive actions ask "is that person still the one sitting here right now?" — these require a recent verification even in an active session:
| Action | |
|---|---|
| Issuing credentials | Chapter 10 |
| Revoking or suspending credentials | Chapter 11 |
| Exporting recipient data | |
| Creating, rotating or revoking a signing key | Chapter 6 |
| Your browser | You are re-asked after |
|---|---|
| Ordinary browser | 15 minutes |
| Remembered browser (§3.5) | 12 hours |
Remembering a browser widens that window; it does not remove it. Twelve hours is also the length of an ordinary console session, so nothing is gained by making it longer.
3.5 Remembered browsers
When you enter a code you can tick Remember this browser for 30 days.
"On a remembered browser we will not ask for a code again for 12 hours. Do not tick this on a shared computer."
Manage them under Account → Security → Remembered browsers, where the one you are using now is labelled This browser, each entry shows when it was last used, and you can Revoke one or Revoke all.
| Behaviour | |
|---|---|
| Marker lifetime | 30 days, then it expires on its own |
| Effect | Widens the re-verification window from 15 minutes to 12 hours |
| On password reset or change | Every marker is cleared at once |
| Lost a device | "If you lost a device, revoke all of them. We will ask for a code again from then on." |
What a remembered browser is not. It is not a way in. On its own it authenticates nothing — without a live session and your password it does nothing at all. It only affects how often you are asked to re-confirm. That is why leaving one on a shared machine is untidy rather than catastrophic — but tidy is better, so do not tick it there.
3.6 Turning it off
Account → Security → Turn off, confirmed with your password.
If your account can issue credentials, the button is refused: "Accounts that can issue credentials cannot turn off two-step verification. Adjust the permissions first." The permission comes first and the second factor follows it, never the other way round.
3.7 Your password
Changing it
Account → Password → Change password, entering your current password and the new one twice.
"Changing it signs out every other device and clears every remembered browser. This browser stays signed in."
The new password must meet the same four rules as at sign-up (§1.3), and it cannot be the one you are already using — "That is the password you are already using."
Setting one for the first time
If you signed up with Google you have no password. Account → Password then shows Set a password: "You signed up with Google, so this account has no password. Set one to sign in with your email as well."
Setting one does not remove Google sign-in. Afterwards both routes work.
3.8 Your profile
Account → Profile holds the rest of your personal settings.
| Field | Notes |
|---|---|
| "Your email is your sign-in identifier and cannot be changed here." | |
| Full name | |
| Phone number | Optional |
| Country | "The country you chose at sign-up. It is separate from your language and time zone." |
| Language | "Used for the console and notification emails. It does not change the language printed on credentials already issued." |
| Time zone | "Dates and times are shown in this zone. Language and time zone are chosen separately." |
Changing the language reloads the page in the new one. Note that this is your language, not your organisation's issuing language and not the language printed on a credential — Chapter 14 sets the three side by side.
3.9 What comes next
Your account is ready and your organisation is registered. From here on the work is the organisation's: who else gets in, and what you have to build before the first credential can go out.
→ Chapter 4 · Operators and permissions
Part 2, Chapter 4
4. Operators and permissions
Most organisations do not issue with one person. The designer who lays out the certificate, the administrator who runs the programme, and the person who presses Issue are often three different people — and they should not all have the same access.
Settings → Team is where that is decided.
4.1 The six roles
| Role | In one line |
|---|---|
| Owner | Everything, including billing and signing keys. Created with the workspace |
| Administrator | Everything operational — settings, team, designs, definitions, issuing, revoking |
| Issuer | Issues credentials. Reads designs but cannot edit them |
| Designer | Builds designs. Sees no recipient data at all |
| Analyst | Read-only across credentials, recipients and analytics |
| Member | Belongs to the organisation with no console permissions |
The full 6 × 14 grid is in Appendix B. The shape of it is worth knowing now:
| Owner | Admin | Issuer | Designer | Analyst | Member | |
|---|---|---|---|---|---|---|
| Organisation settings | ● | ● | ||||
| Billing | ● | |||||
| Signing keys | ● | |||||
| Team management | ● | ● | ||||
| Edit designs | ● | ● | ● | |||
| View designs | ● | ● | ● | ● | ||
| Create/delete definitions | ● | ● | ||||
| Issue credentials | ● | ● | ● | |||
| Revoke credentials | ● | ● | ||||
| View credentials | ● | ● | ● | ● | ||
| View recipients | ● | ● | ● | ● | ||
| Export recipients | ● | ● | ||||
| Analytics | ● | ● | ● | ● |
Two things to notice. An Issuer can issue but not revoke — undoing an issue is a heavier act than making one, and it sits with Administrators and the Owner. And billing and signing keys belong to the Owner alone; not even an Administrator can touch the keys that sign your credentials.
Menus you do not have permission for are hidden, not greyed out. If a colleague says a menu is missing rather than disabled, that is the permission system working as designed — check their role rather than looking for a bug.
4.2 Inviting someone
Settings → Team → Invite a teammate. Enter the email address, choose the role, press Invite.
"Invitation sent. It expires in 7 days."
The invitation goes to that address as an email. The person opening it needs a CertLink account:
| What they see | Why |
|---|---|
| You have joined {organisation} | Success — they are in |
| Sign-in required — "Sign in as {email} — or create that account — and then accept the invitation." | They were not signed in. They can sign up first; the invitation waits |
| This invitation is for another account — "This invitation was sent to {email}. Please sign in with that account." | They are signed in as someone else. The invitation is bound to the address it was sent to |
| This invitation has expired — "Invitation links are valid for 7 days. Please ask for a new invitation." | Send a new one |
| This invitation was already used | Nothing to do |
| You are already a member | They were already in the organisation |
An invitation is tied to one email address. If a colleague's address changes, send a new invitation rather than forwarding the old mail.
4.3 The team list
Team ({count}) shows everyone, with:
| Column | |
|---|---|
| Role | Change it from here |
| Last seen | |
| Two-step verification | Enrolled / Not enrolled |
| Status | Active · Invited · Disabled |
4.4 Two rules the screen enforces
Both are printed under the list, and both will stop you at some point.
At least one Owner must remain
"· At least one owner must remain. (E-ORG-005)"
You cannot demote or remove the last Owner. To hand the organisation over, promote the new Owner first, then step down.
Keep two Owners. An organisation with a single Owner has a single point of failure for everything only an Owner can do — billing and signing keys included. Promoting a second, trusted Owner costs nothing and removes that risk.
Issuing rights require two-step verification
"· To grant issuing rights (Issuer and above) the target account must have two-step verification enrolled."
This is the constraint that most often surprises people onboarding a new colleague, so plan around it:
- Invite them as a Member (or with any non-issuing role).
- They accept, sign in, and turn on two-step verification (§3.2).
- Then you can change their role to Issuer, Administrator or Owner.
Trying to do it in the other order simply fails, and the failure is not a bug. The same rule runs in reverse: an account that can issue cannot turn two-step verification off until its permissions are reduced first.
4.5 Choosing roles well
| Situation | Role |
|---|---|
| Runs the programme, needs to fix mistakes | Administrator — issuing and revoking |
| Runs the graduation batch each term | Issuer |
| An external or in-house designer producing the layout | Designer — no recipient data reaches them |
| Reporting, audit, a manager who only reads | Analyst |
| Should be in the organisation but not in the console yet | Member |
Give Designer to anyone whose job is the artwork. It is the only role that touches designs without seeing a single recipient's name, which makes it the right answer for outside help.
4.6 What comes next
The team is in place. Now for the four things that must exist before a credential can be issued.
→ Chapter 5 · What has to be ready before you issue
Part 2, Chapter 5
5. What has to be ready before you issue
Issuing is the last step, not the first. Four things have to exist, and they have to exist in order, because each one is built on the previous.
Your dashboard tracks exactly this, under Getting started:
| Step | Where | |
|---|---|---|
| 1 | Issuer review approved | Chapter 2 — waiting on us |
| 2 | Signing key created · DID published | Chapter 6 — automatic, on approval |
| 3 | Create your first design | Chapter 8 |
| 4 | Define your first credential | Chapter 9 |
| 5 | Test issue (one to yourself) | Chapter 10 |
Each step shows Done or Not done, so the dashboard is the answer to "what is stopping me from issuing?" at any moment.
5.1 The order, and why it is that order
Approval ──► Signing key + DID (Chapter 6, automatic)
│
Custom attributes ───┤ (Chapter 7 — before designs)
▼
Design (Chapter 8)
│
▼
Credential definition (Chapter 9 — connects the design)
│
▼
Issue (Chapter 10)
Custom attributes come before designs. Only attributes that already exist can be placed on a design — the editor refuses the rest: "Attributes that are not defined cannot be placed." If you lay out a certificate first and then discover you need a field for a score or a course code, you have to go back, define it, and return to the editor. Ten minutes in Chapter 7 saves that.
The design comes before the definition, because the definition is where you connect one. A definition can be saved without a design, but then nothing renders — no PNG, no PDF, no image at all — and the issue screen will warn you.
5.2 The blocking conditions
These four are the ones that actually stop an issue. Each has an error code you can quote when asking for help:
| Condition | Message | Code |
|---|---|---|
| Organisation not approved | "Issuer review is not complete, so credentials cannot be issued yet." | E-ORG-001 |
| No active signing key | "The issuer signing key is not active." | E-CRD-009 |
| Definition not Ready to issue | The issue screen offers nothing to select | — |
| Your account has not enrolled in two-step verification | "…issuing and revoking stay blocked until you enrol." | — |
A fifth one bites later rather than at the start: an attribute placed on the design with no value stops that row with "Some attributes placed on the design have no value." (E-CRD-004). That is deliberate — a blank line on a printed certificate is never noticed until it is in someone's hands.
5.3 A test issue is part of the checklist
Step 5 is Test issue (one to yourself) — one credential, to your own email address, before the real batch.
Do it. It is the only way to see the four things that only appear at issue time: the rendered certificate as the server actually produces it, the notification email as your recipients will receive it, the claim page, and the public verification page. Every one of those is downstream of choices you made in Chapters 7–9, and none of them is visible from the editor.
Then revoke it (Chapter 11), which also teaches you what revocation looks like from the outside.
5.4 What comes next
→ Chapter 6 · Issuer identity: DID, signing keys and status lists
Part 2, Chapter 6
6. Issuer identity: DID, signing keys and status lists
Settings → Issuer identity
This is the machinery that makes a CertLink credential verifiable by someone who has never heard of you. It is created for you and mostly runs itself. Read this chapter anyway — it contains one rule that, if broken, invalidates every credential you have ever issued.
6.1 It is created automatically
Before approval the screen reads:
Issuer identity has not been created yet "The DID and signing key are created automatically once the workspace passes review."
You do not request them. When your organisation is approved, the DID is published and the first signing key generated.
6.2 Your DID
A DID is a public identifier for your organisation, of the form did:web:…:org:{slug} — which is why the workspace address you chose in Chapter 2 can never change.
Every credential you issue carries this identifier. A verifier anywhere in the world resolves it, finds your public keys, and checks the signature. No account and no contact with us is required.
The screen notes one property that matters more than it looks:
"The DID Document is a public, unauthenticated path. It keeps answering even if the organisation is suspended, so verification of existing credentials never stops."
Whatever happens to your account with us, credentials already in people's hands stay verifiable. That is the promise the whole product rests on.
6.3 Signing keys
The Signing keys table lists each key with its Key ID, Algorithm, number of Signatures, and when it was Created.
| State | Meaning |
|---|---|
| Active | Signs new credentials |
| Rotating (kept for verification) | Superseded, still needed to verify what it signed |
| Retired (kept for verification) | No longer signs; still verifies |
| Revoked | Withdrawn |
Three rules are printed under the table:
"· Private keys are never shown and cannot be exported." "· Old keys stay in the DID Document. Removing one makes every credential it ever signed fail verification." "· We recommend rotating once a year."
The one rule that matters
⚠️ An old key is not clutter. It is the only thing that can verify what it signed.
A signed credential cannot be re-signed — it is already printed, already emailed, already in a wallet. If the key that signed it disappears from your DID Document, every one of those credentials starts failing verification, and there is no way to repair them. Retired keys therefore stay published forever, which is exactly why the table distinguishes "kept for verification" from Revoked.
Rotating
Rotate key creates a new active key; the previous one moves to Rotating and keeps verifying its own credentials. Nothing already issued is affected. Once a year is the recommendation.
Revoking
Revoke key is not routine maintenance — it is what you do if a key is believed compromised. The confirmation makes you type the key ID:
"This affects verification of every credential signed with this key. Type the key ID '{kid}' to continue."
Managing keys requires the Owner role and a recent two-step verification (§3.4).
6.4 Status lists
Below the keys sit the Status lists (Bitstring Status List).
"Created automatically on the first issue. They roll over every 131,072 slots."
There are always two, and the table shows the Purpose, Slots used and Last published for each:
| Purpose | Used for |
|---|---|
| Revocation | Permanent revocation (§11.4) |
| Suspension | Temporary suspension |
They are separate on purpose. A single shared list would mean that lifting a suspension also lifts a revocation — which is not a distinction you want a bug to erase.
Every credential points at both lists from the moment it is issued, and the lists are published automatically. There is nothing here for you to operate; the screen exists so you can see it working.
6.5 What comes next
→ Chapter 7 · Custom attributes
Part 2, Chapter 7 · Settings → Custom attributes
7. Custom attributes
An attribute is a field whose value differs from one recipient to the next — a name, a score, a course code. The design is a layout; the attributes are what gets poured into it.
"Define the fields your issue data can carry. Only attributes defined here can be placed on a design or used as an upload column."
That sentence is the reason this chapter comes before Chapter 8. Everything you want on the certificate, and every column you want in your spreadsheet, has to exist here first.
7.1 Built-in attributes
Every organisation gets these. Built-in attributes "are provided to every organisation. They cannot be edited or deleted."
| Key | Holds | Masked by default |
|---|---|---|
recipient.name | The recipient's name | ● |
recipient.email | Their email address | ● |
recipient.orgName | Their organisation or affiliation | ● |
credential.issuedAt | Issue date | |
credential.expiresAt | Expiry date | |
credential.awardedDate | Date earned | |
credential.serialNo | Credential number (§9.5) | |
credential.uuid | The credential's unique identifier | |
issuer.name | Your organisation's name | |
issuer.email | Your contact address | |
achievement.name | The credential's title | |
achievement.hours | Learning hours | |
achievement.period | Programme period | |
achievement.instructor | Instructor |
The key is what you actually work with — it is what appears in the editor's attribute list and what you write inside body text as [recipient.name].
Notice that the three recipient fields are masked by default and the rest are not. That is the right default: a certificate's content is public information, while the person on it is not.
7.2 Adding your own
Add attribute opens New custom attribute.
| Field | Notes |
|---|---|
| Attribute key | "The custom. prefix is added automatically. Letters, digits and underscores, 2–40 characters." |
| Label | What people see in the console |
| Data type | Text · Number · Date · Choice |
| Choices | For Choice only. "One per line or comma-separated. At least two." |
| Sample value | "Used in the editor preview. Leave it empty and the preview shows a blank." |
| Default value | Optional |
| Required when issuing | See §7.4 |
| Mask on the public verification page | See §7.5 |
"No custom attributes yet. Add the fields only your organisation uses — a score, a course code, and so on."
7.3 The key and the type are permanent
"The key and type cannot be changed. Issue data and designs already point at this key, and changing it would break those links silently."
Silently is the important word. Nothing errors; the design simply stops finding its value, and you discover it on a printed certificate. Decide the key and the type once.
If an attribute is no longer wanted, you Deactivate it rather than deleting it — and if it is already in use the console does that for you: "It is in use, so it was deactivated instead of deleted." Deactivated attributes show as (inactive) and can be brought back with Reactivate. Past credentials keep their values either way.
7.4 Required when issuing
"Issuing is blocked when it is empty — better that than a blank certificate going out."
Mark an attribute required and a row with no value stops rather than proceeding. In a spreadsheet of 300 people the missing cell is flagged in the validation report (§10.5) with the row number, before anything is signed.
This is a deliberate trade: a stopped batch is an inconvenience, a printed certificate with a blank line is an embarrassment you cannot recall.
7.5 Masking
Mask on the public verification page — "This is the default. Turn it off and the value is visible to anyone."
The public verification page is reachable by anyone holding the link or scanning the QR code. It is meant to answer "is this credential real?", not "who received it and what was their score?".
Leave masking on unless you have a specific reason and the recipient's agreement. The column in the attribute list reads Masked or Fully visible, so you can audit the whole set at a glance.
Chapter 9 sets the default for a whole credential definition (§9.6), and the recipient can share a full-detail view themselves. Masking here is the floor, not a limit on what they can choose to show.
7.6 What comes next
→ Chapter 8 · Designing the certificate
Part 2, Chapter 8 · Designs
8. Designing the certificate
"Lay out the certificate, then connect it to a credential definition."
A design is a layout, saved independently of any particular credential. One design can serve several definitions, and a definition without a design issues no image at all.
8.1 Starting a design
New design asks for two things.
Starting point — a template, or Blank canvas ("Start from nothing and build it yourself."). Templates can be searched and filtered by All / Certificates / Badges.
Size:
| Group | Options |
|---|---|
| Certificate (print) | A4 (210 × 297 mm) · US Letter (8.5 × 11 in), each Portrait or Landscape |
| Badge (image) | Badge 600 × 600 · Badge 1000 × 1000 |
Badges are square, so there is no orientation to choose — the option disappears. A badge is not a document; it is an image that sits in a wallet, on LinkedIn, or in a profile, and it will often be displayed small. Leave generous margins.
Choose the size now. Applying a template later changes the canvas: "Applying this changes the canvas to {paper} {orientation}." and "Applying a template replaces what is on the canvas."
8.2 The editor
Three columns: tools on the left, the canvas in the middle, properties and layers on the right.
Left panel tabs:
| Tab | Contains |
|---|---|
| Templates | Full-design starting points |
| Elements | Shapes · Lines · Icons · Ribbons · Bases |
| Text | Heading · Subheading · Body text |
| Attributes | Everything from Chapter 7 |
| Images | Upload, place, or set a background |
Canvas navigation: "Ctrl + wheel to zoom · Space + drag to pan". Undo is Ctrl+Z, Redo is Ctrl+Shift+Z, Group is Ctrl+G.
8.3 Attributes — the part that makes it a certificate
Static text is the same on every copy. Attributes are what differ per recipient: "Replaced with real values when issued."
Two ways to use them:
- Place one as its own element — drag it from the Attributes tab onto the canvas.
- Mix them into body text — "You can mix attributes into body text, like [recipient.name]." So a paragraph reading
This is to certify that [recipient.name] completed [achievement.name]resolves per recipient.
While editing, an attribute shows its Sample value (§7.2), which is why setting samples is worth the seconds it takes.
"Attributes that are not defined cannot be placed." If something you need is missing, define it under Settings → Custom attributes and come back.
The editor warns before you get burned:
⚠️ "Undefined attributes: {names} — they will have no value at issue time. Define them first under Settings › Custom attributes."
Do not save over that warning. An attribute with no value stops the issue with E-CRD-004, and in the best case you find out during the validation report rather than after printing.
8.4 The verification QR code
Add verification QR code places the QR that makes a printed certificate checkable.
"Each credential's verification URL goes in automatically at issue time. Scanning the printed QR opens the public verification page."
Each credential gets its own. You place the box; the content is generated per credential.
Put one on every printed certificate. A paper certificate with no QR is a piece of paper. The QR is the entire difference between a document someone has to trust and one they can check.
8.5 Text that does not break
Names vary in length far more than layouts allow for, so every text element has an Overflow behaviour — "Keeps long names from breaking the layout."
| Option | Behaviour |
|---|---|
| Shrink to fit | Reduces the font size until it fits |
| Wrap | Breaks onto more lines |
| Clip | Cuts off the overflow |
Combine it with Fixed width (wraps or shrinks). Test with the longest name you realistically expect, not a short one.
Fonts
"Only fonts installed on the render server can be chosen."
If a font is missing you are warned: "Fonts not installed on the server: {names} — credentials will render with a fallback font." Never ignore this — the rendered output will not look like your canvas.
Images
"PNG, JPG or SVG up to 2 MB. Scripts are stripped from SVGs before saving."
Add images to the canvas, or set one as a Background image covering the whole canvas.
8.6 Preview — the only output that counts
Preview renders the design the way the server will actually produce it.
"The editing canvas is an approximation; this image is what actually gets issued." Server-rendered preview — "Identical to what is issued"
The editing canvas is a fast, interactive approximation. Fonts, text fitting and spacing can differ slightly. Check the preview before you connect a design to a definition, and check it again after any change to fonts or text sizing.
8.7 Saving and revisions
Designs save automatically (Auto-saved), and Save confirms with Saved · revision v{seq}. Unsaved changes shows when something is pending.
Each save creates a revision. Two consequences:
- The design list shows Unconfirmed for a design whose latest revision has not been confirmed.
- Every issued credential is pinned to the exact revision it was issued from. Editing a design never changes a certificate that already exists — re-rendering it years later reproduces the original.
So you can keep improving a design without disturbing anything already issued. What you cannot do is retroactively fix a certificate by editing the design; that requires revoking and re-issuing (§11.4).
8.8 What comes next
→ Chapter 9 · Defining a credential
Part 2, Chapter 9 · Credentials
9. Defining a credential
"The reusable master design for a certificate or badge. Every issue is based on one of these."
A definition is the thing itself — what the credential means, who qualifies for it, how long it lasts, how it is numbered, and which design it prints on. You create one per programme, not one per person.
Before you start. "Criteria and type cannot be changed after the first issue, so take care filling these in." The rest of this chapter explains what that costs you if you rush.
9.1 The form
New definition opens a four-step form. The step indicator reads {current} of {total} · {name}.
| Step | |
|---|---|
| 1 · Basics | What it is |
| 2 · Details | What it means, in standards terms |
| 3 · Issuing rules | Expiry, numbering, visibility |
| 4 · Design | Which layout, and whether it is ready |
9.2 Step 1 — Basics
| Field | Notes |
|---|---|
| Title | What recipients will see |
| Title (English) | Optional |
| Type | Certificate or Badge |
| Credential subtype | Completion · Attendance · Qualification · Participation · Competency · Appointment · Commendation · Other |
| Level | Beginner · Intermediate · Advanced, or Not specified |
Standard vocabulary
"This goes straight into the credential's
achievementType. It cannot be changed after issuing."
| Option | Use it for |
|---|---|
| Private certification (Certification) | A certification your organisation awards on its own authority |
| Statutory licence (License) | A licence granted under law |
| Course completion (CertificateOfCompletion) | Someone finished a course |
| Hours or credits based (Course) | Credit measured in hours or credits |
This is the single field that tells the outside world what kind of thing your credential is. A wallet, a university admissions system or an employer's HR platform reads it. Choosing "course completion" for something that is actually a licence misrepresents it to every system that ever reads it — and it cannot be corrected afterwards.
9.3 Step 2 — Details
| Field | Notes |
|---|---|
| Description | "10–2,000 characters. Maps to the standard description." |
| Criteria | "Describe what someone has to do to earn it. Maps to the standard criteria.narrative." |
| Criteria URL | A public page describing the requirements |
| Related skills or roles | "Comma-separated, up to 20" — e.g. Data analysis, SQL, Python |
| Related URL | |
| Learning hours · Programme start · Programme end · Instructor | Available to the design as attributes |
Criteria is not a marketing description
Criteria answers "what did this person actually do?". It is the field a sceptical reader looks at, and it is one of the two fields that lock after the first issue. Write it as if it will be read by someone deciding whether to believe the credential — because it will be.
Framework alignment
"Link to an external competency framework. It rides in the standard
alignmentso other institutions' systems can read what this credential means."
Add alignment, then fill in Target name, Target URL, Framework name, Classification code and Target type. Optional, and worth doing if your sector has a framework — it is what lets another institution's system understand your credential without a human reading it.
9.4 Step 3 — Expiry
| Expiry rule | Then enter |
|---|---|
| None | — |
| Fixed date | Expiry date — the same date for everyone |
| Relative to issue date | Validity period — "e.g. 30d (30 days) · 12m (12 months) · 2y (2 years)" |
Use Relative to issue date for anything issued continuously; use Fixed date when a whole cohort expires together. An expiry date earlier than the issue date is refused (E-CRD-007).
9.5 Step 3 — Credential numbers
The Credential number rule builds the serial printed on each credential, from tokens:
"Tokens: {YYYY} {YY} {MM} {DD} {YYMMDD} {####} {ORG}"
| Token | Becomes |
|---|---|
{YYYY} / {YY} | Year, 4 or 2 digits |
{MM} / {DD} | Month / day |
{YYMMDD} | Date, 6 digits |
{####} | The sequence number, zero-padded to the number of # |
{ORG} | Your workspace address |
So EHRD-{YYMMDD}-{####} produces EHRD-260817-0001.
| Setting | |
|---|---|
| Starting number | Where the sequence begins |
| Reset cycle | Daily · Monthly · Yearly · Never |
A live Preview (in {timezone}) shows the result. The time zone is your organisation's (§2.4) — that is what decides when "today" rolls over for a daily reset.
Match your existing numbering if you have one. Credential numbers end up in registries, spreadsheets and HR systems. Getting the format right on the first definition is much easier than reconciling two schemes later.
9.6 Step 3 — Visibility and notification
| Setting | |
|---|---|
| Default recipient visibility | Masked (recommended) or Show real name |
| Allow issuing more than once to the same recipient | Off by default; a duplicate is otherwise refused with E-CRD-003 |
| Let search engines index the verification page | Off by default |
| Notification message | "Shown on the claim page and in the email. Up to 500 characters." |
Default recipient visibility controls what the public verification page shows. Masked means a name appears as J*** S**** to anyone with the link. Leave it masked unless the credential is meant to be a public roll of honour and the recipients know it.
Search engine indexing is a bigger decision than it looks: turning it on can make a person's credential findable by name in a search engine, permanently. Off is the right default.
9.7 Step 4 — Design and status
| Field | |
|---|---|
| Certificate design | Pick one, or Not connected |
| Status | Draft (cannot issue) or Ready to issue |
"Every attribute placed on the chosen design must already be defined before this can be saved."
If saving fails here, the design references an attribute that no longer exists — go back to Chapter 7 or Chapter 8 and reconcile them.
A definition with Not connected can still issue, but produces no images at all. The issue screen warns: No design — no image or PDF will be produced.
Status is the switch that makes a definition available on the issue screen. Leave it Draft while you are still working.
9.8 The four statuses
| Status | Meaning |
|---|---|
| Draft | Being worked on. Cannot issue |
| Ready to issue | Appears on the issue screen |
| In use | At least one credential has been issued. Shown as In use · {count} issued |
| Archived | "Archive '{name}'? New issues will stop." Existing credentials are untouched |
A definition can only be deleted while nothing has been issued from it — "Delete the '{name}' definition? It can only be deleted if nothing was issued from it." (E-CRD-002). Once it is In use, Archive is how you retire it.
9.9 What locks after the first issue
Credentials have already been issued from this definition "Criteria and type can no longer be changed — if they diverged from what was already issued, the credentials would stop meaning what they say. Create a new definition instead."
| After first issue | |
|---|---|
| Type, Standard vocabulary, Criteria | Locked |
| Description, skills, URLs, instructor | Editable — applies to future issues |
| Expiry rule, numbering, visibility, notification message | Editable — applies to future issues |
| Connected design | Editable — applies to future issues |
The dividing line is the same one from Chapter 2: what a credential asserts cannot be rewritten once it has been signed and sent. If the meaning of a programme genuinely changes, that is a new definition, not an edit — and having both is the honest record.
9.10 What comes next
Everything is in place. Part 3 is the issue itself.
→ Chapter 10 · Issuing credentials
Part 3, Chapter 10 · Issue
10. Issuing credentials
"Issuing is hard to undo. Check the summary before you run it."
That warning is on the screen for a reason. A credential that has been issued is signed, rendered, stored and — if you asked for it — emailed. None of that can be taken back. A mistake is corrected by revoking and re-issuing (Chapter 11), never by editing.
This chapter is the one to read slowly the first time.
10.1 Before the screen will let you in
| Blocker | What you see |
|---|---|
| Organisation not approved | "Issuer review is not complete, so nothing can be issued yet." → "Check the review status on the dashboard." |
| No definition ready | No credential definition is ready to issue — "Create a definition and set its status to 'Ready to issue'." |
| Your account has no two-step verification | The banner from §3.1 |
| No active signing key | E-CRD-009 |
10.2 Choosing what to issue
Under What to issue, pick a Credential definition. The screen then tells you what that definition will actually do, as a row of labels:
| Label | Meaning |
|---|---|
| Design connected | Images and PDF will be produced |
| No design — no image or PDF will be produced | The credential is valid and verifiable, but there is nothing to print or share as an image |
| Number rule {rule} / No credential number | §9.5 |
| Duplicates allowed / Duplicates blocked | Whether the same recipient can receive this twice |
| {remaining} of {total} left in quota | How many issues you have left |
Read that row every time. It is the cheapest possible check that you selected the definition you meant to.
Then choose the mode:
| Mode | Use it for |
|---|---|
| One at a time | A single recipient, a correction, a test issue |
| Bulk upload | A cohort, from a spreadsheet |
10.3 One at a time
Recipient
| Field | Required |
|---|---|
| Name | ● |
| ● | |
| Mobile | ○ |
| Organisation | ○ |
Below that, Custom attributes — every attribute the definition needs (Chapter 7). Anything marked required must be filled in, or the issue is refused rather than producing a certificate with a gap in it.
Issue settings
| Field | Notes |
|---|---|
| Issue date | "Past dates are allowed (backdating); future dates are not" |
| Award date | "Defaults to the issue date" |
| Credential number | "Leave blank to generate from the rule" |
| Send the notification email | On by default |
On backdating. Issuing a certificate for a course that finished last month is legitimate, and the issue date is what the certificate will say. Future dates are refused — a credential cannot claim to have been issued at a time that has not happened.
On typing a credential number yourself. Leave it blank unless you are reproducing a number from an existing register. The automatic sequence cannot collide; a hand-typed one can (
E-CRD-010).
Press Issue now.
10.4 Bulk upload — step 1, the template
"Download the template — its columns match this credential definition — fill it in, then upload it."
Download upload template (.xlsx) produces a spreadsheet whose columns are generated for this definition. Always download it fresh rather than reusing an old file — if the definition's attributes have changed, the columns have changed with them.
| Limit | |
|---|---|
| Formats | XLSX, or CSV saved as UTF-8 with BOM |
| Rows | 5,000 per upload (E-CRD-011 beyond that) |
| File size | 10 MB |
Columns the definition does not know about are not an error; they are dropped:
Some columns are not defined — "{columns} — these columns are ignored. Define them as custom attributes in settings first if you need them."
Read that message when it appears. A column that is silently ignored is exactly how a score or a course code goes missing from 300 certificates.
10.5 Bulk upload — step 2, the validation report
Nothing is issued yet. The report classifies every row:
| {count} rows | Total read from the file |
| Valid {count} | Will be issued |
| Warnings {count} | Will be issued — check them anyway |
| Errors {count} | Will be skipped |
Problems are listed with Row, Name, Column and Reason, so you can fix the spreadsheet and upload it again with Cancel and upload again.
If the file is larger than your remaining quota:
This exceeds your remaining quota (E-CRD-012) — "{rows} to issue · {remaining} left in quota"
Errors are skipped, not fixed. You can proceed with errors present, and those rows simply do not get issued. That is often what you want for a few bad email addresses — but it means the batch you thought covered 300 people covered 287. The final summary tells you how many were excluded; read it.
10.6 Bulk upload — step 3, the final check
Final check before issuing summarises what is about to happen:
| To issue | {count} people |
| Credential | Which definition |
| Notification | {count} emails or Not sending |
| Quota | "using {used} of {remaining}" |
| Excluded | {count} (errors) |
Two confirmations are required:
- Tick I have checked the above.
- Type the number of recipients — "Enter {count}."
Then Issue {count}, skipping rows with errors.
Why you have to type the number. A checkbox can be clicked without being read. Typing the count forces you to have looked at it — and the number is the one thing that catches the most expensive mistake, which is issuing to the wrong file. If the figure surprises you, stop.
10.7 While it runs
Issuing — {done} of {total} "The job keeps running if you close this page. Results appear in the issue history when it finishes."
The page streams progress live (Live). If the connection drops it says so — "(live updates disconnected — use refresh below)" — which affects the display only, never the job.
The Processing log shows each row as Issued or Failed, with a Progress bar and Total / Succeeded / Failed counts.
Issuing takes real time. Each credential is assembled, signed, rendered into several images and a PDF, written to the ledger and queued for email. Tens of seconds per credential under load is normal — close the page and come back.
10.8 When it finishes
| Outcome | |
|---|---|
| Done — {count} issued | |
| Partly failed — {ok} succeeded, {fail} failed | |
| Issuing failed |
⚠️ "Anything already signed and stored is not rolled back. Revoke what was issued in error."
A partly failed batch is not undone. The successful rows are real credentials — signed, stored, possibly already emailed. There is no "cancel the batch" button, and there could not be one.
Failed rows ({count}) lists what did not go through, with an Attempts count. Retry the failures re-queues only those — "{count} queued for retry" — leaving successful rows untouched. Most failures are transient; ones that persist usually point at missing attribute values or a malformed email address.
From here, View issue history or Issue more.
If you submit twice
This request was already accepted — "The same request is already done or in progress. Nothing was issued twice."
Double-clicking, or resubmitting after a browser reload, does not double-issue. This is guaranteed, not best-effort.
10.9 What comes next
→ Chapter 11 · After issuing
Part 3, Chapter 11 · Issue history
11. After issuing
"{count} credentials issued. Recipient details are shown masked."
Everything you have issued lives here — what state it is in, whether the recipient collected it, whether the notification arrived, and how much it has been looked at. It is also where mistakes get corrected.
Note the masking: recipient details are masked in your own console too. Seeing a full list of names is a separate permission (export), and the default view does not need it.
11.1 Finding a credential
| Control | |
|---|---|
| Search | Recipient name or credential number |
| Filter | All credentials — narrow to one definition |
| Filter | Unclaimed only |
Unclaimed only is the useful one for follow-up: those are people whose credential was issued but who have not opened it yet.
| Column | |
|---|---|
| Number | The credential number (§9.5) |
| Issued / expires | |
| Notification | Sent or Send failed |
| Activity | "{views} views · {shares} shares · {downloads} downloads" |
11.2 The five states
| State | Meaning |
|---|---|
| Issued | Live. The recipient has not opened it yet |
| Claimed | The recipient has collected it |
| Suspended | Temporarily invalid — reversible |
| Revoked | Permanently invalid — not reversible |
| Expired | Past its expiry date (§9.4). Automatic |
11.3 Resending the notification
Resend sends the notification email again, and the button confirms with Resent.
Use it when the column shows Send failed, or when a recipient says nothing arrived. Check the address first — resending to the same wrong address will fail the same way. A wrong address cannot be edited on an issued credential; that needs a revoke and re-issue.
11.4 Revoking and suspending
Revoke opens Revoke credential, which states the stakes before anything else:
"Permanent revocation cannot be undone. If you revoke by mistake you must re-issue under a new UUID. The verification page switches to 'Revoked' immediately and downloads and sharing are blocked."
Choose the type
| Type | |
|---|---|
| Permanent revocation (cannot be undone) | The credential should never have existed, or is withdrawn for good |
| Suspension (can be lifted) | Temporarily invalid — under investigation, pending a renewal, a fee unpaid |
When in doubt, suspend. Suspension answers the same question to a verifier — this credential is not currently valid — and it can be lifted with Unsuspend. Revocation cannot. The two use separate mechanisms internally (§6.4) precisely so that lifting one never touches the other.
Record why
| Field | |
|---|---|
| Reason | Issuing error · Fraudulently obtained · Disqualified · Recipient request · Other |
| Details | "10–500 characters. Recorded in the audit log." |
| Show the reason on the verification page | Hidden by default |
| Notify the recipient |
Write the details as if someone will read them in two years without you in the room — because that is what an audit log is for.
Show the reason on the verification page is off by default, and should usually stay off. "This credential was revoked" is a fact about the credential; "revoked because the holder was found to have falsified attendance" is a statement about a person, published to anyone with the link. Turn it on only when the reason is neutral — a re-issue after an administrative error, say.
Confirm
Confirm — "To continue, type '{name}' exactly."
Then Revoke. The public verification page changes immediately, and downloads and sharing stop.
A credential that is already revoked cannot be revoked again (E-CRD-006).
11.5 Correcting a mistake
There is one procedure, and it is the same for a misspelt name, a wrong date and a wrong recipient:
- Revoke the credential, reason Issuing error, with the details recorded.
- Issue a new one with the correct data (Chapter 10).
The new credential has a new identifier. The old one stays in the history as revoked — the record shows what happened rather than pretending it did not.
Why there is no edit button. The credential has been signed, and it has already been downloaded, printed, emailed or added to a wallet. Editing the copy in our database would leave the copy in the recipient's hands saying something different — and the one in their hands is the one a verifier is holding. A record that can be quietly changed after the fact is worth nothing, which is the whole point of the product.
11.6 What the recipient sees
| You do | They see |
|---|---|
| Issue | A notification email, then a claim page, then the credential in their wallet |
| Resend | The same email again |
| Suspend | The verification page reports it as not currently valid |
| Revoke | Revoked, immediately. Downloads and sharing are blocked |
| Revoke with Notify the recipient | An email as well |
Verify on each row opens the public verification page exactly as an outsider sees it. Use it after your test issue (§5.3) — it is the fastest way to check that masking, the design and the issuer details all look the way you intended. Chapter 13 covers that page in full.
11.7 What comes next
→ Chapter 12 · Organisation settings
Part 3, Chapter 12 · Settings
12. Organisation settings
Four tabs:
| Tab | Covered in |
|---|---|
| General and branding | This chapter |
| Issuer identity | Chapter 6 |
| Team | Chapter 4 |
| Custom attributes | Chapter 7 |
Everything here needs the settings permission — Owner or Administrator (§4.1).
12.1 Basics
| Field | Notes |
|---|---|
| Organisation name | "Changing this does not affect credentials already issued — they keep the name they were issued under." |
| Organisation name (English) | |
| Organisation type | Institution · Association · School · Company · Non-profit |
| Primary domain | "Changing it triggers another review." |
| About the organisation | Up to 500 characters |
On renaming. Credentials issued before the change keep the old name, permanently. This is correct, not a limitation: a certificate should say who issued it at the time. If your organisation has been renamed, the historical record showing the former name is the accurate one.
On changing the domain. It puts your organisation back into review. Expect the badge to return to Under review and issuing to pause (
E-ORG-001), so do not do it the week you have a graduation batch to run.
12.2 Issuer branding
| Field | Notes |
|---|---|
| Logo URL | "Appears on credentials and the verification page. Changes apply to future issues only; existing images are not re-rendered." |
| Seal image URL | Your seal or stamp |
| LinkedIn organisation ID | "Without it, the 'Add to LinkedIn' button is hidden from recipients." |
The logo rule is the same rule as everywhere else: it changes the future, not the past. Images already rendered are not regenerated, because they are already in recipients' hands. If a rebrand must reach existing credentials, that is a revoke-and-re-issue decision (§11.5), not a settings change.
The LinkedIn organisation ID is worth setting. It is the difference between a recipient adding your credential to their LinkedIn profile attributed to your organisation, and not being offered the option at all.
12.3 Contact and formats
| Field | Notes |
|---|---|
| Contact name · Contact phone · Contact email | Shown to recipients and on your public issuer page (§13.4) |
| Time zone | "Dates on issued credentials are frozen using the setting in force at the time of issue." |
| Date format | YYYY-MM-DD · YYYY.MM.DD · DD/MM/YYYY |
| Issuing language | See below |
The time zone is not a display setting. It decides issue and expiry dates and when a daily or monthly credential number resets (§9.5). Because each credential freezes the setting in force when it was issued, changing it now can leave new credentials out of step with old ones. Set it once, at registration, and leave it.
Issuing language
"The default language for issued credentials and notification emails. A recipient's own language setting wins over it. The console language is chosen per person in account settings."
Three different languages are in play, and confusing them is the most common misunderstanding in the product:
| Set where | Affects | |
|---|---|---|
| Issuing language | Here | Credentials and notification emails, by default |
| Recipient's language | Their own account | Overrides the above for them |
| Your console language | Account → Profile (§3.8) | Only your own screens and emails |
And a fourth thing that is not a setting at all: the language already printed on an issued credential. It is fixed at the moment of issue and cannot be changed afterwards — same rule as the design revision and the issuer name. Chapter 14 lays all of this out.
12.4 What can be changed, and what it costs
| Change | Effect on existing credentials | Other consequence |
|---|---|---|
| Organisation name | None — they keep the old name | |
| Logo, seal | None — not re-rendered | |
| LinkedIn ID | Immediate for everyone | |
| Contact details | Immediate for everyone | |
| Date format | Display only | |
| Issuing language | Future issues only | |
| Primary domain | None | Triggers a new review |
| Time zone | None | New issues may not line up with old ones |
| Workspace address | — | Cannot be changed (§2.3) |
12.5 What comes next
That is the whole issuing workflow. Part 4 covers what your recipients and verifiers see, how languages fit together, and what to do when something goes wrong.
→ Chapter 13 · What recipients and verifiers see
Part 4, Chapter 13
13. What recipients and verifiers see
You have been working in the console. Everyone else meets your credentials somewhere else — in an email, on a claim page, in a wallet, or on a public verification page they reached by scanning a QR code on a piece of paper.
This chapter is a tour of those screens from the outside. You cannot configure most of it, but you decide what it says, and you should know what your choices produce.
13.1 The recipient's journey
Notification email ──► Claim page ──► Badge wallet
│
└──► Download PDF / image, share, verify
No account is required for the first two steps: "You can download, share and verify without creating an account." An account is only needed to keep credentials in a wallet.
13.2 The claim page
The link in the notification email opens a page headed Congratulations, with the recipient's name and You have received "{name}", the issue date, the credential number, and the rendered image.
From there:
| Action | |
|---|---|
| Keep it in my wallet | Requires an account |
| Download PDF · Download image | The full-detail version, real name included |
| View verification page | The public page (§13.3) |
| Situation | What they see |
|---|---|
| Link older than 30 days | This claim link has expired — "Claim links are valid for 30 days. Please ask the issuer to send a new one." → use Resend (§11.3) |
| An older link, after you resent | This link can no longer be used — "Please use the newest link that was sent to you." |
| You revoked it | This credential was revoked by the issuer · "Downloading and sharing are blocked." |
| It has expired | "The fact that it was issued remains valid. You can still view and download it." |
Expiry is not revocation. An expired credential is an accurate historical record — the person did earn it. The wording above is deliberate, and it is why expiry never blocks a download while revocation always does.
13.3 The public verification page
This is the page behind the QR code and behind /v/… links. No sign-in, ever — a verification that required an account would not be a verification.
The headline is one of:
| This credential is valid | |
| This credential has expired | |
| This credential has been revoked | With the date, and the reason if you published it (§11.4) |
| This credential is suspended | |
| Verification failed | The signature did not check out |
| Credential not found |
Under Verification details, four independent checks, each Pass / Fail / Needs checking:
| Check | Question |
|---|---|
| Signature valid | Has the content been altered since it was signed? |
| Issuer verified | Does the issuer resolve to a real, published identity? |
| Not revoked | Does the issuer's status list still accept it? |
| Within validity period | Is it in date? |
Then the content: Issuer, Issued on, Expires on, Credential number, Learning hours, About this credential, Criteria, Related skills and Framework alignment — all of it coming from the definition you wrote in Chapter 9. This is where a well-written Criteria earns its keep.
Actions available to a visitor: Copy link, Share on LinkedIn, Share on X, Print, and View source (JSON).
The PDF is not public. A visitor sees Only the recipient can download the PDF — "Download it from the link in the notification email, or from your badge wallet." The public page masks the recipient's name, so serving the real-name PDF from the same link would make the masking pointless.
Technical details
A collapsible Technical details · raw data section exposes the standard, the credential ID, the issuer DID, the signature, the status list, the raw VC, and downloads for the JSON and the signed JWT.
"Anyone can verify this credential independently with the public key in the DID Document above. Feeding the JWT to an external verifier gives the same result."
That sentence is the product's central claim. Your credentials do not depend on CertLink being trusted, or even present — they can be checked by anyone, with standard tools.
13.4 What the recipient controls
In their wallet, under Visibility — "You decide how much of your information the verification page shows."
| Setting | Options |
|---|---|
| Name display | Masked (A\ Rahman)* — the default — or Show in full |
| Allow search engines | "When off, the verification page stays out of search results. The link keeps working." |
Your definition sets the ceiling, not the recipient's preference:
| If your definition says | They see |
|---|---|
| Masked (recommended) as default | They may still choose Show in full for themselves |
| Indexing not allowed | "The issuer marked this credential private, so indexing cannot be allowed." |
| Pseudonymisation required | "The issuer requires pseudonymisation, so this cannot be made public." |
So §9.6 is not merely a default — it is the boundary of what a recipient is allowed to publish about their own credential. Set it thoughtfully in both directions: too open and you have published people's names by default; too closed and a graduate cannot put their own achievement on a CV.
13.5 The badge wallet
Badge wallet lists everything a recipient holds, with a summary — "{total} total · {valid} valid · {expired} expired · {revoked} revoked" — search, filters, and an Expires within 30 days flag.
Credentials from every issuer sit side by side. Yours is one entry among others, which is worth remembering when you design one: the badge image is what makes it recognisable at a glance.
13.6 Your public issuer page
app.certlink.io/issuer/{slug} is your organisation's public profile, and it is where someone goes to answer "is this issuer real?".
| Section | Shows |
|---|---|
| Trust badge | ✓ Reviewed issuer, or ⚠ This issuer has not completed review yet |
| Review status | Complete ({when}), or "Not complete — signatures on credentials from this issuer still verify, but the organisation itself has not been confirmed." |
| Domain check | ✓ ownership of {domain} confirmed, or not confirmed |
| Joined · Credentials issued | |
| Website · Contact | From §12.3 |
The page carries no advertising and no promotional content — it exists to answer one question neutrally. Keep your contact details current: this is where someone who doubts a credential will try to reach you.
13.7 Looking up a credential by number
app.certlink.io/check — Look up by credential number: "Check a credential by its number — no sign-in needed."
This is the fallback when someone has a paper certificate with a smudged QR code, or a number in a spreadsheet and nothing else. Point people here. It is also a good argument for printing the credential number in readable text alongside the QR.
13.8 What comes next
→ Chapter 14 · Languages
Part 4, Chapter 14
14. Languages
CertLink runs in five languages:
English · Bahasa Melayu · 中文 · 日本語 · 한국어
English is the default. Nobody sees anything else until they choose it.
The confusion in this area is not about which languages exist. It is that four different things have a language, they are set in four different places, and only three of them can ever be changed.
14.1 The four
| # | What | Set where | Affects | Changeable? |
|---|---|---|---|---|
| 1 | Your console language | Account → Profile (§3.8) | Your screens, and emails sent to you | Yes, any time |
| 2 | Your organisation's issuing language | Settings → Contact and formats (§12.3) | Credentials and recipient notifications, by default | Yes — future issues only |
| 3 | The recipient's language | Their own account | Overrides #2 for that person | Theirs, not yours |
| 4 | The language printed on an issued credential | Fixed at the moment of issue | That credential, forever | No |
1 · Your console language
"Used for the console and notification emails. It does not change the language printed on credentials already issued."
Per person. Changing yours does nothing to your colleagues, your organisation, or anything you have issued. Language and time zone are chosen separately — you can read the console in English while seeing times in your own zone.
2 · Your organisation's issuing language
"The default language for issued credentials and notification emails. A recipient's own language setting wins over it. The console language is chosen per person in account settings."
This is the default for what goes out. Change it and the next credential you issue follows the new setting; everything already issued is untouched.
3 · The recipient's language
If a recipient has chosen a language on their own account, their notification email arrives in it — their preference beats your default. There is nothing to configure and nothing you can override.
4 · The language printed on the credential
This is the one that catches people.
Each credential records the language it was issued in, alongside the design revision and the signing key. It is what makes a credential reproducible years later — but it also means the language etched into a certificate cannot be corrected. The PNG has been printed and framed; the signed credential is in a wallet.
If a cohort went out in the wrong language, the only remedy is the one from §11.5: revoke and re-issue.
Check the language before a large batch, not after. It is on the same list as checking the recipient count (§10.6) — cheap before, impossible after.
14.2 What the public verification page does
The verification page follows the visitor's language, because a verifier could be anyone, anywhere. But the credential's own content does not move:
"This credential was issued in {language}. The interface follows your language, while the credential content and attachments stay in the language it was issued in."
So an employer in Kuala Lumpur reading a credential issued in Korean gets the page furniture — the headings, the check results, the buttons — in their own language, and the credential's title, criteria and certificate image exactly as they were issued. Which is correct: translating the content would mean showing something other than what was signed.
14.3 Practical guidance
| Situation | Do this |
|---|---|
| Recipients in one country, all reading one language | Set the issuing language to it, once |
| A mixed cohort | Leave the issuing language at the common one. Recipients who have set their own get their notifications in it automatically |
| You need certificates themselves in two languages | Two credential definitions with two designs. The printed text lives in the design (Chapter 8), and a design is a fixed layout, not a translated one |
| Working with an overseas partner institution | Set Title (English) (§9.2) and Organisation name (English) (§12.1) |
A design is not translated. The words you type into a design — headings, body text, the phrase around
[recipient.name]— are part of the layout. They render exactly as typed, in every language. If you need a Malay certificate and an English certificate, that is two designs.
14.4 What comes next
→ Chapter 15 · Announcements, FAQ and support
Part 4, Chapter 15
15. Announcements, FAQ and support
15.1 Announcements
Announcements in the sidebar lists notices from CertLink — maintenance windows, changes that affect issuing, new capabilities.
Important ones are marked Important and also appear at the top of your dashboard: "New announcements also appear at the top of the dashboard." A newly published notice can pop up once when you open the console; Close dismisses it and it stays in the list.
Check announcements before a large batch. A scheduled maintenance window is exactly the kind of thing you want to know about before, not during, a graduation run.
15.2 Frequently asked questions
Frequently asked questions is CertLink's own FAQ, inside the console, organised by category:
| Category | |
|---|---|
| Issuing | |
| Design | |
| Verification and sharing | |
| Accounts and permissions | |
| Pricing and plans | |
| Other |
Where an entry exists in more than one language you can switch between View in Korean and View in English.
The FAQ is maintained centrally, so it reflects the current behaviour of the product — worth checking before raising a question, and worth checking after an announcement about a change.
15.3 Getting help
"Please reach out to support with any questions."
Use the contact form at https://certlink.io/contact.
What to include
Support can answer far faster with a few specifics. From Chapter 16's table, the useful ones are:
| Include | Why |
|---|---|
The error code (E-CRD-012, E-ORG-001, …) | It identifies the exact condition, not a guess at it |
| Your workspace address | Which organisation |
| The credential number or the batch, if it concerns an issue | Locates the record |
| What you expected to happen | Distinguishes a fault from a rule working as designed |
| The time it happened, with your time zone | Matches it to the logs |
Do not send recipient personal data in a support request unless you are asked for it. Credential numbers identify the record without identifying the person.
15.4 What comes next
→ Chapter 16 · When something goes wrong
Part 4, Chapter 16
16. When something goes wrong
Most problems in CertLink are a rule working as designed rather than a fault. This chapter lists the ones people actually hit, what causes them, and what to do.
16.1 "I cannot issue"
Work down this list. It is ordered by how often each one is the answer.
| # | Check | If that is it |
|---|---|---|
| 1 | Does your account have two-step verification on? | The banner from §3.1 is showing. Enrol (§3.2) |
| 2 | Is the organisation Approved? | E-ORG-001 — the dashboard badge says Under review. Wait, or check §2.5 |
| 3 | Is there a definition set to Ready to issue? | No credential definition is ready to issue — set the status in step 4 of the form (§9.7) |
| 4 | Is there an Active signing key? | E-CRD-009 — see §6.3 |
| 5 | Does your role include issuing? | The menu is not there at all. Owner, Administrator and Issuer can issue (§4.1) |
| 6 | Is there quota left? | E-CRD-012 |
16.2 "A menu is missing"
Menus you do not have permission for are hidden, not disabled. A missing menu is a role question, not a bug — check Settings → Team (§4.1).
The common surprises:
| Missing | Because |
|---|---|
| Issue | The role has no issuing permission — or two-step verification is not enrolled |
| Revoke on a history row | Issuers can issue but not revoke. That is Administrator and Owner |
| Settings → Issuer identity actions | Signing keys are Owner-only |
| Everything | The role is Member, which has no console permissions |
16.3 "I cannot give a colleague issuing rights"
Their account has not enrolled in two-step verification. The order has to be: invite → they enrol → you raise the role (§4.4).
16.4 "The spreadsheet will not go through"
| Symptom | Cause | Fix |
|---|---|---|
| Some columns are not defined | A column the definition does not know about | Define it as a custom attribute (§7.2), or ignore the notice if the column is genuinely surplus |
| Rows in Errors | Missing required values, malformed emails, bad dates | Fix the file and Cancel and upload again |
E-CRD-005 | The file format is not readable | Save as XLSX, or CSV as UTF-8 with BOM |
E-CRD-011 | More than 5,000 rows | Split the file |
E-CRD-012 | More rows than remaining quota | |
E-CRD-003 | The same recipient already has this credential | Enable Duplicates allowed on the definition (§9.6), or remove the row |
| Columns do not match | The template was reused from an older version of the definition | Download the template again (§10.4) |
16.5 "No image or PDF was produced"
The definition has no design connected. The issue screen said No design — no image or PDF will be produced before you ran it. The credential itself is valid and verifiable; it just has no picture.
Connect a design (§9.7) and issue again for future recipients. Existing ones need a revoke and re-issue (§11.5).
16.6 "A row failed with E-CRD-004"
"Some attributes placed on the design have no value." — the design places an attribute that this row has no value for.
| Look at | |
|---|---|
| The design | Does it place an attribute you have since deactivated? (§7.3) |
| The spreadsheet | Is the column present but empty for that row? |
| The attribute | Is it marked Required when issuing? (§7.4) |
This one is a feature. The alternative is a certificate with a blank where a name should be.
16.7 "The certificate does not look like the editor"
Check the Preview (§8.6) — "The editing canvas is an approximation; this image is what actually gets issued."
| Symptom | Cause |
|---|---|
| Different font | The font is not installed on the render server. The editor warns: "Fonts not installed on the server: {names}" |
| Long names overflow or shrink oddly | The Overflow behaviour setting (§8.5) |
| The QR is missing | No Add verification QR code element on the design (§8.4) |
16.8 "The notification email did not arrive"
| Check | |
|---|---|
| The Notification column in the history | Sent or Send failed (§11.1) |
| Was Send the notification email ticked at issue time? | §10.3 |
| The recipient's spam folder | |
| The address itself | A wrong address cannot be edited — that needs a revoke and re-issue (§11.5) |
If it shows Sent and the recipient still has nothing, Resend (§11.3), then check the address character by character.
16.9 "A recipient says their claim link does not work"
| What they see | Meaning |
|---|---|
| This claim link has expired | Older than 30 days. Resend |
| This link can no longer be used | They opened an older email. The newest one is the live link |
| This credential was revoked by the issuer | It was revoked (§11.4) |
16.10 "I revoked the wrong credential"
It cannot be undone. Issue a replacement (§11.5); the new one has a new identifier and the revoked one stays in the history as a record of what happened.
If you had chosen Suspension instead, Unsuspend would have reversed it — which is the reason for §11.4's advice to suspend when in doubt.
16.11 Error codes
Quote the code when you contact support (§15.3).
Sign-in and accounts
| Code | Message |
|---|---|
E-AUTH-001 | That email or password is not correct. |
E-AUTH-002 | Sign-in attempts are temporarily limited. Please try again shortly. |
E-AUTH-003 | Your email is not verified yet. |
E-AUTH-004 | This request is not valid. (An expired or already-used link) |
E-AUTH-005 | That email is already registered. |
E-AUTH-006 | That two-step verification code is not correct. |
E-AUTH-007 | This account is locked. Please check the email we sent you. |
E-AUTH-008 | This action needs you to verify again. (The 15-minute window, §3.4) |
E-AUTH-403 | You do not have access. |
Organisation
| Code | Message |
|---|---|
E-ORG-001 | Issuer review is not complete, so credentials cannot be issued yet. |
E-ORG-002 | That workspace address (slug) is already taken. |
E-ORG-003 | We could not confirm ownership of the domain. |
E-ORG-004 | This organisation is suspended. |
E-ORG-005 | The last owner cannot leave. |
Credentials and issuing
| Code | Message |
|---|---|
E-CRD-001 | A required field is missing. |
E-CRD-002 | It cannot be deleted because credentials have been issued from it. |
E-CRD-003 | This credential has already been issued to the same recipient. |
E-CRD-004 | Some attributes placed on the design have no value. |
E-CRD-005 | The spreadsheet format is not correct. |
E-CRD-006 | This credential has already been revoked. |
E-CRD-007 | The expiry date is earlier than the issue date. |
E-CRD-008 | Signing failed. Please try again shortly. |
E-CRD-009 | The issuer signing key is not active. |
E-CRD-010 | That credential-number rule is duplicated. |
E-CRD-011 | This exceeds the 5,000-row limit for a single upload. |
E-CRD-012 | This exceeds the number of credentials left in your quota. |
Verification
| Code | Message |
|---|---|
E-VER-001 | No such credential exists. |
E-VER-002 | The signature is not valid. |
E-VER-003 | This credential has been revoked. |
E-VER-004 | This credential has expired. |
E-VER-005 | This credential format is not recognised. |
General
| Code | Message |
|---|---|
E-CMN-001 | That request is not valid. |
E-CMN-002 | The file is larger than allowed. |
E-CMN-003 | That file type is not supported. |
E-CMN-004 | Too many requests. |
E-CMN-005 | A temporary error occurred. Please try again shortly. |
16.12 Anything else
If a screen shows a message that is not in this chapter, or something behaves in a way this manual does not describe, contact support (§15.3) with the code, the time and your workspace address.
CertLink · Issuer Manual
Appendices
Appendix A · Glossary
| Term | Meaning |
|---|---|
| Workspace | One issuing organisation. An account can belong to several (§2.7) |
| Workspace address | The short identifier in your console URL. Baked into the DID and permanent (§2.3) |
| Credential definition | The reusable master for a certificate or badge — what it means, how long it lasts, how it is numbered (Chapter 9) |
| Design | A layout, saved separately and connected to a definition (Chapter 8) |
| Revision | A saved version of a design. Each issued credential is pinned to the revision it was issued from (§8.7) |
| Attribute | A field whose value differs per recipient. Built-in or custom (Chapter 7) |
| Issue | Producing a credential for a recipient: assemble, sign, render, store, notify (Chapter 10) |
| Claim | The recipient opening their credential for the first time (§13.2) |
| Credential number | The human-readable serial printed on the credential (§9.5) |
| Revocation | Permanently invalidating a credential. Cannot be undone (§11.4) |
| Suspension | Temporarily invalidating a credential. Can be lifted (§11.4) |
| DID | A public identifier for your organisation, of the form did:web:…:org:{slug}, written inside every credential you issue (§6.2) |
| DID Document | The public document a verifier reads to find your signing keys. Answers without authentication, always (§6.2) |
| Signing key | The key pair that signs your credentials. Retired keys stay published forever (§6.3) |
| Status list | The published list a verifier checks for revocation or suspension. There are two, kept separate (§6.4) |
| Verifiable Credential (VC) | The signed, machine-readable form of a credential |
| Open Badges 3.0 | The 1EdTech standard CertLink conforms to. It is why another organisation's system can read your credential without an agreement with us |
| Quota | How many credentials your plan allows |
Appendix B · Roles and permissions
Six roles, fourteen permissions.
| Permission | Owner | Administrator | Issuer | Designer | Analyst | Member |
|---|---|---|---|---|---|---|
| Manage organisation settings | ● | ● | ||||
| Manage billing | ● | |||||
| Manage signing keys | ● | |||||
| Manage the team | ● | ● | ||||
| Edit designs | ● | ● | ● | |||
| View designs | ● | ● | ● | ● | ||
| Create and edit definitions | ● | ● | ||||
| Delete definitions | ● | ● | ||||
| Issue credentials | ● | ● | ● | |||
| Revoke credentials | ● | ● | ||||
| View credentials | ● | ● | ● | ● | ||
| View recipients | ● | ● | ● | ● | ||
| Export recipient data | ● | ● | ||||
| View analytics | ● | ● | ● | ● |
Two-step verification is mandatory for the Owner and for any role that can issue credentials — Owner, Administrator and Issuer (§3.1, §4.4).
These actions require a recent re-verification even inside an active session — 15 minutes on an ordinary browser, 12 hours on a remembered one (§3.4):
- Issue credentials
- Revoke credentials
- Export recipient data
- Manage signing keys
At least one Owner must always remain (E-ORG-005).
Appendix C · Spreadsheet upload columns
For bulk issuing (§10.4).
The safe way
Download the template from the definition you are about to issue, and do not rename its column headers. The template is generated for that definition — its custom-attribute columns match the attributes that definition needs. A template saved from a different definition, or from before an attribute was added, will not line up.
The template contains two sheets: the data sheet, and a guidance sheet naming the credential and listing the required columns.
File limits
| Formats | .xlsx, or .csv saved as UTF-8 with BOM |
| Rows | 5,000 per upload (E-CRD-011) |
| File size | 10 MB (E-CMN-002) |
Columns
Column order does not matter — headers are matched by name.
| Column | Required | Notes |
|---|---|---|
| Recipient name | ● | Missing this column fails the whole file (E-CRD-005) |
| Recipient email | ● | Missing this column fails the whole file (E-CRD-005) |
| Mobile | ○ | |
| Organisation | ○ | |
| Award date | ○ | Defaults to the issue date |
| Credential number | ○ | Leave blank to generate from the rule (§9.5) |
| One column per custom attribute | Depends | Required if the attribute is marked Required when issuing (§7.4) |
Custom-attribute columns are matched by the attribute's label, or by its full key (custom.something).
Header names the upload recognises
| Maps to | Accepted headers |
|---|---|
| Recipient name | Name · name · 이름 · 성명 · 수령자명 |
| Recipient email | Email · email · 이메일 · 메일 |
| Mobile | Mobile · phone · 휴대폰 · 전화번호 · 연락처 |
| Organisation | Organisation · orgName · 소속 · 기관명 · 조직명 |
| Award date | Award date · awardedDate · 취득일 |
| Credential number | Credential number · serialNo · 이수번호 · 발급번호 |
Matching is case-insensitive, and the column heading in every language CertLink supports is accepted — so a template downloaded in one language still uploads correctly if a colleague opens it in another.
⚠️ Anything not on this list is dropped, and the drop is quiet. An unrecognised heading is reported once on the validation screen — "Some columns are not defined … these columns are ignored" — and then the batch proceeds without it. Nothing fails: the credential is issued, the organisation is simply missing, the award date falls back to the issue date, and the number is generated instead of taken from your file. Read that notice when it appears, and prefer the downloaded template over a spreadsheet of your own.
Validation
Every row is classified before anything is issued (§10.5):
| Valid | Will be issued |
| Warnings | Will be issued — review them |
| Errors | Skipped. The batch proceeds without them |
Appendix D · Credential number rules
Set on the definition (§9.5). The preview on that screen resolves in your organisation's time zone.
| Token | Produces |
|---|---|
{YYYY} | Four-digit year — 2026 |
{YY} | Two-digit year — 26 |
{MM} | Two-digit month — 08 |
{DD} | Two-digit day — 17 |
{YYMMDD} | Six-digit date — 260817 |
{####} | The sequence number, zero-padded to the number of # |
{ORG} | Your workspace address |
Examples
| Rule | Produces |
|---|---|
EHRD-{YYMMDD}-{####} | EHRD-260817-0001 |
{ORG}-{YYYY}-{#####} | vtex-2026-00042 |
CERT{YY}{MM}{###} | CERT2608001 |
Reset cycle
| The sequence restarts | |
|---|---|
| Daily | Every day |
| Monthly | Every month |
| Yearly | Every year |
| Never | Never — it counts up forever |
Match the reset cycle to the tokens in your rule. {YYMMDD} with Never produces numbers that never repeat but climb indefinitely; {YYMMDD} with Daily gives a clean -0001 each morning. A rule with no date token and a Daily reset produces duplicates.
Starting number sets where the sequence begins — useful when migrating from an existing register.
Appendix E · Public addresses
These are reachable without signing in. They are what you give to recipients, verifiers and partners.
| Address | What it is |
|---|---|
app.certlink.io/v/{token} | The public verification page for one credential. This is what the QR code on a printed certificate opens (§13.3) |
app.certlink.io/check | Look up a credential by its number (§13.7) |
app.certlink.io/issuer/{slug} | Your organisation's public issuer profile (§13.6) |
app.certlink.io/org/{slug}/did.json | Your DID Document — the public keys a verifier uses (§6.2) |
The verification address is permanent. It is printed into QR codes on paper certificates that have already been framed and hung on walls. It will keep answering.
Console addresses (sign-in required)
| Address | |
|---|---|
app.certlink.io/login · /signup | Chapter 1 |
app.certlink.io/console/{slug} | Your organisation's console |
app.certlink.io/wallet | The badge wallet — yours, as a recipient |
certlink.io/contact | Support (§15.3) |