Scope: the APIs of the Wedia DAM platform (marketed since June 2026 as Lyvio): the REST API delivered by the WXM_RESTAPI plug-in (/api/rest/…), the Media Delivery / transformation URLs (/api/wedia/dam/…), the Content Picker embed and the legacy JSON/imaging services. Iconosquare (a former group product, sold in 2026) is out of scope.
At a glance
API styles
REST/JSON with HATEOAS link sections S104. Four documented service families: DAM (
/api/rest/dam, auto-generated from the data model), DATA (/api/rest/data, explicitly configured custom resources), Media/imaging (/api/media, legacy) and JSON (/api/json, legacy, deprecated) S9 S10; plus Profile (/api/rest/profil), Mass import (/api/rest/massimport), App settings (/api/rest/appsettings) and user notifications (/api/rest/usernotif) S104 S18. Separate URL-driven delivery API `/api/wedia/dam/transformBase URL(s)
Current version(s) & deprecations
API version 2.4 (OpenAPI
info.version; apiversion in /api/rest/config) on engine 2026.4.0 S56 S60. Product versions follow CalVer YEAR.MAJOR.MINOR since 2021.3.0 (previously 11.x; major "11" unchanged for about ten years, vendor cites a strong backward-compatibility commitment) S29. Deprecated: legacy JSON services, "Extension Services" (replaced by API Business Services), session-based auth (disabled since 11.15), atk signature query token, restapiconsumer parameter S3 S5 S9.Auth methods
HTTP Basic (Wedia user credentials; vendor recommends it for testing only), JWT (sign-in → access + refresh tokens; Bearer header or cookies), Application tokens (key/secret created in the REST API admin dashboard, sent as Basic +
X-WEDIA-REST-APPLICATION header), OAuth2/OpenID Connect sign-in through configured providers, SSO delegation to the engine's SAML2/OAuth2 configs, optional sessionful mode (JSESSIONID + x-wedia-api-token cookies, since 2021.4.0) S3 S4 S5 S6 S7.Token lifetime / refresh
Defaults: short-life (access) token 1,200 s (20 min), long-life (refresh) token 86,400 s (24 h); optional
tokenMaxAge; HS256 by default (HS384/HS512 configurable) S8 S5. Refresh via GET/POST /api/rest/token; revoke via DELETE/api/rest/signout; access tokens cannot be revoked S5. Client can request a refresh-token expiry (exp, incl. unlimited, capped by server limits) at sign-in S5. Demo server exposes "tokentime":86400 S60.Scopes / permission model
Official spec
OpenAPI 3.0 generated per server at
/api/rest/doc/{dam,data,media,json}/swagger.json (UI: …/swagger.ui, …/swagger.redoc) S9. Demo-server copies archived on DAM Wiki: API spec downloads S56 S57 S58 S59. The Media Delivery API spec (/api/wedia/dam/?export=swagger) is Behind login S22 S60. No Postman collection found.Rate limits
Pagination
Webhooks / events
No outbound webhook API documented S1. Event logic is implemented server-side with Java plug-ins bound to triggers/workflow events S50 S45; a 2026 install guide mentions "integration webhooks" only as a possible side effect of triggers S51. In-app user notifications have a pull API S18. Video player emits client-side JS events S107.
Official SDKs
Authentication
| Mode | How | Notes |
|---|---|---|
| Basic | Authorization: Basic base64(login:password) on each call | Vendor: use for testing, over HTTPS only |
| Application token | Created in the REST API admin dashboard → key + secret used as Basic credentials, plus header X-WEDIA-REST-APPLICATION (optional X-WEDIA-REST-APPLICATION-USER) | "Application users" for unattended integrations; can be time-limited |
| JWT (since 11.15.0) | POST/api/rest/signin (form or multipart: login, password, optional application, userid, exp, cookieauth) → 201 with accessToken, refreshToken, signature, links to refresh/sign-out | Send Authorization: Bearer <accessToken>; refresh GET/POST /api/rest/token; revoke DELETE/api/rest/signout; check GET/POST /api/rest/validateToken |
| JWT cookie | cookieauth=true at sign-in → x-wedia-api-token cookie (+ x-wedia-api-tk, x-wedia-api-so) tied to JSESSIONID | Designed for browser <img> tags; CSRF-token control optional since 2022.6 S8 |
| OAuth2 / OIDC (since 11.16) | Provider configs (preconfigured Google, Microsoft Entra ID, LinkedIn) set in the REST API admin; client builds its login form from GET/api/rest/auth/config (no auth), then /api/rest/auth/login/{provider} → /api/rest/signin/{provider} returns the Wedia JWTs | Supports introspection/revocation endpoints and user-mapping rules (match/create/refuse) S6; demo lists LinkedIn and Google S61 |
| Engine SSO | ssoSAMLEnabled / ssoOAuth2Enabled plug-in flags delegate to engine SAML2/OAuth2 configurations (JIT user creation) | S7 S48 |
- MFA interplay: when "sign-in without MFA" is disabled, REST sign-ins with login/password are rejected, but applicative sign-in (application tokens) keeps working — relevant for PIM/CMS integrations S103.
- Access tokens are opaque to clients for any use other than calling the API; the signing secret is server-private and may rotate S5.
- Where credentials are created: application tokens and OAuth2 providers in the REST API admin dashboard (
/_plugins/WXM_RESTAPI/page/home.jspz), which needs a dedicated second-level account; rolesAdministrators,Developer,ApiOperators,ApiWatchers,ApiTestersetc. exist for API admin pages S3 S19.
Core resources
Paths below are relative to https://{tenant}.wedia-group.com. Resource type names (asset, folder, …) depend on each project's data model; the patterns are generic S12 S13. Counts from the demo DAM spec: 260 paths / 344 operations, 57 resource types S56.
| Resource | Endpoints | Notes |
|---|---|---|
| Catalog / discovery | GET/api/rest/dam (catalog of resource types), GET/api/rest/dam/data/{resource}/headers | Headers = field types, labels, editability, form structure S12 |
| Assets (read/search) | GET/api/rest/dam/data/{resource} (token list), GET…/{resource}/list (paged), GET…/{resource}/{id}, GET/api/rest/dam/{uniqueId}; facades GET/api/rest/dam/asset[/list], GET/api/rest/dam/asset/{mediaType}[/list] | Multiple types comma-separated (asset,legacy) S12 S104 |
| Assets (write) | POST/api/rest/dam/data/{resource}; PUT/PATCH…/{id} (or POST…/{id}/put//patch); bulk …/{id*}; DELETE…/{id} or …{/id*} | Create from binary, JSON, multipart or ZIP archive S12 S56 |
| Locks & work copies | POST…/{id}/lock, POST…/{id}/unlock, GET…/{id}/workcopy ($workcopy in spec) | Default lock timeout 30 s on demo S60 S12 |
| Workflows / statuses | GET…/{resource}/workflow, GET…/{id}/workflow, POST…/{id}/workflow (param workflowAction/action/statusId), bulk …/{id*}/workflow or by query | Requires tag rest_api_dam_workflow on the structure S17. Unverified Path order differs between docs (…/{id}/workflow S12) and spec/workflow page (…/workflow/{id} S17 S56) |
| Binaries & renditions | GET…/{id}/$binary, …/$variation, …/$player, …/$preview | Documented S12; not present as paths in the demo spec Unverified S56 |
| Folders, thesauri, lists | e.g. GET/api/rest/dam/data/folder/tree, …/assetgeography/tree, …/assetkeyword | Tree endpoints with depth, treepath, withSynonyms, withRelated S56 |
| Aggregates / facets | GET…/{resource}/aggs; withAggregates, aggfields, facets params | S12 S56 |
| Users / groups / roles | GET/api/rest/dam/data/user[...], usergroup (CRUD), role, userregistration (demo model) | S56; own profile via GET/PUT/PATCH /api/rest/profil/me S14 |
| Portals / brand center / collaboration | portal, portalbookmark, portaltheme, brandcenter, brandguideline, collaborativespace resource types (demo model) | S56 |
| Rights | assetrighttype, contract resource types (demo model) | Rights data model is project-specific S56 |
| Mass import (uploads) | /api/rest/massimport catalog; POST/GET/DELETE /api/rest/massimport/job[/{id}]; POST/api/rest/massimport/item; job items, workflow | Asynchronous jobs + items S15 |
| Custom business endpoints | "API Business Services (Extensions)" (Java), custom REST endpoints | S1 S110 |
| User notifications | `GET /api/rest/usernotif[/list | /unread |
| Ops | GET/api/rest/status (text OK), GET/api/rest/config, GET/api/rest/whoami | Public on demo S60 S19 S20 |
| Delivery (transform) | GET/HEAD /api/wedia/dam/transform/{uuid}/{basename}[.ext]?t=… (legacy /transform/{type}/{id}/…) | Requires the Media Delivery module S22 |
| Delivery (named renditions) | GET/api/wedia/dam/variation/{uuid}/{variation[,fallback…]}/{basename} | S22 |
| Players | api/wedia/dam/player/fo.player with URL params (autostart, canLogPlaying, …) | S107 |
| Brand Control (AI) | e.g. POST/api/wedia/brandcontrol/brandguideline/criteria/generate?id=… | Internal service documented in a feature page S44 |
Data model
- Everything is a typed resource ("data structure"/object) defined per project in the engine; DAM services are auto-generated from structure tags, so endpoints and fields differ between customers and cannot be reused as-is from one DAM to another S12 S13.
- Several asset libraries can coexist (e.g.
asset,product_images,pimasset) S22 S56. - Identifiers: numeric
idper resource type, plus a cross-type unique id / uuid (e.g. GET/api/rest/dam/{uniqueId}), which is also the recommended public identifier in delivery URLs because it hides the database structure S104 S22. - Response envelope:
$.response.data+ resource-type description + optional headers + HATEOASlinksS104. - Localized fields (e.g. captions per
EN/FR/ES); language picked fromlang,Accept-Languageor the user profile; unsupported language → 406 S3. - Relations/taxonomies are linked resources (keywords, geography trees, thesauri with synonyms and related terms) S56 S106.
- Files are properties of the resource (
binary,source,poster…); renditions are named variations/presets (built-inthumbnailTiny100 px,thumbnailSmall200 px,thumbnailBig600 px,thumbnailScreen2000 px wide,thumbnailReal,poster,stripped_background,animated*,ia_preview_video_source…) S22. - Versions:
withVersions/queryVersionsparameters S56; version management UI since 2024.5.0 S38.
Search & querying
- Full-text:
findparameter;suggestfor autocompletion;sortByRelevance;findinfilecontentS56. Classic engine uses TF-IDF/vector-space relevance (Lucene-style) S105. - Structured filters: JSON Query in
query(or headerX-WEDIA-QUERY),rootqueryfor trees S56:- Operators (short/long):
eq,neq,gt,gte,lt,lte,e/empty,ne/notempty,in,nin,sw,nsw,ew,new,ct,nct,dof/descendantof,ndof,ovrl/overlap; combinatorsand,or,not. - Dates as epoch ms or ISO strings; functions
now(±n),ts(…); sub-queries on related objects;similarimage/sim(hash-based similar image search); workflow state queries; variables${…}and surfer (current user) properties.
- Operators (short/long):
- Sorting:
orderby=prop1 asc, prop2 descS56. - Facets/aggregations:
withAggregates,aggfields,facets; count-only viawithData=false&withAggregates=falseS56. - Grouping:
group,grouplevel,groupcount(hierarchical/collapsed) S56. - Projection:
props,techprops,headers/dataHeadersto reduce payloads S56. - Page size: default 50, max 200; deep paging via continuation tokens (
after) on the infinite-list endpoint S56. - AI Search (2026.4.0): semantic/vector search combined with classic search inside one Elasticsearch query, surfaced through query flags — the portal runs a "shadow cursor" in
wedia-vue; there is no separate AI search endpoint S43 S30. - Conditional requests: ETags on catalogs, headers, API docs and on structures tagged
REST_API_ETAGS16.
Uploads & binaries
- Single create: POST
/api/rest/dam/data/{resource}with the raw binary (anyContent-Typeexceptapplication/json; filename required, its extension drives type detection), JSON metadata, ormultipart/form-data; a ZIP creates several resources; file properties may also be set by URI (prop_binary=<url>) instead of uploading S56. - Mass import: create a job (POST
/api/rest/massimport/job), add items (POST/api/rest/massimport/item, binary in body withcontent-dispositionfilename, or multipart fieldbinary), qualify items (metadata, asynchronous), then validate/publish (asynchronous object creation); items can be selected by id or JSON Query; simulation view of the final object available S15. - Chunked/resumable or presigned uploads: Not public (not found).
- Maximum file size: Not public (not found). Allowed extensions can be restricted per project S1.
- Downloads:
…/{id}/$binaryand…/$variationon the REST API S12; public/CDN delivery via/api/wedia/dam/variation/{uuid}/{variation}/{basename}S22. - On-the-fly transforms (
/api/wedia/dam/transform/…): chainedt=operationsresize,crop(box or focal pointfx/fy),fill,setbg(incl. colour replace withfuzz),iwatermark(image watermark, since 2024.4.0),extend,smartcrop(focal point,ratiow/ratioh); pixel or proportional values; output format from the extension (jpg,png,webp,heic,avif,pdf) or automatic (WebP for modern browsers) when omitted; SEO basename free S22 S37 S46. - Caching: key = asset + normalized transform (parameter order ignored); invalidated when the original changes S22. Observed: transforms served with
Cache-Control: public, max-age=3600and CloudFrontVia/X-Amz-Cf-Popheaders; named variations withmax-age=2592000(30 days) andEdge-Cache-TagS60. - Legacy Imaging engine: JSON command sets and presets (
autoorient,clip,crop,density,fit,format,layout,lresize,metadata,pad,resample,rotate,strip,thumbnail,watermark…) at/api/mediaS21 S58. - Security: transform/variation access follows
objectfile.sendFilesecurity; since 2025.2.0 renditions are not public by default in Media Delivery S22 S35. CORS on/api/wedia/dam/variation/*restricted to controlled origins since 2024.3.0 S36.
Events & webhooks
- Outbound webhooks: none documented — no webhook registration resource in the specs or the REST API docs S56 S1.
- Server-side extensibility instead: Java plug-ins (packaged as NAR or deployed via the admin) executed on triggers (e.g.
onBeforeInsert…,onAfterUpdate…), workflow events and business services S50 S45. Integrators needing push notifications therefore build a plug-in or poll. - Polling aids: JSON Query on dates (e.g.
{"modified":{"gte":"now(-1)"}}), ETags S56 S16. - In-app notifications:
/api/rest/usernotif(pull) S18; custom notifications configurable S1. - Client-side: the video player accepts actions and emits playback events for page scripts S107.
Limits & quirks
- Per-tenant API surface — generated from the customer's data model; always read the customer server's own
/api/rest/doc/damS9 S12. max≤ 200; default 50 S56. No published rate limits, concurrency caps or 429 semantics — Not public.- Method override for proxies that block PUT/PATCH/DELETE:
POST+X-HTTP-Method-Override/X-HTTP-Method/X-METHOD-OVERRIDES56;…/putand…/patchPOST aliases also exist S12. stateparameter echoed back in responses to correlate async calls S3.debugparameter: stack traces only in development mode (since 11.14.2) S3. The demo server runs indevmode S60.- Error body: extended code
HTTP/specific(e.g.404/100),message,error_uri,errtag, support contact details S56; common codes listed (e.g.503/42maintenance,406/2unacceptable language) S3. - JSON Query multi-value
eqmeans OR; root object means AND S56. - Delivery URLs with
{type}/{id}expose DB structure — vendor recommendsuuidS22. atksignature query token for<img>binaries is deprecated → use JWT cookies S5.- Figma picker: no SSO (direct login only) S27; Canva picker (pre-2026.4) could not be disabled by licence as it calls the REST API directly S25.
- Unverified Documentation age: several REST pages date from 2019–2023 (e.g. auth modes 2021, OAuth2 2023) while the engine is at 2026.4 — behaviour may have evolved; the generated OpenAPI is the most current reference S1.
SDKs, tools & code samples
| Tool | Language | Source | Status |
|---|---|---|---|
wedia-vue | JavaScript (Vue plugin for the REST API: cursors, search, auth) | npm, maintainer is Wedia's CTO; 861 versions since 2018-12, latest 2026-09-28 | Active; no public repo or README link S97 |
Wedia Content Picker (/asset-picker/wedia-content-picker.js) | JavaScript, iframe + onPick callback returning asset data, renditions, video embed code | Served by each tenant; test instance public | Active S23 S101 |
Drupal module wedia | PHP (Drupal 10/11) | drupal.org, v2.0.1 (2026-01-08), maintainers incl. Wedia CTO | "Minimally maintained", not covered by Drupal security advisories S98 |
| Adobe CC extension / Dylation UXP plugin | Adobe Photoshop, Illustrator, InDesign | Adobe Exchange | Active (UXP since 2026.3.0) S26 S31 |
| Figma plugin | Figma | Figma Community | Active S27 S100 |
| Java engine API / API Business Services | Java | Javadoc behind admin login | S22 S1 |
| ReDoc CLI bundling tip | Node.js | Vendor tip to produce offline HTML docs | S10 |
No official Python/PHP/.NET/Java client SDK and no public GitHub organisation found (the wedia GitHub user is unrelated) .
Changelog of the API
| Date | Change | |
|---|---|---|
| 2026-09-16 | 2026.4.0: AI Search via query flags; fix for video subtitle creation via API; Canva picker rebuilt on Canva SDK | S30 |
| 2026-06-08 | 2026.3.0: product named Lyvio; Adobe picker migrated CEP → UXP with SSO | S31 |
| 2026-01-23 | Mass import item format docs updated (JSON format introduced in 2025.2.0 for asset-based items) | S15 |
| 2025-10-24 | 2025.4.0: new multi-tenant Media Delivery architecture on AWS Lambda (MediaCloud 2) replacing imaging servers, first for new clients | S34 S52 |
| 2025-04-11 | 2025.2.0: Media Delivery renditions no longer public by default | S35 |
| 2024-10-11 | 2024.4.0: iwatermark transform | S37 |
| 2024-06-28 | 2024.3.0: CORS on /api/wedia/dam/variation/* restricted to controlled origins | S36 |
| 2024-02-23 | 2024.1.0: MFA; REST login/password sign-in rejected when MFA-only is enforced (application sign-in unaffected) | S39 S103 |
| 2022 (2022.1) | API documentation portal "version 2" (tag filtering) | S9 |
| 2022 (2022.6) | Optional CSRF-token control for cookie auth | S8 |
| 2021 (2021.4.0) | Sessionful authentication mode | S3 |
| 2021-04 | Switch from SemVer 11.30.x to CalVer (2021.3.0) | S29 |
| 2021 (2021.2.0 / 11.30) | ETags on REST endpoints | S16 |
| 11.27 (2020) | User notifications API; restapiconsumer dropped | S18 S3 |
| 11.16 | OAuth2 sign-in | S6 |
| 11.15 | JWT authentication; session-based auth disabled (CSRF risk) | S5 S3 |