# Migration from non-kms participant to kms-based participant (externally stored kms key)

**URL:** <https://forum.canton.network/t/migration-from-non-kms-participant-to-kms-based-participant-externally-stored-kms-key/8299>\
**Category:** App Development\
**Tags:** canton\
**Created:** [November 28, 2025, 6:55am UTC](https://forum.canton.network/t/migration-from-non-kms-participant-to-kms-based-participant-externally-stored-kms-key/8299 "2025-11-28T06:55:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![huz](https://yyz2.discourse-cdn.com/flex034/user_avatar/forum.canton.network/huz/32/7391_2.png) [@huz](https://forum.canton.network/u/huz)\
**Post date:** [November 28, 2025, 6:55am UTC](https://forum.canton.network/t/migration-from-non-kms-participant-to-kms-based-participant-externally-stored-kms-key/8299/1 "2025-11-28T06:55:26Z")

</div>

We’re working on migrating our non-KMS participant to a KMS-based participant with externally stored KMS keys. According to the documentation, the migration process involves onboarding a new validator, recreating parties, and migrating all assets from the old participant to the new one.

We’ve successfully created new parties on the new participant, but we’re unable to determine how to transfer the Active Contract Set (ACS) from a party on the old participant to a party on the new participant. The current migration documentation is marked as work in progress ( [Migrate to external key storage with a KMS — Digital Asset’s platform documentation](https://docs.digitalasset.com/operate/3.4/howtos/secure/kms/migration/external_key_storage_migration.html) ), so we’ve been referencing the older documentation ( [Participant Node Migration with a New Namespace — Daml SDK 2.10.2 documentation](https://docs.daml.com/canton/usermanual/kms/external_key_storage/participant_kms_migration/participant_kms_migration_new_namespace.html) ). The older guide mentions using `utils.change_contracts_party_ids` to transfer the ACS between parties, but this function appears to be deprecated in Canton 3.x.

What is the recommended approach for transferring the ACS from a party on the old participant to a newly created party on the new participant? Or is this something which is not possible

---

<div class="post-metadata">

**Author:** ![eslaboncarl](https://yyz2.discourse-cdn.com/flex034/user_avatar/forum.canton.network/eslaboncarl/32/7397_2.png) [@eslaboncarl](https://forum.canton.network/u/eslaboncarl)\
**Post date:** [December 6, 2025, 1:40am UTC](https://forum.canton.network/t/migration-from-non-kms-participant-to-kms-based-participant-externally-stored-kms-key/8299/2 "2025-12-06T01:40:47Z")

</div>

Transferring an ACS from party A (old participant) to a different party B (new KMS participant) via a single console macro is not supported today. There is no replacement for utils.change\_contracts\_party\_ids.

What you can realistically do:

1. If you can avoid changing party ids:

2. If you must change namespace / party ids (your case: external KMS, new participant):
