diff --git a/frontend/src/components/CardActionModal.js b/frontend/src/components/CardActionModal.js
index 90b99ad..69d21aa 100644
--- a/frontend/src/components/CardActionModal.js
+++ b/frontend/src/components/CardActionModal.js
@@ -353,9 +353,51 @@ export default function CardActionModal({ isOpen, onClose, item, initialAction,
{/* Execution error */}
{execError && (
-
-
-
{execError}
+
+
+
+
+ {execError.includes('update_token') ? 'Cannot action via API — this asset has no update token.' : execError}
+
+
+ {execError.includes('update_token') && item?.host_id && (
+
+
+ Action this asset directly in CARD instead:
+
+
+
+ )}
)}
diff --git a/frontend/src/components/CardDetailModal.js b/frontend/src/components/CardDetailModal.js
index fdb8700..5896d00 100644
--- a/frontend/src/components/CardDetailModal.js
+++ b/frontend/src/components/CardDetailModal.js
@@ -7,7 +7,7 @@
*/
import React, { useState, useEffect, useCallback } from 'react';
-import { X, Loader, AlertCircle, CheckCircle, XCircle, ArrowRightLeft } from 'lucide-react';
+import { X, Loader, AlertCircle, CheckCircle, XCircle, ArrowRightLeft, ExternalLink } from 'lucide-react';
// ⚠️ CONVENTION: Prefer using REACT_APP_API_BASE without an absolute URL fallback — other components use relative paths via the env var (e.g. '' default) rather than hardcoding http://localhost:3001/api
const API_BASE = process.env.REACT_APP_API_BASE || 'http://localhost:3001/api';
@@ -338,9 +338,52 @@ export default function CardDetailModal({ isOpen, onClose, ip, ownerData: initia
{/* Execution error */}
{execError && (
-
-
-
{execError}
+
+
+
+
+ {execError.includes('update_token') ? 'Cannot action via API — this asset has no update token.' : execError}
+
+
+ {execError.includes('update_token') && (
+
+
+ Action this asset directly in CARD instead:
+
+
+
+ )}
)}