10 KiB
Ferrero OpenText DAM - Upload Troubleshooting Document
Date: October 24, 2025 Environment: Production (https://ppr.dam.ferrero.com) Application: Content Scaling Workflow V3 Issue: File uploads blocked with "restricted file extension" error
Executive Summary
The Content Scaling workflow application successfully performs campaign management, asset downloads, and status updates. However, all file upload attempts via the OpenText Media Management API are being rejected with file extension restriction errors, regardless of file type.
This document provides detailed technical information for Ferrero's OpenText DAM support team to diagnose and resolve the upload restriction.
Current Status
✅ Working Features
-
Campaign Discovery
- Search campaigns by Content Scaling Status (A1, A2, A5, etc.)
- Filter by status using
CONTENT.SCALING.STATUSmetadata field - Display campaign details, brands, markets
-
Asset Downloads
- Download master assets from campaigns
- Bulk download functionality
- Multiple file format support (.tif, .jpg, .png, etc.)
-
Status Management
- Update campaign status: A1→A2, A2→A3, A5→A6
- Uses PATCH
/v6/folders/{id}?lock_strategy=optimistic - All status transitions working correctly
-
OAuth2 Authentication
- Client credentials flow working
- Token refresh functioning
- Authorization headers properly included in all requests
❌ Blocked Feature
File Uploads to DAM
- ALL file uploads rejected
- Multiple file types tested
- Various API approaches attempted
- Consistent error across all attempts
Upload Error Details
Error Message
{
"exception_body": {
"http_response_code": 500,
"message": "Cannot import asset having restricted file extension.",
"debug_message": "Asset creation failed due to restricted file extension",
"error_code": 1000
}
}
API Endpoint Used
POST https://ppr.dam.ferrero.com/otmmapi/v6/assets
Authentication
- Method: OAuth2 Bearer Token
- Token Status: Valid and active
- User: scpi.user1 (from Creds.txt)
- Permissions: Claimed to have "full access"
File Types Tested
All of the following file extensions were rejected with the same error:
| File Extension | MIME Type | Test Result |
|---|---|---|
.tif |
image/tiff | ❌ Rejected |
.jpg |
image/jpeg | ❌ Rejected |
.png |
image/png | ❌ Rejected |
.pdf |
application/pdf | ❌ Rejected |
Conclusion: The restriction appears to be account-level or API-level, not file-type-specific.
Upload Approaches Tested
Attempt 1: Full Metadata from Master Asset
Payload:
asset_representationwith complete metadata structure from existing master assetmetadata_model_id: ECOMMERCE (from master asset)security_policy_list: From master assetmanifest: Upload manifest with filename and MIME typeparent_folder_id: Final Assets folder IDfiles: File uploaded via CURLFile
Result: HTTP 500 - "restricted file extension"
Attempt 2: Minimal Metadata with Model ID
Payload:
asset_representationwith only:name: Filenamemetadata_model_id: ECOMMERCEsecurity_policy_list: [{"id": 1594}]
manifest: Upload manifestparent_folder_id: Final Assets folder IDfiles: File
Result: HTTP 500 - "restricted file extension"
Attempt 3: Import Template Approach
Payload:
import_template_id: MARKETING.ASSETmanifest: Upload manifestparent_folder_id: Final Assets folder IDfiles: File
Result: HTTP 400 - "No permissable import template found"
Attempt 4: Absolute Minimum (No Metadata)
Payload:
manifest: Upload manifest onlyparent_folder_id: Final Assets folder IDfiles: File
Result: HTTP 500 - "restricted file extension"
Attempt 5: Without Metadata Model ID
Payload:
asset_representation:name: Filenamesecurity_policy_list: [{"id": 1594}]
manifest: Upload manifestparent_folder_id: Final Assets folder IDfiles: File
Result: HTTP 500 - "restricted file extension"
Technical Details
Request Structure (Current Implementation)
Endpoint:
POST /v6/assets
Headers:
Accept: application/json
Authorization: Bearer {oauth_token}
Content-Type: multipart/form-data
Form Data Fields:
asset_representation: {
"asset_resource": {
"asset": {
"name": "filename.jpg",
"metadata_model_id": "ECOMMERCE",
"security_policy_list": [{"id": 1594}]
}
}
}
manifest: {
"upload_manifest": {
"master_files": [{
"file": {
"file_name": "filename.jpg",
"file_type": "image/jpeg"
}
}]
}
}
parent_folder_id: "ea0dbf86e13e3634895746d3a986558ec2eb8be1"
files: [binary file data via CURLFile]
Upload Target Details
Campaign: Local adaptation test 2 (C000000078) Campaign Asset ID: 7e2f7c97b003f91f8b2a162b9f62ccab51586fa9 Target Folder: Final Assets (ID: ea0dbf86e13e3634895746d3a986558ec2eb8be1) Content Scaling Status: A2 (Assets Sent to Agency)
Master Assets Available:
- 8000500247167_8.tif (image/tiff, ECOMMERCE model)
- [Additional assets in Master Assets folder]
Comparison: Downloads vs Uploads
Downloads (Working ✅)
- Endpoint:
GET /v6/assets/{id}/contents - Authentication: Same OAuth token
- File Types: .tif, .jpg, .png all download successfully
- Permissions: Read access confirmed working
Uploads (Blocked ❌)
- Endpoint:
POST /v6/assets - Authentication: Same OAuth token
- File Types: ALL rejected
- Permissions: Upload/write access appears restricted
Analysis: The same OAuth credentials work for downloads but not uploads, suggesting write permissions may not be enabled for the API user account.
Questions for Ferrero DAM Support
1. API Upload Permissions
- Is the user account
scpi.user1authorized to upload files via API? - Are there separate permissions for read vs. write operations?
- Is there a different user account or API key required for uploads?
2. File Extension Whitelist
- What file extensions are permitted for uploads via
/v6/assetsendpoint? - Is there a server-side whitelist configuration?
- Can this be configured per user or globally?
3. Alternative Upload Methods
- Is there a different API endpoint for uploads? (e.g.,
/assetswithout/v6/?) - Are there import templates we should be using instead of direct uploads?
- What method does the web interface use for uploads?
4. Metadata Requirements
- What is the minimum required metadata structure for uploads?
- Are specific metadata fields mandatory for the ECOMMERCE model?
- Can uploads inherit metadata from the parent folder?
5. Environment Configuration
- Are API uploads enabled in the production environment?
- Are there rate limits or quota restrictions?
- Are uploads restricted to certain folders or campaigns?
Additional Context
Master Asset Metadata Size Issue
Master assets contain extensive metadata structures (brands, markets, campaigns, compliance data, etc.) that are too large to transmit in upload requests:
- Causes PHP memory issues when stored in session
- JSON payload becomes several MB in size
- Server returns HTTP 502 (Bad Gateway) when full metadata sent
Current Approach: Only transmit essential fields (model ID, security policies) and rely on folder inheritance for other metadata.
Working Example from Postman Collection
The V3 Postman collection includes a "Create Assets and Set Metadata" request with example payload. However:
- The example uses
import_template_id: 'MARKETING.ASSET'which returns "No permissable import template found" - The example includes extensive metadata fields
- We cannot test this request in Postman as we don't have the Postman environment
Recommended Next Steps
For Ferrero Support Team:
- Verify API upload permissions for user
scpi.user1in production environment - Check file extension whitelist configuration for
/v6/assetsendpoint - Provide list of allowed file extensions for API uploads
- Confirm correct upload endpoint and required parameters
- Share working example of successful upload via API (if available)
For Development Team (Once Resolved):
- Update AssetUploader with correct endpoint and parameters
- Implement proper metadata copying from master assets
- Add support for metadata field updates (language, market, etc.)
- Test upload workflow end-to-end (A2→A3)
- Implement rework upload workflow (A5→A6)
Code Repository
Bitbucket: bitbucket.org:zlalani/ferrero-opentext.git
Branch: main
Latest Commit: 0ebdf5c - "Disable master assets fetching in upload"
Key Files:
workflow_v3.php- Main workflow interfacesrc/AssetUploader.php- Upload implementationsrc/StatusManager.php- Status updates (working)config_v3.php- Configuration
Contact Information
Developer: Working through Claude Code Client: [Your contact information] Issue Tracker: GitHub Issues (if applicable)
Appendix: Full Error Log
Sample Upload Request (Simplified)
URL:
POST https://ppr.dam.ferrero.com/otmmapi/v6/assets
Headers:
Accept: application/json
Authorization: Bearer [valid_oauth_token]
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary...
Form Fields:
asset_representation: {"asset_resource":{"asset":{"name":"test.jpg","security_policy_list":[{"id":1594}]}}}
manifest: {"upload_manifest":{"master_files":[{"file":{"file_name":"test.jpg","file_type":"image/jpeg"}}]}}
parent_folder_id: ea0dbf86e13e3634895746d3a986558ec2eb8be1
files: [binary file data]
Response:
{
"exception_body": {
"http_response_code": 500,
"message": "Cannot import asset having restricted file extension.",
"debug_message": "Asset creation failed due to restricted file extension",
"error_code": 1000
}
}
End of Document