{"id":19815,"date":"2026-09-04T15:26:29","date_gmt":"2026-09-04T15:26:29","guid":{"rendered":"https:\/\/sertifier.com\/blog\/?p=19815"},"modified":"2026-09-04T15:26:29","modified_gmt":"2026-09-04T15:26:29","slug":"digital-credential-platform-migration","status":"publish","type":"post","link":"https:\/\/sertifier.com\/blog\/digital-credential-platform-migration\/","title":{"rendered":"Digital credential migration: platform cutover and verification continuity"},"content":{"rendered":"<p>Moving digital credentials from one platform to another is not a file-copying exercise. The issuer has to preserve the meaning of each claim, map the source records into the target model, prevent duplicate active credentials and keep a clear verification route for recipients and verifiers.<\/p>\n<p>This guide covers vendor-to-vendor migration for an existing credential program. It does not own paper-certificate digitization, an Open Badges 2.0 to 3.0 format upgrade or holder-wallet portability. Those are separate decisions with different sources of truth and acceptance tests.<\/p>\n<div class=\"sertifier-summary-box\">\n<p><strong>Short answer:<\/strong> Treat platform migration as a governed record cutover, not a file copy. Preserve the approved claim and issuer identity, assign every source record a target disposition, test recipients and verifiers, and keep a cohort-level rollback point.<\/p>\n<\/div>\n<h2>Short answer<\/h2>\n<p>A safe digital credential migration starts with an inventory and a field mapping, then moves a small representative cohort through import, issuance, delivery and verification. Keep the old system available until each migrated record has a documented disposition. Do not create a second active credential just because the target platform accepted a row.<\/p>\n<h2>Define the migration before choosing a tool<\/h2>\n<p>Teams often use the word migration for several different jobs. Name the job first because each one changes the acceptable source data, target state and rollback plan.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Migration job<\/th>\n<th>Primary decision<\/th>\n<th>Keep with the existing owner<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Vendor-to-vendor platform cutover<\/td>\n<td>How existing issuer records become valid target-platform records<\/td>\n<td>This guide<\/td>\n<\/tr>\n<tr>\n<td>Paper or PDF digitization<\/td>\n<td>Whether a legacy document supports a new digital claim<\/td>\n<td><a href=\"https:\/\/sertifier.com\/blog\/what-is-a-digital-credential\/\">Digital credential guide<\/a><\/td>\n<\/tr>\n<tr>\n<td>Open Badges version upgrade<\/td>\n<td>How a badge changes from one standards representation to another<\/td>\n<td><a href=\"https:\/\/sertifier.com\/blog\/open-badges-3-explained\/\">Open Badges 3.0 guide<\/a><\/td>\n<\/tr>\n<tr>\n<td>Holder wallet move<\/td>\n<td>Whether a holder can store or present an existing credential elsewhere<\/td>\n<td><a href=\"https:\/\/sertifier.com\/blog\/digital-credential-wallet-issuer-guide\/\">Digital credential wallet guide<\/a><\/td>\n<\/tr>\n<tr>\n<td>Platform selection<\/td>\n<td>Which product meets the current program requirements<\/td>\n<td><a href=\"https:\/\/sertifier.com\/blog\/best-digital-credentialing-platforms-2026\/\">Digital credentialing platforms guide<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>This ownership boundary prevents a migration project from silently changing the award criteria, issuer authority or credential standard while moving data.<\/p>\n<h2>Set continuity outcomes before exporting data<\/h2>\n<p>Write acceptance statements that a program owner, support lead and technical operator can test. At minimum, decide what should happen to the old public record, the new public record, the recipient notification and the internal audit trail.<\/p>\n<p>Use language such as:<\/p>\n<ul>\n<li>Every source credential has one recorded migration disposition.<\/li>\n<li>A migrated credential preserves the approved claim and accountable issuer.<\/li>\n<li>A verifier can distinguish a current record from a superseded or historical<\/li>\n<p>one.<\/p>\n<li>A failed import does not trigger blind reissuance.<\/li>\n<li>A rollback restores the last known-good target cohort without rewriting the<\/li>\n<p>source history.<\/p>\n<\/ul>\n<p>These are program controls, not promises that every platform supports the same status, redirect, wallet or import behavior.<\/p>\n<h2>Inventory the source program<\/h2>\n<p>Exporting a recipient list is not enough. Build a source inventory that joins the human-readable claim to the identifiers and governance evidence needed to interpret it.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Source area<\/th>\n<th>Minimum inventory<\/th>\n<th>Migration question<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Issuer<\/td>\n<td>Legal or program name, responsible owner, public identity<\/td>\n<td>Is the target issuer representation authorized and recognizable?<\/td>\n<\/tr>\n<tr>\n<td>Credential definition<\/td>\n<td>Title, criteria, description, skills, dates and version<\/td>\n<td>Does the target record preserve the approved claim?<\/td>\n<\/tr>\n<tr>\n<td>Recipient<\/td>\n<td>Stable approved identifier and display fields<\/td>\n<td>Can the operator match without exposing unnecessary personal data?<\/td>\n<\/tr>\n<tr>\n<td>Award record<\/td>\n<td>Source credential ID, issue date, expiry rule and current state<\/td>\n<td>Is this record eligible to move or only to remain historical?<\/td>\n<\/tr>\n<tr>\n<td>Evidence<\/td>\n<td>References required to explain the award<\/td>\n<td>Can evidence remain in its authoritative system?<\/td>\n<\/tr>\n<tr>\n<td>Verification<\/td>\n<td>Public URL, status behavior and support route<\/td>\n<td>What will a verifier see before, during and after cutover?<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Sertifier&#8217;s current <a href=\"https:\/\/help.sertifier.com\/what-are-credential-reports\">credential reports documentation<\/a> describes the product reporting surface. Treat any export as an input to the inventory, then validate it against the program&#8217;s authoritative records.<\/p>\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-record-map-v2-scaled.webp\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"2560\" src=\"https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-record-map-v2-scaled.webp\" alt=\"Six-stage migration map from source inventory and scope through field mapping, disposition, target records and continuity checks.\" class=\"wp-image-19813\" title=\"\" srcset=\"https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-record-map-v2-scaled.webp 2048w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-record-map-v2-382x478.webp 382w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-record-map-v2-540x675.webp 540w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-record-map-v2-768x960.webp 768w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-record-map-v2-1229x1536.webp 1229w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-record-map-v2-1638x2048.webp 1638w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\" \/><\/a><figcaption class=\"wp-element-caption\">Keep every migration decision tied to an accountable source, rule and owner.<\/figcaption><\/figure>\n<h2>Build a source-to-target field contract<\/h2>\n<p>Create a mapping table before importing a live recipient. Each source field needs a target field, a transformation rule, an owner and a failure action. Do not convert a missing value into an invented value to make an import pass.<\/p>\n<p>The target contract should answer:<\/p>\n<ol>\n<li>Which identifier is stable across both systems?<\/li>\n<li>Which fields describe the credential definition rather than the recipient?<\/li>\n<li>Which dates are historical facts and which dates are target-system events?<\/li>\n<li>Which source status values have no exact target equivalent?<\/li>\n<li>Which links remain authoritative outside the credential platform?<\/li>\n<\/ol>\n<p>The <a href=\"https:\/\/www.w3.org\/TR\/vc-data-model-2.0\/\" target=\"_blank\" rel=\"noopener\">W3C Verifiable Credentials Data Model 2.0<\/a> separates an issuer, a credential subject and claims expressed by the credential. The <a href=\"https:\/\/www.1edtech.org\/standards\/open-badges\" target=\"_blank\" rel=\"noopener\">1EdTech Open Badges standard<\/a> provides a standards context for badge credentials. A standard can guide field meaning and interoperability, but it does not approve the issuer&#8217;s migration policy.<\/p>\n<h2>Keep issuer identity and authority explicit<\/h2>\n<p>A new platform account does not create issuer authority. Record who approved the target issuer profile, which organization or program it represents and who can change it after cutover.<\/p>\n<p>The existing <a href=\"https:\/\/sertifier.com\/blog\/credentials-digital-verification-field-guide\/\">credentials verification field guide<\/a> owns the broader issuer-authenticity and governance explanation. For a migration, apply that principle to the cutover evidence: preserve the issuer name, public context, support route and accountable approver, then test how the new verification page presents them.<\/p>\n<h2>Decide the disposition of every source record<\/h2>\n<p>Not every source credential should become a new active credential. Assign one disposition before the migration run.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Source state<\/th>\n<th>Typical target disposition<\/th>\n<th>Blocking question<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Current and eligible<\/td>\n<td>Create or import one matching current record<\/td>\n<td>Does the program authorize a new platform record?<\/td>\n<\/tr>\n<tr>\n<td>Expired<\/td>\n<td>Preserve as historical or represent expiry accurately<\/td>\n<td>Would a new issue date imply new validity?<\/td>\n<\/tr>\n<tr>\n<td>Revoked, withdrawn or deleted<\/td>\n<td>Keep out of normal issuance<\/td>\n<td>Can the target represent the state without changing its meaning?<\/td>\n<\/tr>\n<tr>\n<td>Duplicate<\/td>\n<td>Reconcile to one approved record<\/td>\n<td>Which identifier and authority determine the survivor?<\/td>\n<\/tr>\n<tr>\n<td>Corrected<\/td>\n<td>Move only the approved current version and retain traceability<\/td>\n<td>Is the correction evidence complete?<\/td>\n<\/tr>\n<tr>\n<td>Unknown<\/td>\n<td>Hold for owner review<\/td>\n<td>Who is allowed to resolve the uncertainty?<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Sertifier documents the behavior of an <a href=\"https:\/\/help.sertifier.com\/what-is-the-expiry-date\">expiry date<\/a>. Do not use expiry as a substitute for a different source status or a regulator&#8217;s decision.<\/p>\n<h2>Choose the target creation route<\/h2>\n<p>The right delivery method depends on volume, repeatability and the controls the program can operate. A small manual sample can validate the mapping. A bounded bulk upload can test a representative cohort. An API or automation path may be appropriate only after duplicate keys, retries and reconciliation are defined.<\/p>\n<p>Sertifier&#8217;s current <a href=\"https:\/\/help.sertifier.com\/can-i-send-credentials-to-multiple-recipients-at-once\">bulk sending guide<\/a> documents a recipient-upload workflow. The <a href=\"https:\/\/docs.sertifier.com\/\">public API documentation<\/a> is the current reference for supported programmatic operations. The <a href=\"https:\/\/sertifier.com\/blog\/credentialing-automation-workflow\/\">credentialing automation guide<\/a> explains trigger, validation, duplicate and retry controls. Confirm the current product behavior for the chosen route before treating it as a migration capability.<\/p>\n<h2>Run a representative sample first<\/h2>\n<p>Use a sample that contains the states most likely to break the mapping. A sample made only of clean current records proves very little.<\/p>\n<p>Include at least one current record, one expired record, one corrected identity, one duplicate candidate, one record with optional evidence and one unknown state. Review the stored target record before sending a notification. Then open the target verification page as a logged-out visitor.<\/p>\n<p>Sertifier&#8217;s <a href=\"https:\/\/help.sertifier.com\/credential-details-complete-guide\">credential details guide<\/a> and <a href=\"https:\/\/help.sertifier.com\/verification-page\">verification page documentation<\/a> describe current product surfaces that can be used in this test. They do not replace the source program&#8217;s award decision.<\/p>\n<h2>Protect recipients from duplicate or confusing notifications<\/h2>\n<p>A migration can create a valid target record and still create a poor recipient experience. Decide whether recipients need a new email, whether the old URL will remain available and how support will explain the relationship between the two records.<\/p>\n<p>Do not send a live migration email until the team has checked the sender identity, credential title, issue date, expiry display, verification route and support copy. The <a href=\"https:\/\/sertifier.com\/blog\/digital-credential-email-delivery\/\">digital credential email delivery guide<\/a> owns delivery acceptance and controlled resend. Migration owns only the decision about when a mapped record is ready to enter that delivery workflow.<\/p>\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2.webp\"><img loading=\"lazy\" decoding=\"async\" width=\"2400\" height=\"2400\" src=\"https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2.webp\" alt=\"Acceptance matrix for issuer identity, field and status mapping, duplicate prevention, verification and rollback.\" class=\"wp-image-19814\" title=\"\" srcset=\"https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2.webp 2400w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2-478x478.webp 478w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2-675x675.webp 675w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2-150x150.webp 150w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2-768x768.webp 768w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2-1536x1536.webp 1536w, https:\/\/sertifier.com\/blog\/wp-content\/uploads\/2026\/09\/platform-migration-acceptance-matrix-v2-2048x2048.webp 2048w\" sizes=\"auto, (max-width: 2400px) 100vw, 2400px\" \/><\/a><figcaption class=\"wp-element-caption\">Test source meaning, target state and public continuity before scaling.<\/figcaption><\/figure>\n<h2>Use a phased cutover with a rollback point<\/h2>\n<p>Cut over in independently reviewable cohorts. Keep a manifest for every run so the team can distinguish accepted, rejected, held and rolled-back records.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Phase<\/th>\n<th>Evidence to retain<\/th>\n<th>Release gate<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Inventory freeze<\/td>\n<td>Source export ID, time, owner and checksum where available<\/td>\n<td>Source scope is approved<\/td>\n<\/tr>\n<tr>\n<td>Mapping test<\/td>\n<td>Field contract and exception log<\/td>\n<td>Required fields and states map correctly<\/td>\n<\/tr>\n<tr>\n<td>Sample cohort<\/td>\n<td>Source IDs, target IDs and screenshots or API responses<\/td>\n<td>Logged-out verification passes<\/td>\n<\/tr>\n<tr>\n<td>Limited production cohort<\/td>\n<td>Run manifest, notification decision and reconciliation result<\/td>\n<td>No unexplained duplicate or unknown state<\/td>\n<\/tr>\n<tr>\n<td>Full cutover<\/td>\n<td>Cohort manifests and owner approval<\/td>\n<td>Support and verifier routes are ready<\/td>\n<\/tr>\n<tr>\n<td>Closure<\/td>\n<td>Final source disposition and retention decision<\/td>\n<td>No source record is silently abandoned<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Rollback should remove or disable only the target records created by the failed cohort when the platform and policy permit it. It should not erase the source evidence or trigger a speculative second migration.<\/p>\n<h2>Apply least privilege to migration work<\/h2>\n<p>Limit export, mapping, import and issuance access to the people who need each step. Separate preparation from final release when practical, and record who approved the live cohort.<\/p>\n<p>Sertifier&#8217;s current <a href=\"https:\/\/help.sertifier.com\/users-permissions\">users and permissions documentation<\/a> describes available product roles. Confirm the current permission model before granting access. Never place API keys, recipient exports or credential evidence in an unapproved repository or shared document.<\/p>\n<h2>Measure migration quality without inventing a success rate<\/h2>\n<p>Count outcomes from the run manifest, not from assumptions about the target platform. Useful measures include mapping acceptance, held records, duplicates prevented, verified target records, recipient delivery results and unresolved support cases.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Measure<\/th>\n<th>Numerator<\/th>\n<th>Denominator<\/th>\n<th>Decision it supports<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Mapping acceptance<\/td>\n<td>Records passing the field contract<\/td>\n<td>Records attempted<\/td>\n<td>Whether the mapping is ready to scale<\/td>\n<\/tr>\n<tr>\n<td>Reconciliation completion<\/td>\n<td>Resolved held or duplicate records<\/td>\n<td>Records requiring review<\/td>\n<td>Whether exceptions have accountable closure<\/td>\n<\/tr>\n<tr>\n<td>Verification acceptance<\/td>\n<td>Target records passing logged-out checks<\/td>\n<td>Target records sampled<\/td>\n<td>Whether public continuity is working<\/td>\n<\/tr>\n<tr>\n<td>Delivery acceptance<\/td>\n<td>Recipients reaching the intended access state<\/td>\n<td>Notifications sent in the cohort<\/td>\n<td>Whether communication is ready to expand<\/td>\n<\/tr>\n<tr>\n<td>Unresolved continuity cases<\/td>\n<td>Records without an approved source or target disposition<\/td>\n<td>Records in scope<\/td>\n<td>Whether cutover can close safely<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>A low-volume sample is operational evidence, not proof of business impact. Organic acquisition remains a separate GSC measurement question, and product outcomes require verified analytics or CRM evidence.<\/p>\n<h2>Ask migration vendors for evidence<\/h2>\n<p>Before selecting a migration path, ask each vendor to demonstrate the exact workflow with representative records:<\/p>\n<ul>\n<li>Which source formats and fields are accepted?<\/li>\n<li>How are existing issue dates, expiry rules and external evidence handled?<\/li>\n<li>Can the platform preserve a source identifier without displaying it publicly?<\/li>\n<li>What happens when the same recipient and award appear twice?<\/li>\n<li>How are unknown, expired or corrected records represented?<\/li>\n<li>Can recipients and verifiers distinguish migrated records?<\/li>\n<li>Which reports or API responses support reconciliation?<\/li>\n<li>What happens to public verification after the commercial relationship ends?<\/li>\n<\/ul>\n<p>The answer should be a testable behavior or current documentation, not a general portability claim.<\/p>\n<div class=\"sertifier-conversion-cta\">\n<p><strong>Plan a controlled credential migration<\/strong><\/p>\n<p>Map your source records, target fields, exception states and verification continuity before moving a live cohort.<\/p>\n<p><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/sertifier.com\/request-a-demo\">Discuss your migration workflow<\/a><\/p>\n<\/div>\n<h2>Frequently asked questions<\/h2>\n<h3>Can we upload an old recipient CSV and call the migration complete?<\/h3>\n<p>No. A recipient list does not by itself preserve the credential definition, issuer authority, dates, state, evidence or verification history. Build and test the full mapping contract.<\/p>\n<h3>Should every legacy credential be reissued?<\/h3>\n<p>No. Eligibility depends on the source state and the program&#8217;s authority. Some records may remain historical, require review or be excluded from normal issuance.<\/p>\n<h3>Does Open Badges guarantee platform migration?<\/h3>\n<p>No. A standard can improve shared structure and interoperability, but the issuer still has to test field meaning, status behavior, evidence references, recipient access and verifier acceptance in the target implementation.<\/p>\n<h3>Can the old and new verification pages stay live together?<\/h3>\n<p>They can only if the program and platforms support a clear, non-conflicting experience. Define which page is current, how the relationship is explained and when the old route can close.<\/p>\n<h3>What should we migrate first?<\/h3>\n<p>Start with a small, representative cohort whose source authority and current state are well understood. Include difficult states before scaling.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Plan a digital credential platform migration across source inventory, field mapping, issuer identity, record disposition, verification continuity and rollback.<\/p>\n","protected":false},"author":3,"featured_media":19812,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","rank_math_canonical_url":"","footnotes":""},"categories":[939],"tags":[],"class_list":["post-19815","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-credentials"],"_links":{"self":[{"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/posts\/19815","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/comments?post=19815"}],"version-history":[{"count":1,"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/posts\/19815\/revisions"}],"predecessor-version":[{"id":19816,"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/posts\/19815\/revisions\/19816"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/media\/19812"}],"wp:attachment":[{"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/media?parent=19815"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/categories?post=19815"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sertifier.com\/blog\/wp-json\/wp\/v2\/tags?post=19815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}