Skip to main content

Native file uploads through signed URLs in the Product GraphQL API

Moderate Upgrade

  🚧   This feature has been deferred from this release and will be made available in a future release.


The Product GraphQL API now supports native file uploads using signed URLs. Image and PDF files can be uploaded and managed directly through GraphQL, removing the need for REST API-based workarounds.

What’s new?

  • New GraphQL mutations for uploading and updating files and images using signed URLs.
    • createImage
    • createPDFFile
    • deleteImage
    • deletePDFFile
    • updateImage
    • updatePDFFile
    • fileUploadStatus (for upload process tracking as S3 uploads take some time)
  • Asynchronous upload pattern:
    • The API returns a signed URL for direct upload to Amazon S3 using a PUT request
    • File validation and processing occur after the upload completes
  • Full feature parity with the CMS UI for product-related workflows.

Why does this matter?

GraphQL previously lacked a standardized approach for handling file uploads due to request size limitations (~100KB), which made base64 encoding impractical for larger files. Teams had to rely on a mix of GraphQL and Monolith REST APIs to handle file operations.

This update removes that limitation. The signed URL approach enables:

  • Direct uploads to S3 without GraphQL payload size constraints
  • Proper file processing (resizing, path assignment) after upload
  • End-to-end product creation and asset management are handled entirely through GraphQL.

Customer impact

  • Streamlined workflows — Consistent experience for product creation and file management using a single API paradigm.
  • Simplified integrations — Eliminates the need to coordinate between GraphQL and REST APIs for file operations.
  • Reduced complexity — Fewer dependencies and a cleaner architecture for API consumers.

Feature enablement

No feature enablement is required.

Setting enablement

No setting enablement is required.

Documentation

Documentation will be updated with the release.

Was this page helpful?