Scope: the developer surface of MediaBeacon 25.07, the latest version with public documentation (2026-10-01). MediaBeacon has three APIs, documented together. The REST API v2 is called over HTTP by external systems. The Workflow JavaScript API is server-side scripting inside MediaBeacon, also used to build integrations. The Client JS API runs in the user's browser inside the MediaBeacon UI S6 S22. A legacy REST API v1 is still documented in the downloadable bundle S5.
Where the docs live: the 25.07 "API Documentation" PDF on docs.esko.com only points to mediabeacon.com/en/api-documentation S6, and that URL now redirects to the Esko product page S21. The reference itself is still served, without login, from the vendor's S3 documentation bucket (mb-buildstorage.s3.amazonaws.com/{version}/Current/API/…). These are the links the former API page used (last archived 2024-06-25) S22 S45.
At a glance
upload parameter replace (use version) S1. No API deprecation policy published — Not publicgetApiKey are tied to one user and are permanent unless deleted S2 S1. Workflows can also create expiring keys (lifetime in ms) and workflow-only keys that can run only one named workflow S3. The admin System Status page lists keys with their expiry dates S9. No OAuth, no refresh tokensAJAX object (default timeout 15 s) S3Authentication
- Create a key in the UI: log in as the user the integration should act as, open Manage → System Status → API Keys and choose Create API Key S2. Administrators see all keys, the user who last used each one, and expiry dates S9.
- Or by API:
GET|POST /wf/restapi/v2/getApiKey?name=…fetches or creates a key for the authenticated user (default name "REST Api Key");deleteApiKeyremoves one, subject to permissions S1. - Send it as
apikey=<key>in the query string or form body, or in a request header S2. HTTP Basic (Authorization: Basic …) oruser/passparameters also work S2. - Choose the ACL: add
acl_id=<id>to run under a specific group/ACL; otherwise the user's default ACL is used S2. - From workflows:
apiKeyManagercreates permanent, expiring or workflow-restricted keys, e.g. to hand a narrowly scoped key to an external system S3.
SSO (SAML/IdP) covers interactive log-in only. No token-based federated API authentication is documented S9 S12.
Core resources
REST v2 reference 25.07: 48 documented endpoint pages (some endpoints have one page per HTTP method) S1. The API accepts GET, POST and PUT interchangeably for most endpoints; the admin managers distinguish GET/POST/PUT/DELETE S2 S1. All paths are relative to https://{tenant}.
| Resource | Endpoints | Notes |
|---|---|---|
| Assets | /wf/restapi/v2/assets (by ids or resolver URL), /AssetsByPath | verbose=true adds name, path, size, dimensions, MIME type, preview URLs; fields=[…] adds metadata S1 S2 |
| Metadata (fields schema) | /fields, /setFields, /getXmp, /setXmp | Field IDs are XMP namespace + name, e.g. http://purl.org/dc/elements/1.1/ subject S1 S2 |
| Controlled vocabularies | /dictionary, /word | List dictionaries with words; create or update terms S1 |
| Search | /search (JSON criteria or savedSearchId), /quickSearch, /typeAhead, /facets, /savedSearches | See Search & querying S1 |
| Folders (directories) | /directories (tree, depth, children), /create, /move, /rename, /delete | Paths or directory IDs S1 |
| Collections | /savedSelections | Saved selections (shared collections) with their assets S1 |
| Uploads & versions | /upload (multipart form, dest or destId), /import, /checkIn, /checkOut (checkout or cancel), /getCompletedAssets | See Uploads & binaries S1 |
| Renditions / derivatives | /conversion (format, colour space, scale, resolution → file in a target directory), /download (ZIP + 302 redirect), /compressFiles, /decompressFiles | Preview and download URLs come in verbose asset data S1 |
| Relationships | /getLinks, /setLinks | Asset link groups S1 |
| Comments | /getDiscussion, /setDiscussion | Per-asset discussion thread S1 |
| Users / groups / ACLs | /userInfo, /groups; admin: /admin/userManager, /admin/groupManager, /admin/aclManager (GET, POST, PUT, DELETE) | Create, update and remove users, groups and ACL objects in bulk S1 |
| API keys | /getApiKey, /deleteApiKey | S1 |
| Rights | No dedicated endpoint; rights are metadata fields plus ACL rules (Conditional Download) | S8 Unverified (inferred from the absence of a rights endpoint) |
| Workflows | No REST endpoint to manage workflows; client-triggerable workflows get a Workflow ID that can be triggered through the API | S9 Unverified (exact HTTP call not documented in the REST reference) |
Legacy REST v1 (/wf/restapi/1/…, 29 documented operations such as search, info, getPreviews, generateContactSheet, pathToAssetId, submitAssets, upload) S5. The doc source paths show that the REST endpoints are themselves packaged as JavaScript workflows ("RESTWorkflows") S5 Unverified (inferred from file names).
Workflow JavaScript API (server-side): 148 class pages, including managers exposed as globals in a workflow context. Documented globals include fileManager, searchManager, fieldManager, dictionaryManager, userManager, groupManager, apiKeyManager, pluginManager, s3Manager, linkManager, versionManager, previewManager, mailManager, notificationManager, savedSelectionManager, loadingDockManager. Other classes cover external sharing, video, metrics and workflow control. Also trigger event/configuration classes, AJAX for outbound HTTP, SQL access to external data sources, and PDF/contact-sheet helpers S3.
Client JS API (browser): publishers for search, selection, metadata (MBAPI.md.batchSetField), download, upload, permissions, notifications, M3TA forms and menus, plus UI events (selection, view, workspace change) S4 S13 S15.
Data model
- Asset: numeric asset ID (also called record ID), file name, managed path, directory ID, width/height, bytes,
lastModified(epoch ms), MIME type,previews(thumbnail,viewexpreview,downloadUrlservlet links), and optionalpublishedRenditions(preset name → public S3 URL, renditions licence required) S1 S2. - Resolver URLs address sets of assets or directories (e.g.
directory://182) and can replace anidsarray S1 S2. - Metadata: XMP properties keyed by
"<namespace URI> <name>". Values are strings or arrays (multi-value). Repeating data blocks are structured values S1 S9. MediaBeacon-specific namespaces includehttp://ns.mediabeacon.com/…and a metrics schema S9 S1. - Directories:
{name, path, id, resolver, hasChildren, assets[]}S1. - Security: users → groups → ACLs. ACL IDs are strings (e.g.
0_6_<GUID>) S2 S9.
Search & querying
- Structured search (
/search): a JSON object{conjunction: "and"|"or", criteria: [{fieldId, condition, value}]}. Conditions depend on field type:eq,ne,lt,le,gt,ge,between(dates),cont,not_cont,beg,end,null,not,cont_part,all,any,phrase,wo(without word),anyval,notchanged… S1. A specialdirectorypseudo-field restricts by path S1. - Saved searches run by
savedSearchIdS1. Quick search takes a string, optionally limited to a directory S1. Type-ahead returns R3Search suggestions S1. - Sorting:
sortField(field ID orrecord_id) +sortDirectionASC/DESCS1. - Facets:
/facets?fieldId=…with paging andhierarchyLevelfor hierarchical fields S1. Empty / not-empty conditions on asset-link fields arrived in 25.03 S13. - Post-filters: with
verbose=true, responses can be filtered onid,name,path,height,width,bytes,lastModified,mimeType,resolver, using wildcards (test*) and comparisons (bytes=>4095). Filters apply after the operation, so for paging the docs recommend search criteria instead S2 S1. - Deep pagination: page index only; no cursor or scroll documented; total-count field Unknown.
Uploads & binaries
- Upload: POST
/wf/restapi/v2/uploadas multipart form data, with the file in fieldfileand a destinationdest(path) ordestId(directory ID). Options:unzip,version(create a new version if the name exists),message,replaceMetadata,replaceName,metadata(JSON field→value stamped on the new asset),asyncImport, andtriggerAssetBasedWorkflow=falseto skip "asset added" workflows S1. - New version: POST
/checkInwithid+file. Use/checkOutto lock first S1. - Server-side import:
/importregisters files already present in managed storage (paths or IDs) S1. - Chunked / large files: no chunked REST upload documented. S3-integrated environments use multipart upload internally S15 S13, and the Workflow API
AJAX.addBinaryChunkands3Manager(presigned-URL copy, S3 upload with placeholder asset) cover server-side transfers S3. - Download:
/download?ids=[…]builds a ZIP and answers 302 to the file S1. Per-assetdownloadUrl/ preview servlet links are in verbose asset data S1. Public S3 rendition URLs appear when renditions are published S1. External share links (expiring, download-counted) are created from workflows with theJSExternalSharingManagerclass S3.
Events & webhooks
- No outbound webhook subscription API exists in the REST reference S1.
- Equivalent mechanism: server-side workflows with trigger configurations:
AssetAdded,AssetModified,AssetMoved,AssetRenamed,AssetCopied,AssetRemoved,AssetDownloaded,AssetCheckin,Permission,Scheduled,UserTriggeredS3. They are configured in the Workflow Manager (enable, schedule, client-side triggering, thread count) S9. A workflow can then push to an external endpoint withAJAX; retries and signing are left to the script S3 Unverified (no built-in retry or signature). - REST uploads can suppress these triggers (
triggerAssetBasedWorkflow=false) S1.
Limits & quirks
- GET length 2,048 characters, no files on GET S2.
- Tomcat and brackets: JSON arrays in query strings (
ids=[…]) can cause HTTP 400 on Tomcat unlessrelaxedQueryChars/relaxedPathCharsare set on the connector S2. - Defaults are minimal: without
verbose=true, assets come back as IDs only (directories as paths) S2. - Filters run post-operation and can yield short pages S2.
- Field visibility is form-driven: fields missing from the ACL's forms are silently absent from responses (documented after a 25.03 support case) S13.
- Regression example: a REST
lesearch onmetadataModifyTimebroke and was fixed in 25.07 S12. - Workflow defaults:
AJAXrequest timeout 15 s S3. - Documentation location drift: the official PDF links to a redirected page S21 S6; use the S3-hosted reference (Resources).
SDKs, tools & code samples
| Library / tool | Language | Maintainer | Status |
|---|---|---|---|
| Workflow JavaScript API (server-side scripting, Visual Workflow Editor) | JavaScript on Rhino / Java | Esko (official) | Current, 25.07 S3 S9 |
Client JS API (window.MBAPI) | JavaScript (browser) | Esko (official) | Current, 25.07 S4 |
| Zipped API docs bundle per version | HTML | Esko (official) | 25.07 bundle rebuilt 2026-05-18 S5 S45 |
0HugoHu/ECE564-AssetMgmt (cloud file browser on the MediaBeacon API) | — | Community (student project) | Last push 2023-12 S44 |
api-evangelist/mediabeacon (third-party API profile) | YAML | API Evangelist | Not affiliated with Esko S43 |
No official REST client library, CLI or Postman collection was found S47.
Changelog of the API
| Date | Change | Source |
|---|---|---|
| 2026-05-18 | 25.07 API documentation bundle regenerated (same version number) | S45 S1 |
| 2025-07 | 25.07: REST le condition on metadataModifyTime fixed | S12 |
| 2025-03 | 25.03: empty / not-empty search conditions for asset-link fields via REST; Client JS MetadataApiPublisher doc corrected; REST/workflow docs clarify form-based field visibility | S13 |
| 2024-11 | 24.11: metadata stamping in REST upload; field-specific search in MBAPI.search.createQuickSearch; multipart S3 upload | S15 |
| 2024-07 | 24.07: S3 rendition URLs via Visual Workflow smart names | S14 |
| 2021 | Version scheme switches to YY.MM (21.03 onward) | S23 |
| ≤ 2018 | REST v2 introduced alongside v1 (v2 examples date from 2017) | S1 Unverified (inferred from timestamps in the examples) |
| 2016 | API offered as REST, client-side and server-side (version 7.8 docs) | S25 |