Asset upload fails when using Asset Manager APIs in Adobe Experience Manager as a Cloud Service

Asset upload fails when integrations use in-JVM APIs such as com.day.cq.dam.api.AssetManager.createAsset. These APIs are deprecated and unsupported for binary uploads in Adobe Experience Manager as a Cloud Service. Uploading binaries inside the AEM JVM is treated as a cloud anti-pattern. To fix this issue, migrate to Direct Binary Upload workflow or use Bulk Import for asset ingestion.

Description description

Environment

  • Adobe Experience Manager as a Cloud Service
  • Adobe Developer App Builder
  • AEM Dynamic Media

Issue/Symptoms

  • BPA report flag unsupported.asset.api
  • Usage of com.day.cq.dam.api.AssetManager.createAsset or similar APIs
  • Asset upload attempts executed inside AEM JVM
  • Warnings stating asset upload must not run inside Experience Manager JVM
  • Developer warnings indicate that asset uploads must not run inside the Experience Manager JVM

Resolution resolution

  1. Search your codebase for com.day.cq.dam.api.AssetManager.createAsset, createOrReplaceAsset, and other asset creation methods that write binaries inside AEM.

  2. Verify that the BPA flag or IDE warning references these APIs, such as unsupported.asset.api

  3. If you can’t locate the affected code, collect the BPA output and file paths and share them with Adobe Support.

  4. Use the diagnostic branching below:

    • If uploading assets from an external system, use Direct Binary Upload API (initiateupload → binary upload → complete-upload).
    • If performing high-volume ingestion, use AEM Bulk Import from cloud storage (S3, Azure, GCP, Dropbox, OneDrive).
    • If periodic scheduled ingestion is required, use Adobe App Builder + AEM Assets HTTP API.
  5. Confirm that your use case doesn’t require in-JVM asset uploads.

  6. Generate OAuth Server-to-Server credentials in Adobe Developer Console.

  7. Assign the correct Product Profile to the credentials.

  8. Generate an access token and verify that Adobe Developer Console returns a valid bearer token.

  9. If token generation fails, verify that the assigned Product Profile includes write permissions.

  10. Log in to AEM Author and navigate to Tools > Security > Users.

  11. Locate the technical account user that appears after the first API invocation.

  12. Verify that the user belongs to a services user group with jcr:read and rep:write permissions on /content/dam.

  13. Check Tools > Security > Permissions for the Services user group.

  14. Initiate the Direct Binary Upload workflow.

  15. Upload the binary directly to the returned cloud storage location.

  16. Complete the upload request to start AEM asset processing.

  17. Navigate to Assets > Files > your target folder and verify that the asset appears in the target folder.

  18. If the upload fails, collect the API request and response payloads and share them with Adobe Support.

  19. Move the assets to a supported cloud storage provider and configure Bulk Import in AEM

  20. Verify that the imported assets appear in AEM.

recommendation-more-help
experience-cloud-kcs-help-kbarticles