Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Analyze, plan, and execute Adobe SDK upgrades — including the critical JWT-to-OAuth migration, PDF Services SDK v3-to-v4, and Photoshop API endpoint changes (cutout v1 to remove-background v2). Trigger with phrases like "upgrade adobe", "adobe migration", "adobe breaking changes", "update adobe SDK", "jwt to oauth".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 71% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 90% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 32% | 0% |
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.
Deadline passed: JWT (Service Account) credentials reached EOL June 2025. If you are still using JWT, migrate immediately.
typescript// 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:
client_credentials grantjsonwebtoken dependency and private key filesbash# Check current version npm list @adobe/pdfservices-node-sdk # Upgrade npm install @adobe/pdfservices-node-sdk@latest
Key breaking changes v3 -> v4:
typescript// 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 });
typescript// 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' }, }), });
bash# 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"
| 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 |
For CI integration during upgrades, see adobe-ci-integration.
Other measured skills in the registry, with their headline benchmark lift.