plugin-crm deployment to the integrated CRM.
If you are starting a new Midaz deployment (v5.x+), you do not need this guide. Simply enable CRM in your Helm values as described in Deploy Midaz using Helm. The integrated CRM is now the only supported deployment model.
What changed
The CRM plugin was originally maintained as a separate codebase with its own release cycle and deployed independently through a dedicated Helm chart (
plugin-crm) in the midaz-plugins namespace.
Starting with Midaz v3.5.0-beta.12 (December 2025), CRM was incorporated into the Midaz monorepo under components/crm/. Its deployment was then consolidated into the main Midaz Helm chart beginning in v5.x.
Architecture comparison
| Aspect | Standalone (v4.x and earlier) | Integrated (v5.x+) |
|---|---|---|
| Source code | Separate repository | components/crm/ in the Midaz monorepo |
| Helm chart | plugin-crm (dedicated chart) | Part of the midaz chart |
| Namespace | midaz-plugins | midaz |
| Versioning | Independent release cycle | Matches Midaz core version |
| MongoDB | Own connection configuration | Shared MongoDB with other Midaz services |
| Installation | helm install plugin-crm oci://... | crm.enabled: true in Midaz values |
| Port | 4003 | 4003 (unchanged) |
API changes
The CRM API remains fully backward-compatible. All endpoints available in the standalone version continue to work the same way in the integrated deployment.| Resource | Endpoints | Status |
|---|---|---|
| Holders | POST, GET (list), GET (by ID), PATCH, DELETE | Unchanged |
| Aliases | POST, GET (list by holder), GET (by ID), PATCH, DELETE | Unchanged |
| Aliases (global) | GET /v1/aliases (list across all holders) | Unchanged |
| Related Parties | DELETE | Added in integrated version |
The endpoint
DELETE /v1/holders/{holder_id}/aliases/{alias_id}/related-parties/{related_party_id} was introduced with the integrated CRM.If you previously needed to remove related parties individually, this operation is now supported directly. In earlier versions, this required updating the alias payload without the related party.What stays the same
- API contract: All existing endpoints, request and response schemas, and behaviors remain unchanged.
- Database: MongoDB continues to be the storage backend.
- Authentication: Access Manager integration works the same way (
PLUGIN_AUTH_ENABLED,PLUGIN_AUTH_ADDRESS). - Encryption keys:
LCRYPTO_HASH_SECRET_KEYandLCRYPTO_ENCRYPT_SECRET_KEYare still required. - Default port: CRM continues to run on port 4003.
Pre-migration checklist
Before starting the migration, confirm the following:
Verify your Midaz chart is v5.x or laterIf you are running v4.x or earlier, upgrade Midaz first using the Upgrading Helm guide.
Migration steps
Step 1 — Enable CRM in the Midaz chart
Add the CRM configuration to your Midaz Helm values:Step 2 — Migrate your MongoDB data
If your standalone CRM used its own MongoDB instance, restore the data into the Midaz-managed MongoDB.Step 3 — Deploy the integrated CRM
Step 4 — Verify the integrated CRM is running
Step 5 — Validate your data
Run a quick validation to confirm that your data migrated correctly.Step 6 — Update DNS and ingress
Update your DNS records or ingress rules to point to the CRM service in themidaz namespace.
Step 7 — Remove the standalone CRM
After confirming that everything works as expected, remove the standalone deployment.Only uninstall the standalone CRM after validating the integrated deployment. This operation removes the standalone deployment and its resources.
midaz-plugins namespace is no longer needed, you can optionally remove it.
Access Manager permissions
Access Manager permissions remain unchanged after the migration. The application name continues to be
plugin-crm, and permissions apply to the holders and aliases resources.
| Permission | Description | Resources | Allowed Methods |
|---|---|---|---|
plugin-crm-editor-permission | Full access | holders, aliases | post, get, patch, delete |
plugin-crm-contributor-permission | Read and write | holders, aliases | post, get, patch |
plugin-crm-viewer-permission | Read only | holders, aliases | get |
Rollback procedure
If you need to revert to the standalone CRM:
Troubleshooting
CRM pod fails to start with encryption errors
- Confirm that
LCRYPTO_HASH_SECRET_KEYandLCRYPTO_ENCRYPT_SECRET_KEYexactly match the values used in the standalone deployment.
- Verify that
MONGO_HOSTandMONGO_NAMEpoint to the correct MongoDB instance and database. - If you ran
mongorestore, confirm the restore completed successfully.
- The application name in Access Manager should still be
plugin-crm. No change is required.
- Running both the standalone and integrated CRM simultaneously will create a conflict on port 4003.

