Prerequisite knowledge

  • Understanding of AEM Mobile
  • Knowledge of creating and publishing content through the standard On-Demand Portal

Required products

  • AEM Mobile


The Adobe Experience Manager On-Demand Services APIs allow a third-party developer to integrate with the On-Demand Services. These services allow you to:

  • Manage articles
  • Manage collections
  • Manage products
  • Manage push notifications

The On-Demand Services APIs (previously called "Content Producer Service APIs") are the same APIs used by the On-Demand Portal (

Adobe Digital Publishing Solution Content Producer Service APIs

Integration with AEM authoring

You can use AEM to produce content for AEM Mobile apps. Contact your Adobe representative for more information.

Third party integrations

For the following editorial workflow systems, Content Management Systems (CMS), and web-based authoring solutions, integrations are available (from Adobe partners):

CMS Systems

Web-based authoring
Workflow Systems

Integration video overview

Klaasjan Tukker and Mike Yang delivered this presentation about advanced workflow possibilities at the MAX 2015 conference:

Advanced Workflow Possibilities with the Adobe APIs (1:25:57)


To start working with the On-Demand Services API, download the files listed below.


By downloading the software listed below, I acknowledge that I have read and agreed to the terms of the APIs for AEM Mobile Services License, the Terms of Use, and the Adobe Online Privacy Policy.


This .zip file contains the following items:

  • API documentation
  • JSON schema definitions
  • Code examples
  • InDesign scripting examples
  • API key request form


How to use the API documentation

To view the API documentation (created with Swagger), unzip the files in a folder on your webserver (for exampe MAMP).

If the hosted URL to the swagger documentation is http://localhost:8888/aemmobile-swagger, you can skip the following step.

Open the file ‘service.json’ and modify line #55 to set the basePath to the host+path where your documentation can be accessed. For example:

#53     "contact": ""
#54   },
#55   "basePath": "http://localhost:8888/your-custom-path"
#56 }

Open your web browser and browse to the location where you deployed the documentation. The On-Demand Services API should be visible.


Set up your project, roles, and users

Set up a project, create roles, and grant access to users. For more information, see the following help articles:

Good practice is to avoid using the same Adobe ID as one that has been granted ‘Master Account’ or ‘Full project’ administration rights. Create an Adobe ID that has access only to the operations that you want to allow to happen through the On-Demand Services API.


To run the examples below, make sure to start with a new project.

API keys

To access the On-Demand Services API and to integrate with third-party systems, you need an API key.

Requesting an API key

To access the On-Demand Services API, you need to request an API key. To request the API key, complete the PDF form. Send the completed form to Adobe Developer Support:


For more information about when you need an API key or when to use an existing one, see AEM Mobile API key usage.

Generate the device_id and device_token

Once you have received your API key, you can generate the device_id and device_token. Go to and do the following:

  • Provide the API Key
  • Login with an AdobeID that you requested to whitelist (on the request form)

If all conditions are met, a device_id and device_token will be generated.

How to use the example files

Unzip the examples and change the standard values to reflect your account and API keys. Make sure you have created a fresh project in the on-demand portal and assigned a role to the Adobe ID that will be used to communicate with in the API examples.


  • config/credentials.php

Change/add the values for ‘client_id' (Your API Key), 'client_secret', 'device_token', 'device_id' (from the AEX service).

Set the value for 'client_version' ; this is to identify your 'system' in communication with the On-Demand Services API. For example, 'aemmobile-learn-api-doc-1.0'


  • demo/01_get_access_token.php

If set up corectly, the response should give you an 'access_token'. Use this access_token in the follow-up service calls.


  • config/credentials.php

Add the value for the 'access_token'.


  • demo/02_get_user_permissions.php

If set up correctly, the response should provide a list of projects that the Adobe ID (for which the device_id/device_token was generated) has access to.

Select the project that you want to interact with. (This should be a new, recently created project.) The project identification is a GUID such as '8dbeb5da-ca73-d0da-b0b0-885fb83e7ae8'.


  • Config/parameters.php

Update 'publication_id' with your project ID, obtained above.


  • demo/03_update_home_collection.php

If set up correctly, this will bring the top-level collectino to a publishable state: uploading thumbnail and background image, setting the product ID, and associating the default layout.


  • config/parameters.php

If the target project is a 2 top-level collection, please update the value of 'collection_home_name' from 'topLevelContent' to 'topLevelTabletContent' for tablets (or 'topLevelPhoneContent' for phones).

You are now ready to run the rest of the examples. When you are running the examples, keep a browser with the on-demand portal open on the ‘Content and Layouts’ section for your projects. You can see the changes happening live in your browser, while you execute the examples.


Create articles

The content for the articles can be created with HTML or with InDesign.

HTML articles

Articles created with HTML can use CSS/JS to visually style the content and make them responsive. All HTML content should be in the same folder (subfolders allowed). The HTML files will be packaged into a ‘zip file’ with a manifest.xml file. The manifest file lists which articles are part of the article-package and contains the MD5 checksum. (See Creating HTML articles for AEM Mobile.)

To generate the article files from a folder, you can either use the desktop utility or use the example packager in ‘class/manifest.php’.

InDesign articles

Using Adobe InDesign CS6 or later, you can create fixed layout article files. Using the Digital Publishing plugin, you can export InDesign content to an article file. (See Creating AEM Mobile articles in InDesign.)

To script the export process, you can use the ‘exportDpsArticle’ function. For details, see Creating InDesign-based articles using scripting.

Questions and support

The API / integration forum is available to post any questions regarding this article or the use of the On-Demand Services APIs. If you are looking for one-on-one support, contact Adobe Developer Support (

Change log

2017 June 20

Updated Documentation:

  • Fixed typo in the description.

2017 February 7

Updated Documentation:

  • Added support for dynamic shared content across Producer Services.

Updated JSON Schema:

  • Added new JSON schema for dynamic shared content.

API Examples:

  • Added support for dynamic shared content.

2016 November 1

Updated Documentation:

  • Added batch return of entity status.
  • Added support for dynamic banner across Producer and Ingestion Services.
  • Added support for Android push notification via the Notification Service API
  • Added the ability to update the collection’s content element list at a specified index.

Updated JSON Schema:

  • Added new JSON schema for dynamic banner

Updated API Examples:

  • Updates Collection::updateContentElements() to check if already exists before appending entity to the collection’s content element list
  • Added support for dynamic banner
  • Added dynamic banner to the demo scripts (#13–15)

2016 July 12

Updated Documentation:

  • Updated product and product bundle

2016 June 30

Updated Documentation:

  • Added information on PDF upload for the Ingestion Service

Updated JSON Schema:2016 July 12

Updated Documentation:

  • Added additional metadata fields:
    • contentSize
    • availabilityDate (product & product bundle only)
    • availabilityDateTimezone (product & product bundle only)

Updated API Examples:

  • Demo: #05e update PDF file to article one
  • Demo: #05f update PDF file to article one and set horizontal swipe
  • Demo: #05g check ingestion status for article one
  • Switched to use autoloader to load the necessary classes per PHP script

2016 May 10

Updated Documentation:

  • Ingestion service now accepts header: application/pdf
  • Track the status of a known publishing/unpublishing and preflight jobs
    • POST /job will return the workflow Id for this job
    • GET /status/{publicationID}/publication/00000000-0000-0000-0000-000000000000 will return the current workflow Id (if available)
    • Compare the current workflow Id (if available) with last known workflow Id
      • if current workflow Id === last known workflow Id, then the last job is still in progress
      • if current workflow Id !== last known workflow Id, then the last job is completed and another is in progress
      • if current workflow Id is empty, then the last job is completed and no other jobs are in progress

Updated API Examples:

  • Demo: #05d check current uploaded content file size
  • Demo: #08c track last known workflow status