ferrero-opentext/QUESTIONS_FOR_DAM_IT_TEAM.md
DJP ea141d268d Add questions document for DAM IT team re: metadata inheritance
Created comprehensive list of questions about:
- Metadata payload size limits
- Proper metadata inheritance approach
- Nested category structures
- Updating specific fields
- Silent failures (HTTP 202 but no asset)
- Domain value structures
- Tabular field handling

Includes technical details, examples, and our test results.

🤖 Generated with Claude Code
2025-10-30 09:38:04 -04:00

334 lines
9.1 KiB
Markdown

# Questions for OpenText DAM IT Team - Metadata Inheritance
**Date:** October 29, 2025
**Context:** Content Scaling Workflow - Uploading derivative assets with metadata from master assets
**Issue:** Need to copy metadata from master asset to derivative asset and update specific fields
---
## Current Situation
### What Works ✅
- **Simple Upload:** Uploading new assets with 5 basic metadata fields works perfectly
- `FERRERO.FIELD.MKTG.ASSET TYPE`
- `FERRERO.FIELD.FISCAL YEAR`
- `MAIN_LANGUAGES`
- `ARTESIA.FIELD.ASSET NAME`
- `FERRERO.FIELD.STATE`
- **Result:** HTTP 202 Accepted, asset appears in folder, metadata applied correctly
### What Doesn't Work ❌
- **Full Metadata Upload:** When we send the complete metadata structure from a master asset (~128KB JSON)
- **Result:** HTTP 202 Accepted, but asset does NOT appear in the folder
- **Behavior:** Silent failure - no error message, just doesn't create the asset
- **Metadata Size:** 128,912 bytes vs 2,000 bytes for simple structure
---
## Our Goal
We want to implement a "derivative asset" workflow:
1. **Master Asset** exists in DAM with complete metadata (16+ fields)
2. **Download** master asset and all its metadata
3. **Store** complete metadata in our database
4. **Agency** creates derivative/localized versions
5. **Upload** derivative with:
- **All metadata from master** (inherited)
- **Updated fields from filename** (language, country, asset name)
- **Result:** Derivative has same metadata as master except for the fields we changed
### Example Flow
```
Master Asset: 06_RAFFAELLO_MAESTRO_SD.mp4
- Language: EN
- Asset Type: TVC
- Brand: RAFFAELLO
- Agency: XYZ Agency
- Fiscal Year: 2025/2026
- [12+ other fields]
Derivative File: RAF_DE_de_XMAS_TVC_001_6S_16x9.mp4
- Language: DE ← Updated from filename
- Asset Type: TVC (same)
- Asset Name: RAF_DE_de_XMAS_TVC_001_6S_16x9 ← Updated
- Brand: RAFFAELLO ← Inherited from master
- Agency: XYZ Agency ← Inherited from master
- Fiscal Year: 2025/2026 ← Inherited from master
- [All other fields inherited from master]
```
---
## Questions for DAM IT Team
### Question 1: Metadata Payload Size Limits
**Q:** Is there a maximum size limit for metadata payloads when uploading assets via `POST /v6/assets`?
**Context:**
- Simple upload (5 fields): ~2KB payload → Works ✅
- Full metadata (16+ fields): ~128KB payload → Silent failure ❌
- Both return HTTP 202, but large payload doesn't create asset
**What we need to know:**
- Is 128KB too large?
- Is there a documented limit?
- Is there a timeout for large payloads?
---
### Question 2: Metadata Inheritance from Master Assets
**Q:** What's the recommended approach to copy/inherit metadata from one asset to another?
**Options we're considering:**
1. **Copy full metadata structure** - Download master metadata and send it when uploading derivative
2. **Use asset reference** - Reference the master asset ID and tell DAM to copy metadata
3. **Use template/copy API** - Is there a dedicated endpoint for copying metadata between assets?
4. **Selective field upload** - Only send the fields we want to change, DAM preserves others?
**What we need:**
- Best practice for metadata inheritance
- Any special API endpoints for this?
- Example request structure
---
### Question 3: Nested Category Structure
**Q:** When uploading metadata, do we need to preserve the categorized structure from the master asset?
**Master metadata structure we're seeing:**
```json
{
"metadata": {
"metadata_element_list": [
{
"category_id": "1",
"metadata_element_list": [
{"id": "FERRERO.FIELD.MKTG.ASSET TYPE", "value": "..."},
{"id": "MAIN_LANGUAGES", "value": "..."},
...
]
},
{
"category_id": "2",
"metadata_element_list": [...]
}
]
}
}
```
**Questions:**
- Must we preserve the category structure?
- Can we flatten to a single array of fields?
- Does the API accept both formats?
---
### Question 4: Updating Specific Fields
**Q:** Can we upload an asset with partial metadata and update specific fields later?
**Scenario:**
1. Upload asset with basic metadata (5 fields) ← Works
2. Then call an UPDATE endpoint to add/modify fields ← Does this exist?
**Questions:**
- Is there a PATCH/UPDATE metadata endpoint?
- Can we update metadata after asset creation?
- What's the endpoint: `PATCH /v6/assets/{id}/metadata`?
---
### Question 5: Field Type Requirements
**Q:** Are there specific field types that are required vs optional for the ECOMMERCE metadata model?
**What we need:**
- List of required fields for ECOMMERCE model
- Can we omit optional fields vs must send them with empty/default values?
- Does omitting fields cause validation failures?
---
### Question 6: Domain Values
**Q:** Some fields have complex domain value structures with `field_value` vs simple `value`. What determines which structure to use?
**Example structures we're seeing:**
```json
// Structure A (domain value with field_value)
{
"id": "FERRERO.MARKETING.FIELD.AGENCY NAME",
"value": {
"domain_value": true,
"value": {
"field_value": {"value": "0000000023"},
"type": "com.artesia.metadata.DomainValue"
}
}
}
// Structure B (simple domain value)
{
"id": "FERRERO.FIELD.MKTG.ASSET TYPE",
"value": {
"domain_value": true,
"value": {"type": "string", "value": "heroimage"}
}
}
```
**Questions:**
- Which structure should we use for each field?
- Is this defined in the lookup domains?
- Can we query this via API?
---
### Question 7: Tabular Fields
**Q:** How do we properly handle tabular fields like `MAIN_LANGUAGES`?
**Current structure:**
```json
{
"id": "MAIN_LANGUAGES",
"parent_table_id": "FERRERO.TABULAR.FIELD.MAIN LANGUAGES",
"type": "com.artesia.metadata.MetadataTableField",
"values": [{"cascading_domain_value": false, ...}]
}
```
**Questions:**
- Can tabular fields have multiple values?
- Do we always use `values` array (plural)?
- Is `parent_table_id` required?
---
### Question 8: Silent Failures
**Q:** Why does the API return HTTP 202 (Accepted) but not create the asset when metadata is large?
**Observations:**
- Small metadata (~2KB): HTTP 202 → Asset created ✅
- Large metadata (~128KB): HTTP 202 → Asset NOT created ❌
- No error message in either case
- Both use identical upload structure, just different metadata content
**Questions:**
- Is there async validation that can fail after 202 response?
- How can we check if validation failed?
- Is there a job status endpoint to check async upload status?
- Should we poll for the asset to verify it was created?
---
## What We've Tried
### Attempt 1: Full Metadata from Master ❌
```php
// Downloaded full master asset metadata
// Sent entire metadata_element_list structure (15 categories, 50+ fields)
// Size: 128KB
// Result: HTTP 202 but asset not created
```
### Attempt 2: Simple 5 Fields ✅
```php
// Created minimal metadata with 5 fields
// Size: 2KB
// Result: HTTP 202 and asset appears in folder
```
---
## Technical Details
### API Endpoint Used
```
POST https://ppr.dam.ferrero.com/otmmapi/v6/assets
```
### Request Structure
```
POST /v6/assets
Content-Type: multipart/form-data
Parameters:
- asset_representation: {JSON structure}
- parent_folder_id: {folder_id}
- manifest: {upload_manifest JSON}
- files: {binary file data}
```
### Authentication
```
OAuth 2.0 Bearer Token (client_credentials)
Working correctly (uploads succeed with simple metadata)
```
### Target Folder
```
Final Assets Folder ID: ea0dbf86e13e3634895746d3a986558ec2eb8be1
Permissions: Write access confirmed
```
---
## Recommended Approach (Need IT Team Guidance)
### Option 1: Copy from Master Asset (Preferred)
```
Is there an API to say "create asset X with metadata copied from asset Y"?
Then we could update just the fields we need to change.
```
### Option 2: Two-Step Process
```
Step 1: Upload with minimal metadata (5 fields) - Works
Step 2: PATCH/UPDATE to add remaining fields from master - Does this exist?
```
### Option 3: Selective Metadata
```
Send only the fields that changed from master + references to master
Does DAM support referencing master metadata?
```
### Option 4: Understand Payload Limits
```
If there's a size limit, we could:
- Send only essential fields
- Use metadata templates
- Reference external metadata
```
---
## Sample Data Available
We can provide:
- ✅ Working simple metadata JSON (2KB, 5 fields)
- ✅ Full master metadata JSON (128KB, 50+ fields)
- ✅ Successful upload request (works)
- ✅ Failed upload request (202 but no asset created)
- ✅ HTTP request/response logs
---
## Priority Questions (Most Important)
1. **What's the proper way to inherit metadata from a master asset to a derivative?**
2. **Is there a size limit on metadata payloads?**
3. **Can we update metadata after asset creation? (PATCH endpoint)**
4. **Why does HTTP 202 not always create the asset?**
---
## Contact Information
**Project:** Ferrero Content Scaling Workflow
**Developer:** Dave Porter
**Environment:** Production (ppr.dam.ferrero.com)
**Client ID:** otds-OLV
---
**Please advise on the best approach for metadata inheritance in derivative asset workflows.** 🙏