diff --git a/docs/requirements/Component-ManagementService.md b/docs/requirements/Component-ManagementService.md
index 99450fe2..3931eecc 100644
--- a/docs/requirements/Component-ManagementService.md
+++ b/docs/requirements/Component-ManagementService.md
@@ -156,6 +156,8 @@ The two-person authorization workflow for writes through the MxAccess Gateway. B
- **ListExternalSystems** / **GetExternalSystem**: Query external system definitions.
- **CreateExternalSystem** / **UpdateExternalSystem** / **DeleteExternalSystem**: Manage external system definitions.
+> **Secret elision (arch-review C3).** The `AuthConfiguration` blob holds API keys / Basic credentials. All command responses **and** audit `afterState` are projected through `ExternalSystemPublicShape`, which drops `AuthConfiguration` entirely and surfaces only a `hasAuthConfiguration` presence flag. **Update** is preserve-if-null: an omitted (`null`) `AuthConfiguration` leaves the stored secret intact (mirrors the SMTP/SMS credential rule).
+
### Notifications
- **ListNotificationLists** / **GetNotificationList**: Query notification lists.
diff --git a/src/ZB.MOM.WW.ScadaBridge.ManagementService/ManagementActor.cs b/src/ZB.MOM.WW.ScadaBridge.ManagementService/ManagementActor.cs
index 57fd228a..239c6ed2 100644
--- a/src/ZB.MOM.WW.ScadaBridge.ManagementService/ManagementActor.cs
+++ b/src/ZB.MOM.WW.ScadaBridge.ManagementService/ManagementActor.cs
@@ -1661,16 +1661,36 @@ public class ManagementActor : ReceiveActor
// External System handlers
// ========================================================================
+ ///
+ /// Secret-elided ExternalSystemDefinition projection (arch-review C3): the
+ /// opaque AuthConfiguration blob holds API keys / Basic credentials and
+ /// must never leave this boundary via responses or audit afterState. Presence
+ /// is surfaced as HasAuthConfiguration; every non-secret field is
+ /// projected verbatim. Mirrors .
+ ///
+ private static object ExternalSystemPublicShape(ExternalSystemDefinition d) => new
+ {
+ d.Id,
+ d.Name,
+ d.EndpointUrl,
+ d.AuthType,
+ d.MaxRetries,
+ d.RetryDelay,
+ d.TimeoutSeconds,
+ HasAuthConfiguration = !string.IsNullOrEmpty(d.AuthConfiguration),
+ };
+
private static async Task