> This page is for Workforce.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.merge.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.merge.dev/_mcp/server.

# Adobe Experience Manager

**Authentication:** OAuth or server-to-server credentials. See [Magic Link](/merge-agent-handler/features/magic-link) for the runtime auth flow, or [Application credentials](/merge-agent-handler/admin-setup/add-oauth-credentials) to bring your own OAuth app.

## Sample use cases

* Search the DAM for product shots tagged `spring-2026` and list any missing alt text in their metadata.
* Import the hero image from `https://cdn.acme.com/launch/hero.png` into the Campaigns collection and report when the import job finishes.
* Pull the published content fragment at `/content/dam/acme/faq/shipping` and summarize what changed since last quarter.

## Available Tools

#### delete_asset

Delete an asset from the DAM. Use list_folders or search_assets to find asset IDs. Referenced assets are refused unle...

#### search_assets

Search DAM assets by text (full-text, hybrid, or natural language) and structured term, range, and exists filters, wi...

#### get_asset_job_status

Get the state of a background asset job (QUEUED, PROCESSING, COMPLETED, COMPLETED_WITH_ERRORS, FAILED). Use the job.j...

#### get_asset_metadata

Get an asset's metadata: editable assetMetadata (dc:title, keywords, ...) and read-only repositoryMetadata (name, pat...

#### update_asset_metadata

Edit an asset's assetMetadata with JSON Patch operations (add, replace, remove, copy, move, test). Call get_asset_met...

#### list_asset_relations

List an asset's relations to other assets, optionally filtered to some relation types. Use list_asset_relation_types ...

#### create_asset_relations

Relate an asset to other assets, each with a relation type such as 'sources' or 'derived'. Use search_assets or list\_...

#### list_asset_relations_by_type

List an asset's relations of one relation type. Use list_asset_relation_types to find the types, and list_asset_relat...

#### delete_asset_relations_by_type

Remove all of an asset's relations of one relation type. Use list_asset_relation_types to find the types. To remove a...

#### delete_asset_relation

Remove one relation between two assets. Use list_asset_relations to find the relation_type and related_asset_id. To c...

#### list_asset_relation_types

List the relation type names an asset has (e.g. sources, derived). Use the values with list_asset_relations, list_ass...

#### list_asset_renditions

List an asset's static renditions with name, MIME type, size, and pixel dimensions. Use list_folders or search_assets...

#### import_asset_from_url

Import 1-300 files from URLs into a DAM folder as new assets, with optional metadata. Use list_folders to find the ta...

#### get_import_job_status

Get the state and progress counters of a URL import job. Use the job_id returned by import_asset_from_url. Once state...

#### get_import_job_result

List per-file outcomes of a URL import job, including the new asset ID of each imported file and the error for each f...

#### list_collections

List Dynamic Media asset collections (curated groups of assets and collections) with their titles. Paginate with curs...

#### create_collection

Create an asset collection with a title and initial assets/collections. Use search_assets for asset IDs. May run asyn...

#### get_collection

Get an asset collection's title, description, repository metadata and ETag. Use list_collection_items for its content...

#### update_collection

Update an asset collection's title, description or custom metadata. Pass etag from get_collection, or null to fetch i...

#### delete_collection

Delete an asset collection; the assets in it are not deleted. Pass etag from get_collection, or null to fetch it. May...

#### list_collection_items

List the assets and sub-collections in an asset collection, plus the ETag that update_collection_items needs. Paginat...

#### update_collection_items

Add or remove assets/collections in an asset collection. Pass etag from list_collection_items, or null to fetch it. U...

#### get_collection_job_status

Get the state (PROCESSING, COMPLETED, FAILED) of an asynchronous collection job started by create_collection, delete\_...

#### list_asset_smart_crops

List the Dynamic Media smart crops (named crop regions with aspect ratios) defined for an image or video asset. Pagin...

#### list_image_presets

List the Dynamic Media image presets (named output size/format settings) configured for image delivery. Paginate with...

#### create_asset_archive

Request a zip archive of one or more assets and chosen renditions for download. Runs asynchronously: poll get_archive...

#### get_archive_status

Get the state of an asset archive started by create_asset_archive. When COMPLETED, download_urls lists the archive fi...

#### list_content_sources

List every Content AI content source (AEM author/publish, acquisition crawls, custom indexes) with its searchable spa...

#### create_acquisition_source

Create a Content AI acquisition content source that crawls a website into a searchable index. Returns its slug 'name'...

#### list_acquisition_sources

List Content AI acquisition (website crawl) content sources with their full crawl configuration. Filter by status (AC...

#### get_acquisition_source

Get one Content AI acquisition content source by name: crawl config, status, searchable spaces, and its ETag for upda...

#### update_acquisition_source

Fully replace an acquisition source's description and crawl config; omitted optional parts are cleared. Prefer patch\_...

#### patch_acquisition_source

Change selected fields of an acquisition source (merge patch). Set status ARCHIVED to delete it: crawls stop and cont...

#### trigger_acquisition_run

Start an on-demand crawl of an acquisition content source now. Fails with a conflict if a run is already in progress....

#### get_latest_acquisition_run

Get the state and metrics of the most recent crawl run of an acquisition content source. Use after trigger_acquisitio...

#### search_content_sources

Search documents in one Content AI content source with fulltext, semantic (vector), filter, or hybrid queries, plus s...

#### generate_search_answer

Ask a natural-language question and get an AI-generated answer grounded in one Content AI content source, with the so...

#### list_published_fragments

List Content Fragments as delivered by the publish (default), preview or author tier, optionally under a folder path....

#### get_published_fragment

Get a delivered Content Fragment by ID from the publish (default), preview or author tier, optionally embedding its r...

#### get_published_fragment_by_path

Get a delivered Content Fragment by its exact repository path (e.g. /content/dam/site/en/article) from the publish (d...

#### list_published_fragment_references

List the resources (fragments, assets, pages, tags) a delivered Content Fragment references, direct or all levels. Us...

#### get_published_fragment_model

Get the Content Fragment Model a delivered fragment is based on, from the publish (default), preview or author tier. ...

#### list_published_fragment_variations

List the variations of a delivered Content Fragment with their field values. Paginate with cursor. Use list_published...

#### get_published_fragment_variation

Get one variation of a delivered Content Fragment, optionally embedding its references. Use list_published_fragments ...

#### list_published_variation_references

List the resources a delivered fragment variation references, direct or all levels. Use list_published_fragments for ...

#### list_published_fragment_referenced_by

List the pages and fragments that reference a delivered Content Fragment (where it is used). Paginate with cursor. Us...

#### list_published_models

List Content Fragment Models available on the publish (default), preview or author delivery tier. Paginate with curso...

#### get_published_model

Get a Content Fragment Model's title, path and tags from the publish (default), preview or author delivery tier. Use ...

#### get_model_json_schema

Get the JSON Schema (2020-12) describing a Content Fragment Model's fields: names, types and descriptions. Use it to ...

#### list_published_model_fragments

List the delivered Content Fragments based on one Content Fragment Model. Paginate with cursor. Use list_published_mo...

#### list_folders

Browse the DAM by path: returns the folder itself plus its children. This is the main way to find folder and asset ID...

#### get_folder

Get a folder by ID with its children (folders by default; add 'ASSET' to types for assets). Use list_folders to find ...

#### create_folders

Create up to 10 DAM folders by full path; missing parent folders are created too. Returns the new folder IDs, and per...

#### delete_folders

Delete up to 10 DAM folders by path. Use list_folders to find paths; use delete_folder when you have an ID. Non-empty...

#### delete_folder

Delete one DAM folder by ID. Use list_folders to find folder IDs; use delete_folders to delete by path. Non-empty fol...

#### get_folder_job_status

Get the state of a background folder job (PROCESSING, COMPLETED, COMPLETED_WITH_ERRORS, FAILED). Use the job.job_id r...

#### get_folder_job_result

Get the per-folder results of a finished background folder job (created, deleted, or failed folders). Use the job.job...

#### list_forms

List Core Components Adaptive Forms available to the user, with IDs and repository paths. Older Foundation-based form...

#### get_form_definition

Get an Adaptive Form's definition: its field model, data schema, and accepted submission types, optionally localized....

#### get_form_data

Get prefill or previously saved data for an Adaptive Form, optionally a specific submission by data_ref (the submissi...

#### submit_form

Submit data to an Adaptive Form as JSON, running its server-side validation and submit action. Returns the submission...

#### create_form_callback

Register a callback URL that AEM Forms calls when an Adaptive Form is submitted (Workfront Fusion). Returns the callb...

#### get_form_callback

Get a registered AEM Forms callback by ID. Callback IDs come from create_form_callback; there is no list endpoint.

#### update_form_callback

Replace a registered AEM Forms callback (URL, status, trigger, target service). All required fields must be sent agai...

#### delete_form_callback

Delete a registered AEM Forms callback so AEM stops calling its URL. Callback IDs come from create_form_callback.

#### list_fragment_references

List the assets, fragments, pages and experience fragments a Content Fragment directly references. Use get_fragment_r...

#### get_fragment_references_tree

Get every reference of a Content Fragment, recursively, as a tree of pointers plus a map of hydrated references. Use ...

#### list_fragment_referenced_by

List the pages, experience fragments and Content Fragments that reference one fragment, with pagination. Use list_ref...

#### list_referenced_by

For several Content Fragment paths at once, list the pages, experience fragments and fragments that reference each. U...

#### list_fragment_translations

Get a Content Fragment's locale and its language copies (path, locale, status). Use list_language_copies for several ...

#### list_language_copies

For several Content Fragment or folder paths at once, get each one's locale and language copies. Use list_fragment_tr...

#### list_languages

List the languages a Content Fragment can get language copies in (its site's language roots). Use before start_workfl...

#### list_workflows

List Content Fragment workflows (publish, unpublish, move, rename, translation structure), newest first, optionally f...

#### start_workflow

Start a Content Fragment workflow: publish-folder, unpublish-fragments, unpublish-models, move-fragments, rename-frag...

#### get_workflow

Get a Content Fragment workflow's state (RUNNING, COMPLETED, ABORTED...), payload and any invalid fragments. Get the ...

#### list_fragment_tags

List the tags applied to a Content Fragment, plus the etag that replace_fragment_tags and remove_fragment_tags take. ...

#### add_fragment_tags

Add existing AEM tags to a Content Fragment, keeping the tags it already has. Use replace_fragment_tags to set the ex...

#### replace_fragment_tags

Replace all tags on a Content Fragment with the given tag IDs. Use add_fragment_tags to keep existing tags. The etag ...

#### remove_fragment_tags

Remove every tag from a Content Fragment. To drop only some tags, use replace_fragment_tags with the tags to keep. Th...

#### list_variation_tags

List the tags applied to one variation of a Content Fragment, plus the etag that replace_variation_tags and remove_va...

#### add_variation_tags

Add existing AEM tags to a Content Fragment variation, keeping the tags it already has. Use replace_variation_tags to...

#### replace_variation_tags

Replace all tags on a Content Fragment variation with the given tag IDs. The etag from list_variation_tags is fetched...

#### remove_variation_tags

Remove every tag from a Content Fragment variation. To drop only some, use replace_variation_tags. The etag from list...

#### list_fragments

List Content Fragments, optionally under a folder path, with pagination. Use search_fragments instead to filter by st...

#### search_fragments

Search Content Fragments by path, status, model IDs, tags, locale, metadata, full text, and created/modified/publishe...

#### get_fragment

Get a Content Fragment with its fields, variations, tags and references, plus its etag for update_fragment, patch_fra...

#### create_fragment

Create a Content Fragment from a model in a folder and return it with its new id and etag. Use list_models to find mo...

#### update_fragment

Replace a Content Fragment's title, description and field values in full; anything not sent is cleared. Use patch_fra...

#### patch_fragment

Edit parts of a Content Fragment with JSON Patch operations (e.g. replace /title) and return the updated fragment and...

#### delete_fragment

Permanently delete a Content Fragment. Fails for PUBLISHED or MODIFIED fragments; use delete_and_unpublish_fragment f...

#### delete_and_unpublish_fragment

Delete a Content Fragment and unpublish it from the publish tier in a background workflow; track it with get_workflow\...

#### update_fragment_checkout_state

Check out a Content Fragment (lock it for the current user) or check it in (release the lock). Fails with a conflict ...

#### get_fragment_preview_url

Get the preview URL of each variation of a Content Fragment, as configured on its model. Use list_fragments or search...

#### publish_fragments

Publish up to 50 Content Fragments by ID or path, now or at a scheduled time, optionally with references in chosen st...

#### get_fragment_publication_status

Get the scheduled publish or unpublish operation pending for one Content Fragment. Use get_fragments_publication_stat...

#### get_fragments_publication_status

Get scheduled publication status for up to 50 Content Fragments in one call, instead of calling get_fragment_publicat...

#### copy_fragment

Copy a single Content Fragment into an existing folder and return the copy with its new id. Use copy_fragment_tree to...

#### copy_fragment_tree

Copy a Content Fragment together with the fragments it references, in the background. Returns a job; poll its job_id ...

#### find_and_replace_fragments

Find and replace text in the text and long-text fields of up to 20 Content Fragments. Set dry_run to preview results ...

#### get_fragment_model

Get the Content Fragment Model a fragment is based on, including its field definitions and etag. Use get_model when y...

#### change_fragment_model

Switch a Content Fragment to a different Content Fragment Model. Fields that do not fit the new model can leave it in...

#### get_fragment_model_ui_schema

Get the editor UI schema and static field schema of the model behind a Content Fragment. Use get_model_ui_schema when...

#### get_fragment_metadata

Get a Content Fragment's metadata properties, its metadata form ID, and the etag for update_fragment_metadata. Use li...

#### update_fragment_metadata

Update a Content Fragment's metadata properties with JSON Patch operations. Only properties in its metadata schema ca...

#### get_fragment_permissions

List the actions (READ, EDIT, DELETE, PUBLISH, CHECKOUT, ...) the current user may take on one Content Fragment. Use ...

#### list_launches

List content fragment launches with pagination. Filter server-side by created, modified, published, promoted, or live...

#### create_launch

Create a launch (a working copy of content fragments for future changes). Runs as a background job: poll get_launch_j...

#### get_launch

Get a launch's details and its ETag (needed by update_launch, delete_launch, update_launch_sources, and rebase_launch...

#### update_launch

Replace a launch's properties (title, description, depth, production readiness, live date, publish agent). Full repla...

#### delete_launch

Delete a launch. Runs as a background job: poll get_launch_job_status with the returned job_id. Use list_launches to ...

#### list_launch_sources

List the content fragment IDs that are sources of a launch, with pagination. Use get_launch_content for the launch's ...

#### update_launch_sources

Add or remove content fragment sources of a launch. Runs as a background job: poll get_launch_job_status with the ret...

#### rebase_launch

Rebase a launch onto production (or another launch), pulling in source changes. Background job: poll get_launch_job_s...

#### promote_launch

Promote a launch's changes into production (or another launch), overwriting the target fragments. Background job: pol...

#### get_launch_diff

Start computing field-level differences between a launch and production (or another launch). Background job: poll get...

#### get_launch_content

List the content fragment copies inside a launch, with their source IDs and last promote/rebase info. Page with curso...

#### list_launch_jobs

List the background jobs of a launch (create, edit, promote, rebase, diff, delete) with status, progress, and timesta...

#### get_launch_job_status

Check whether a launch background job is still running. When completed is true, call get_launch_job_result. The job_i...

#### get_launch_job_result

Get the outcome of a finished launch job: final state, errors, the launch details (e.g. the new launch ID for create)...

#### list_models

List Content Fragment Models with pagination (cursor from page_info). Use search_models instead to filter by name, fo...

#### search_models

Search Content Fragment Models server-side by name, technical name, configuration folder, status, replication status,...

#### get_model

Get a Content Fragment Model by ID, including its field definitions and its ETag for update_model or delete_model. Us...

#### create_model

Create a Content Fragment Model with field definitions in a configuration folder. Set dry_run to validate the payload...

#### update_model

Edit a Content Fragment Model with JSON Patch operations (rename, add/remove/replace fields). Pass the etag from get\_...

#### delete_model

Permanently delete a Content Fragment Model. Fails with a conflict if fragments still use it. Use list_models or sear...

#### copy_model

Copy a Content Fragment Model into another existing configuration folder, optionally renaming it. Returns the new mod...

#### publish_models

Publish up to 50 Content Fragment Models, now or at a scheduled time, by starting an AEM workflow. Returns the workfl...

#### get_models_publication_status

Get the scheduled publish/unpublish status for up to 50 Content Fragment Models. Use after publish_models with a sche...

#### get_model_ui_schema

Get the editor UI schema (tabs, groups, conditional fields) of a Content Fragment Model and its ETag for update_model...

#### update_model_ui_schema

Replace the editor UI schema and constraints of a Content Fragment Model. Read the current one with get_model_ui_sche...

#### list_model_tags

List the tags applied to a Content Fragment Model, with the ETag that replace_model_tags and remove_model_tags need. ...

#### add_model_tags

Add existing tags to a Content Fragment Model, keeping its current tags. Use replace_model_tags to overwrite the set....

#### replace_model_tags

Replace all tags on a Content Fragment Model with the given tags. Use add_model_tags to keep existing tags, list_mode...

#### remove_model_tags

Remove every tag from a Content Fragment Model. To drop only some tags, use replace_model_tags with the ones to keep....

#### get_metadata_schema

Get the metadata schema bound to a content fragment or DAM folder (resolved up the folder tree) and all its metadata ...

#### bind_metadata_schema

Bind a metadata schema to a content fragment or DAM folder (children inherit it), or pass a null schema_id to unbind ...

#### get_domain

Get the base domain URL of each AEM tier (author, publish, preview) for this environment.

#### check_permissions

Check which actions (read, edit, delete, publish, create fragment/model, ...) the current user may perform on fragmen...

#### execute_graphql_query

Run a GraphQL query against the Content Fragment GraphQL endpoint, for reading fragments across models in one call wi...

#### create_batch

Run several Sites API write calls (POST/PUT/PATCH/DELETE) together in the background. Returns a job_id; poll it with ...

#### list_batches

List batch requests created with create_batch, filtered by state, with pagination (cursor from page_info). Use get_ba...

#### get_batch

Get a batch request's status and each sub-request's status code and body. Use the job_id from create_batch or an ID f...

#### create_translation_project

Create a translation project with one job per target language, optionally adding content and starting translation. Ru...

#### get_translation_project

Get a translation project with its settings, status, and jobs (job IDs for the translation job tools). No list endpoi...

#### update_translation_project

Replace a translation project's properties, including adding or dropping target languages and changing the TIF config...

#### delete_translation_project

Delete a translation project and its jobs. Project IDs come from create_translation_project.

#### add_translation_project_content

Add content to (or remove it from) the DRAFT jobs of every target language in a translation project, optionally maske...

#### run_translation_jobs_command

Run START, COMPLETE, CANCEL, or ARCHIVE on all jobs of a translation project, optionally masked to some target langua...

#### get_translation_job

Get a translation job (one target language) with its status and content items, including source paths for accept/reje...

#### delete_translation_job

Delete one translation job from a project. Job IDs come from get_translation_project (translation_jobs); project IDs ...

#### run_translation_job_command

Run START, COMPLETE, CANCEL, or ARCHIVE on one translation job. Use run_translation_jobs_command for all jobs of a pr...

#### update_translation_job_content

Add content to or remove content from one DRAFT translation job. Use add_translation_project_content for all jobs of ...

#### accept_translation_job_content

Accept translated content that is READY_FOR_REVIEW in a translation job. Use get_translation_job to find the source p...

#### reject_translation_job_content

Reject translated content that is READY_FOR_REVIEW in a translation job, with an optional comment. Use get_translatio...

#### start_language_copy_sync

Start syncing language copies of a site or asset path from its source, overwriting their content. Returns the sync pr...

#### get_language_copy_sync

Get the status of a language copy sync process. The sync ID comes from start_language_copy_sync.

#### update_language_copy_sync

Suspend or abort a RUNNING language copy sync process. The sync ID comes from start_language_copy_sync; check its sta...

#### get_translation_async_status

Get the status of an asynchronous translation operation and the resources it affected (new project and job IDs). The ...

#### list_fragment_variations

List a Content Fragment's variations (name, title, field values). Use search_fragment_variations to filter by status ...

#### create_fragment_variation

Create a new variation of a Content Fragment with a title and optional description. Returns the variation, including ...

#### search_fragment_variations

Search a Content Fragment's variations by status (NOT_PUBLISHED, PUBLISHED, MODIFIED) and by created/modified/publish...

#### get_fragment_variation

Get one variation of a Content Fragment with its field values, tags, and references, plus the etag that update_fragme...

#### update_fragment_variation

Edit a Content Fragment variation's title, description, or field values with JSON Patch operations. Call get_fragment...

#### delete_fragment_variation

Permanently delete a variation from a Content Fragment, optionally unlinking references to it. The etag from get_frag...

#### list_variation_references

Get the tree of assets, fragments, and pages referenced by one Content Fragment variation. Use list_fragment_variatio...

#### list_fragment_versions

List the saved versions of a Content Fragment (ID, title, label, comment, creator, date). Version IDs feed get_fragme...

#### create_fragment_version

Save the current state of a Content Fragment as a new version, with an optional label and comment, so it can be resto...

#### get_fragment_version

Get the full contents of one saved version of a Content Fragment (fields, variations, tags, references) plus the etag...

#### delete_fragment_version

Permanently delete one saved version of a Content Fragment; the fragment itself is unchanged. The etag from get_fragm...

#### restore_fragment_version

Replace a Content Fragment's current content with a saved version. Unsaved current content is lost, so call create_fr...