plugins/aem/edge-delivery-services/skills/da-auth/SKILL.md
Use this when another step needs to call the admin.da.live API, for example before pushing HTML content, listing documents, or triggering a DA preview, and you do not already have a valid DA_TOKEN in scope from an earlier step in the same session. Covers obtaining a valid Adobe IMS access token for the DA (Document Authoring) API.
npx skillsauth add adobe/skills da-authInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Gets a valid Adobe IMS access token and stores it in DA_TOKEN for use in subsequent admin.da.live API calls.
Use this skill whenever you need to call the DA Admin API (admin.da.live) and do not already have a valid token in scope. Common cases:
Do NOT use this skill when:
DA_TOKEN earlier in the same session and it has not expired (tokens are valid for ~1 hour with a 60-second buffer)ims-na1.adobelogin.com$DA_TOKEN is set when snowflake PUTs the converted page to DA$DA_TOKEN once you have it (Source API, preview/publish)Before triggering a browser login, check whether a valid token is already cached.
DA_TOKEN=$(node -e "
const fs = require('fs');
const p = process.env.HOME + '/.aem/da-token.json';
try {
const t = JSON.parse(fs.readFileSync(p, 'utf8'));
if (t.expires_at > Date.now() + 60000) process.stdout.write(t.access_token);
} catch {}
")
If DA_TOKEN is non-empty, skip to Step 3.
Choose the option that fits the environment:
Option A (preferred) — da-auth-helper CLI:
The da-auth-helper tool handles the full IMS OAuth 2.0 implicit flow, caches the token at ~/.aem/da-token.json, and prints the token to stdout.
# Run directly without a global install
DA_TOKEN=$(npx github:adobe-rnd/da-auth-helper token)
If npx is unavailable or slow, install globally first:
npm install -g github:adobe-rnd/da-auth-helper
DA_TOKEN=$(da-auth-helper token)
This opens a browser window. Instruct the user:
Please complete the Adobe IMS login in the browser window that just opened. The token will be captured automatically once you log in.
Success: DA_TOKEN is a non-empty JWT string starting with eyJ.
Option B — DA MCP server:
If a DA MCP server is configured in the session, use its authentication tool to start the OAuth flow and retrieve the token from the response.
Option C — Manual paste (last resort):
I need an Adobe IMS access token to push content to DA. You can copy one from your browser:
- Open da.live and log in
- Open DevTools → Network tab → find any request to
admin.da.live- Copy the
Authorization: Bearer <token>value (without theBearerprefix)- Paste it here
Confirm the token is accepted by the DA API before proceeding:
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer {{DA_TOKEN}}" \
"https://admin.da.live/list/{{ORG}}/{{REPO}}"
Success: HTTP 200. The token is valid — DA_TOKEN is ready for use by the calling skill.
| Symptom | Likely cause | Fix |
|---|---|---|
| DA_TOKEN is empty after Step 1 | No cached token or token expired | Proceed to Step 2 |
| Browser window does not open | npx / da-auth-helper blocked or headless environment | Use Option B (MCP) or Option C (manual paste) |
| npx github:adobe-rnd/da-auth-helper fails | Network restrictions on GitHub package registry | Use Option B (DA MCP server) or Option C (manual token paste) |
| Step 3 returns 401 | Token expired between steps | Re-run Step 2 to refresh |
| Step 3 returns 403 | Authenticated user lacks access to {{ORG}}/{{REPO}} | Ask the user to verify their DA permissions for that org/repo |
~/.aem/da-token.jsontools
Use the run-workflow MCP to discover, compose, execute, publish, and save Adobe Firefly workflows. TRIGGER when: user asks what actions are available, what the MCP can do, how to process images/video/3D via workflow, wants to build/run/save/publish a workflow, OR pastes any workflow/batch/execution ID. BARE ID (UUID/workflowId/batchId) = INSPECT ONLY — call inspect_run, NEVER run_workflow_submit. ALWAYS call list_actions first for capability/discovery questions. DO NOT TRIGGER for direct Firefly API calls without MCP (use firefly-api-specs).
tools
Run predefined featured workflows via run-workflow MCP. TRIGGER when user names a featured workflow (retargeting, banners at scale, localization, packaging, banner advertising, etc.) or asks to run a known marketing/production workflow. Requires run-workflow MCP. ALWAYS call get_featured_workflow before compose_workflow. DO NOT TRIGGER for custom one-off workflows with no named template — use run-workflow skill.
tools
Migrate an Adobe Commerce App Builder project from the Integration Starter Kit or Checkout Starter Kit to the new App Management approach. Run from the root of the App Builder project to be migrated. Pass --auto to skip confirmation prompts (suitable for CI or batch use) — auto mode prints a summary of all Q&A questions answered with their defaults. Pass --doc-scan-only to scan README.md and env.dist for outdated content without modifying any files. Use when the user wants to migrate an App Builder project from the Integration Starter Kit or Checkout Starter Kit to the App Management approach, or mentions upgrading their Adobe Commerce extension architecture.
development
Add or modify webhook interceptors in an Adobe Commerce app. Use when the user wants to intercept Commerce operations to validate input, append data, or modify behavior — before or after execution. Requires a base app initialized with commerce-app-init.