adobe-ps-scripts-loreal/API-STATUS.md
DJP 4a192a8c97 Initial commit: Adobe Photoshop API text management scripts
Local and cloud-based workflows for extracting and updating
text layers in PSD files via ExtendScript and Adobe PS API.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 13:46:52 -05:00

7.5 KiB

Adobe Photoshop API Status Update

Latest Information from Adobe (April 22, 2025)

Adobe has provided the following clarifications regarding API access and endpoints:

Authentication

To generate an access token:

  1. Send a POST request to https://ims-na1.adobelogin.com/ims/token/v3 with these parameters:

    • client_id: The client_id value provided by Adobe
    • client_secret: The client_secret value provided by Adobe
    • grant_type: Set to client_credentials
    • scope: Varies by service
      • For Photoshop API: openid,AdobeID,read_organizations
      • For Firefly API: openid,AdobeID,firefly_api,ff_apis
  2. Response includes:

    • access_token: Token for API requests
    • token_type: Will be "bearer"
    • expires_in: ~86399 (24 hours)

Note: Tokens expire after 24 hours; a new token must be generated after expiration.

API Endpoints

Corrected Information

  • Photoshop REST API:

    • Uses the subdomain image.adobe.io exclusively
    • Action JSON endpoint: https://image.adobe.io/pie/psdService/actionJSON
    • Product Crop endpoint: https://image.adobe.io/pie/psdService/productCrop
  • Not Used for Photoshop REST API:

    • photoshop.adobe.io
    • photoshop-services.adobe.io

File Storage

  • Adobe does NOT provide endpoints to generate pre-signed URLs
  • Instead, use external storage solutions like Amazon S3, Azure Storage, or Google Cloud Storage
  • These services support creating pre-signed URLs for use with Adobe APIs

Implementation Changes Required

Based on Adobe's clarification, we need to make these changes:

  1. Update API Endpoints:

    • Replace https://firefly-api.adobe.io/v2/photoshop/editText with https://image.adobe.io/pie/psdService/actionJSON
    • Remove attempts to use the presigned URL endpoints at Adobe
  2. Storage Approach:

    • Continue using Google Cloud Storage for file storage
    • Generate signed URLs for both input and output files using GCS
    • Use these URLs in API requests to Adobe
  3. Authentication:

    • Use the correct scope for each API:
      • Photoshop API: openid,AdobeID,read_organizations
      • Firefly API: openid,AdobeID,firefly_api,ff_apis

These changes have been implemented in the latest code updates.

Current Status

  • Fixed token generation with correct scopes
  • Updated to use the correct API endpoints
  • Configured external storage (GCS) for file handling and signed URLs
  • Successfully implemented asyncronous processing with the Adobe API
  • Full workflow technically working from upload to downloading processed files
  • Text layer updates not applied by the API despite successful responses (202)

Key Findings from Testing

  1. Authentication: Using the correct client secret, we were able to successfully authenticate with Adobe's API
  2. API Endpoints: The /text endpoint is the correct one to use, not actionJSON
  3. Layer IDs: The API requires integer IDs for layers, strings are not accepted
  4. Async Processing: The API returns a 202 Accepted status, processes asynchronously, and then puts the result in the output URL
  5. External Storage: Using Google Cloud Storage with signed URLs works correctly
  6. Layer Update Issue: Despite all other aspects working correctly, the API does not actually update the text layers in the output file regardless of what layer identification method is used

Comprehensive Text Layer Update Issue Investigation

After extensive testing with the Adobe Photoshop API, we've determined:

  1. API Response Pattern:

    • The API consistently returns 202 Accepted for text update requests
    • Status URL shows "succeeded" processing
    • Output files are generated successfully
    • BUT the text layers in the output files remain unchanged
  2. Attempted Solutions:

    • Tried various layer identification methods (ID, name, path)
    • Tested different numeric ID values
    • Used combinations of identifiers
    • Verified all aspects of the API call (auth, URLs, format)
    • All attempts received successful API responses but no actual text changes

A detailed report of our testing and potential solutions has been documented in API-LAYER-ID-SOLUTION.md, recommending the use of our local scripting approach instead of the API until this issue can be resolved.

  1. Continue Using Local Script Workflow:

    • Use the working mac_ps_extract.py and mac_ps_update.py scripts
    • These directly interact with Photoshop through ExtendScript
    • Reliably update text layers with proper formatting
  2. Contact Adobe Developer Support:

    • Request clarification on text layer updates via API
    • Share our test results showing the issue
    • Ask for sample code or documentation
  3. Documentation and Training:

    • Document the existing local workflow thoroughly
    • Train team members on the ExtendScript-based approach
    • Maintain API code for future updates from Adobe

Future API Development (When Fixed)

If Adobe resolves the API issues in the future:

  1. Update our layer ID extraction script
  2. Modify JSON generation to include proper IDs
  3. Update API integration accordingly
  4. Implement hybrid approach for flexibility

Reference Documentation


Previous Status (April 17, 2025)

Authentication: WORKING

  • The new access token (created April 17, 2025) successfully authenticates
  • Adobe IMS user info endpoint returns 200 OK response
  • Authentication to IMS services is now fully functional

Service Endpoints and Storage: CONFIGURED

We have fully implemented the correct Adobe API workflow with external storage:

  1. Text Editing API: FORMAT CONFIRMED & INTEGRATED

    • https://image.adobe.io/pie/psdService/text: API endpoint now correctly configured
    • Proper payload format implemented using:
      • Layer ID as integer
      • Text as an object with content field
      • Input/output references as valid signed URLs from Google Cloud Storage
      • Storage type set to "external" (as per documentation)
  2. Storage Integration: GCS IMPLEMENTED

    • Complete Google Cloud Storage integration added
    • Using bucket lor-txt-tmp-bkt for temporary file storage
    • Functionality includes:
      • File upload to GCS
      • Signed URL generation for both read and write operations
      • Output file retrieval and download
      • Full workflow automation
  3. DNS Resolution Issues:

    • Some Adobe domains still can't be resolved:
      • photoshop.adobe.io
      • cc-api.adobe.io

Token Analysis

The JWT token has been decoded and analyzed, revealing:

{
  "id": "1744876343937_515b5458-d574-47de-8f78-b490c0b6b9f2_ue1",
  "org": "FAD61E276686DB3D0A495EC4@AdobeOrg",
  "type": "access_token",
  "client_id": "f34becb759244899bd73b86220f6fb92",
  "user_id": "DA371F5767EBD07D0A495F94@techacct.adobe.com",
  "as": "ims-na1",
  "aa_id": "DA371F5767EBD07D0A495F94@techacct.adobe.com",
  "ctp": 3,
  "moi": "30055fe7",
  "expires_in": "86400000",
  "created_at": "1744876343937",
  "scope": "openid,AdobeID,read_organizations"
}

Key findings:

  • Token created: April 17, 2025
  • Expiration: Set for 1000 days from creation (January 12, 2028)
  • Scopes: openid,AdobeID,read_organizations
  • Technical account: DA371F5767EBD07D0A495F94@techacct.adobe.com