Genialcloud DDAM
Developer Guide
Use this page as the integration contract for producer and consumer apps. DDAM stays API-only: no direct database access and no shared filesystem assumptions.
Plugin Tools
Plugin Tools
Download the DDAM Photoshop or Premiere Pro plugin package and load it in Adobe UXP Developer Tool for manual testing.
Integration Rules
Integration Rules
- Every sibling app talks to DDAM over HTTP or HTTPS only.
- Each sibling app should use a local DDAM client or service adapter instead of scattered raw HTTP.
- Each consuming app should expose DDAM enable toggle, base URL, API key, and optional health check in admin settings.
- DDAM owns reusable assets. Producing apps still own their own sessions, runs, and workflow logic.
Auth
Generate API keys from DDAM Admin. Manual upload in the DDAM UI does not require an API key, but all API integrations do.
App Settings Contract
DDAM_ENABLED=true DDAM_BASE_URL=https://ddam.example.com DDAM_API_KEY=generated-in-ddam-admin DDAM_TIMEOUT_SECONDS=30
Consumer Pattern
- List or search assets from `GET /api/v1/assets` with controlled filters.
- Use returned URL fields by strict contract:
preview_urlmust stay preview-safe binary media,inline_urlmust stay direct embeddable raw media,download_urlmust stay binary download media, andpublic_page_urlis the only human-facing page URL. - Consumer apps should not need HTML fallback logic or content sniffing for asset URL fields returned by the API.
- Load controlled combos like product lists from DDAM public option endpoints instead of mirroring taxonomy locally.
- Consumers should degrade safely if DDAM is disabled or unhealthy.
import requests
response = requests.get(
"http://127.0.0.1:8020/api/v1/assets",
headers={"X-API-Key": "YOUR_DDAM_API_KEY"},
params={
"product": "genialcloud-proj",
"asset_type": "image",
"language": "english",
"status": "ready",
},
timeout=30,
)
response.raise_for_status()
items = response.json()["items"]
Producer Pattern
- Publish only durable, reusable outputs into DDAM.
- Send source app, optional workflow, and metadata that preserves lineage.
- Use `external_key` when you need idempotent publishing from a producer app.
curl -X POST "http://127.0.0.1:8020/api/v1/assets" \
-H "X-API-Key: YOUR_DDAM_API_KEY" \
-F "file=@/path/to/asset.png" \
-F "asset_type=image" \
-F "product=avantune-generic" \
-F "source_app=developer_daily" \
-F "language=english" \
-F "status=ready" \
-F "title=Video Daily Screenshot 1" \
-F 'metadata_json={"workflow":"video","job_id":"...","job_output_kind":"selected_screenshot"}' \
-F 'tags=["manualstudio","video","selected_screenshot"]' \
-F "is_public=false"
Endpoint Catalog
Filter Contract
curl "http://127.0.0.1:8020/api/v1/assets?product=genialcloud-proj&asset_type=image&language=english&status=ready&page=1&page_size=15" \ -H "X-API-Key: YOUR_DDAM_API_KEY"
{
"product": "genialcloud-proj",
"asset_type": "image",
"language": "english",
"status": "ready",
"page": 1,
"page_size": 15
}
Sample Asset Response
{
"id": "3f2fd8cb-59d3-4f58-9ae4-a4f2b0c8ab10",
"asset_type": "image",
"product": "avantune-generic",
"source_app": "developer_daily",
"title": "Video Daily Screenshot 1",
"language": "english",
"status": "ready",
"is_public": true,
"public_url": "https://media.avantune.com/ddam/public/assets/avantune-generic/image/3f2fd8cb-59d3-4f58-9ae4-a4f2b0c8ab10/screenshot-1.png",
"public_page_url": "https://media.avantune.com/ddam/public/pages/3f2fd8cb-59d3-4f58-9ae4-a4f2b0c8ab10/index.html",
"preview_url": "http://127.0.0.1:8020/ui/assets/3f2fd8cb-59d3-4f58-9ae4-a4f2b0c8ab10/preview?v=1775587000",
"inline_url": "http://127.0.0.1:8020/ui/assets/3f2fd8cb-59d3-4f58-9ae4-a4f2b0c8ab10/inline?v=1775587000",
"download_url": "http://127.0.0.1:8020/api/v1/assets/3f2fd8cb-59d3-4f58-9ae4-a4f2b0c8ab10/download"
}
Public Option API
Use this public endpoint for app combos that must stay aligned with DDAM controlled vocabulary across different servers.
curl "http://127.0.0.1:8020/api/public/options/products"
curl "http://127.0.0.1:8020/api/public/options/languages"
Sample Product Options Response
{
"items": [
{ "value": "avantune", "label": "Avantune" },
{ "value": "avantune-generic", "label": "Genialcloud" }
],
"total": 11
}
{
"items": [
{ "value": "both", "label": "Both" },
{ "value": "english", "label": "English" },
{ "value": "italian", "label": "Italian" }
]
}
Sample Create Payload
{
"asset_type": "image",
"product": "avantune-generic",
"source_app": "developer_daily",
"language": "english",
"status": "ready",
"title": "Video Daily Screenshot 1",
"description": "Selected screenshot published from DeveloperDaily.",
"metadata_json": {
"workflow": "video",
"job_id": "...",
"job_output_kind": "selected_screenshot"
},
"tags": [
"developerdaily",
"video",
"selected_screenshot"
],
"is_public": false
}
Producer apps may populate publish-language selectors from GET /api/public/options/languages. Asset uploads to POST /api/v1/assets may include a language field. Recommended producer values are both, english, and italian.
Asset uploads to POST /api/v1/assets may include a status field. Current supported DDAM values are ready, draft, and archived.
metadata_json and tags are sent as JSON strings inside multipart form data.
Controlled Vocabulary
Asset type
image· Imagevideo· Videotranscript· Transcriptaudio· Audiopdf· PDFdocx· DOCXhtml· HTMLzip· ZIPjson· JSONbinary· Generic Binary
Product
avantune· Avantuneavantune-generic· Genialcloudgenialcloud-proj· Genialcloud Projgenialcloud-powua· Genialcloud Powuagenialcloud-powua-iot· Genialcloud Powua IoTgenialcloud-facsys· Genialcloud Facsysgenialcloud-facsys-fax· Genialcloud Facsys FAXgenialcloud-tem-time· Genialcloud TEM + Timeavantune-zta· Avantune ZTAavantune-bpo· Avantune BPOavantune-sparks· Avantune Sparks
Source app
ddam_ui· DDAM UIsales_daily· SalesDailydeveloper_daily· DeveloperDailyadobe_photoshop· Adobe Photoshopadobe_premiere· Adobe Premiere Pro
Status
ready· Readydraft· Draftarchived· Archived
Language
both· Bothenglish· Englishitalian· Italian
