Adobe Upgrade & Migration
SkillProductivityLets your agent analyze, plan, and carry out upgrades of Adobe SDKs in your codebase.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Adobe Upgrade & Migration skill
About this capability
Migrate Adobe integrations away from Service Account JWT, Photoshop v1, retired Lightroom Firefly Services, or drifting SDK/API contracts with canaries and rollback. Use when the task requires adobe end-of-life and contract migration. Trigger with "upgrade Adobe integration", "migrate Adobe JWT", or
What this skill tells your AI
The instructions your AI receives, as published by jeremylongshore/tons-of-skills-marketplace in skills/.curated/adobe-upgrade-migration/SKILL.md and read by ahel’s review.
Overview
Guide for the most critical Adobe migrations: JWT to OAuth Server-to-Server, PDF Services SDK v3 to v4, Photoshop API v1 to v2 endpoints, and general SDK version upgrades.
Prerequisites
- Current Adobe SDK installed
- Git for version control
- Test suite covering Adobe integration points
- Staging environment for validation
Instructions
Migration 1: JWT to OAuth Server-to-Server (CRITICAL)
Deadline passed: JWT (Service Account) credentials reached EOL June 2025. If you are still using JWT, migrate immediately.
// BEFORE (JWT — no longer works)
import jwt from 'jsonwebtoken';
const jwtToken = jwt.sign({
exp: Math.round(Date.now() / 1000) + 60 * 60 * 24,
iss: orgId,
sub: technicalAccountId,
aud: `https://ims-na1.adobelogin.com/c/${clientId}`,
'https://ims-na1.adobelogin.com/s/ent_firefly_sdk': true,
}, privateKey, { algorithm: 'RS256' });
// AFTER (OAuth Server-to-Server — current standard)
const tokenResponse = await fetch('https://ims-na1.adobelogin.com/ims/token/v3', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
client_id: process.env.ADOBE_CLIENT_ID!,
client_secret: process.env.ADOBE_CLIENT_SECRET!,
grant_type: 'client_credentials',
scope: process.env.ADOBE_SCOPES!,
}),
});
Migration steps:
- In Developer Console, open your project
- Click Add credential > OAuth Server-to-Server
- Assign same product profiles as your JWT credential
- Update application code to use
client_credentialsgrant - Remove
jsonwebtokendependency and private key files - Test in staging
- Deploy to production
- Delete the old JWT credential in Developer Console
Migration 2: PDF Services SDK v3 to v4
# Check current version
npm list @adobe/pdfservices-node-sdk
# Upgrade
npm install @adobe/pdfservices-node-sdk@latest
Key breaking changes v3 -> v4:
// BEFORE (v3)
import PDFServicesSdk from '@adobe/pdfservices-node-sdk';
const credentials = PDFServicesSdk.Credentials
.serviceAccountCredentialsBuilder()
.fromFile('pdfservices-api-credentials.json')
.build();
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
const extractPDFOperation = PDFServicesSdk.ExtractPDF.Operation.createNew();
// AFTER (v4)
import {
ServicePrincipalCredentials,
PDFServices,
ExtractPDFJob,
ExtractPDFParams,
ExtractElementType,
} from '@adobe/pdfservices-node-sdk';
const credentials = new ServicePrincipalCredentials({
clientId: process.env.ADOBE_CLIENT_ID!,
clientSecret: process.env.ADOBE_CLIENT_SECRET!,
});
const pdfServices = new PDFServices({ credentials });
// Job-based API: submit job, poll for result
const job = new ExtractPDFJob({ inputAsset, params });
const pollingURL = await pdfServices.submit({ job });
Migration 3: Photoshop Remove Background v1 to v2
// BEFORE (v1 — deprecated)
const response = await fetch('https://image.adobe.io/sensei/cutout', {
method: 'POST',
// ...
});
// AFTER (v2 — current)
const response = await fetch('https://image.adobe.io/v2/remove-background', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'x-api-key': process.env.ADOBE_CLIENT_ID!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
input: { href: inputUrl, storage: 'external' },
output: { href: outputUrl, storage: 'external', type: 'image/png' },
}),
});
Step 4: General SDK Upgrade Process
# 1. Create upgrade branch
git checkout -b upgrade/adobe-sdk
# 2. Check for outdated packages
npm outdated | grep @adobe
# 3. Upgrade all Adobe packages
npm install @adobe/pdfservices-node-sdk@latest \
@adobe/firefly-apis@latest \
@adobe/photoshop-apis@latest \
@adobe/lightroom-apis@latest
# 4. Run tests
npm test
# 5. Fix any breaking changes (check changelogs)
# Firefly:
# PDF Services:
# 6. Commit and test in staging
git add package.json package-lock.json
git commit -m "chore: upgrade Adobe SDKs to latest"
Output
- Migrated from JWT to OAuth Server-to-Server
- Upgraded PDF Services SDK to v4 job-based API
- Updated Photoshop endpoints to v2
- All tests passing with new SDK versions
Error Handling
| Error After Upgrade | Cause | Solution |
|---|---|---|
invalid_client | Still using JWT credentials | Complete OAuth migration |
ExecutionContext is not a constructor | v3 API in v4 SDK | Use new Job-based API |
404 /sensei/cutout | Old Photoshop endpoint | Update to /v2/remove-background |
Cannot find module | Import paths changed | Check SDK changelog for new imports |
Examples
Start with the smallest applicable command or code example already provided in this guide, using a non-production Adobe environment and credentials. Confirm the documented response or validation result before applying the pattern to production.
Resources
- JWT to OAuth Migration Guide
- PDF Services Release Notes
- Firefly API Changelog
- Photoshop API Migration
Next Steps
For CI integration during upgrades, see adobe-ci-integration.
Signals
- GitHub stars
- 3k
- Forks
- 396
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
adobe-upgrade-migration- Source
- github.com/jeremylongshore/tons-of-skills-marketplace