---
category: [Administration & Integrations, Platform and Product Extensions, Platform and Product Extensions/Integration, Administration & Integrations/Custom Integrations & Apps, Platform and Product Extensions/Workday Extend]
keyword: [Extend, Presentation Components, UI components]
nav: wcp_docs
parent_url: /wcp_docs/
title: >- 
  Reference: Extend App Metadata
layout: subsection
---

## <a id="section_ayx_ddv_32b"></a>App Metadata (AMD) Example

```
{
  "applicationId" : "aCustomApp_acme",
  "dataProviders" : [ 
    {
      "key" : "EXAMPLE",
      "value" : "https://dog.ceo/api"
    },
    {
      "key": "WORKDAY-WQL",
      "value": "https://api.workday.com/wql/v1/"
    }
  ],
  "tasks" : [ 
    {
      "id" : "root",
      "routingPattern" : "/",
      "page" : {
        "id" : "home"
      }
    } 
  ]
}
```

## <a id="section_applicationId"></a>applicationId

(Required) Identifies the custom app. Ensure the `applicationId` is unique on the tenant. The `applicationId` displays in the URI path of the page URLs.

## <a id="section_appProperties"></a>appProperties

(Optional) Contains custom app properties that you can reference in your PMDs.

An item in the `appProperties` array contains these properties:

<table><thead><tr><th>Property</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>key</td><td>string</td><td>Yes</td><td>The unique key of a custom app property. Use this key to reference the app property in your PMDs.</td></tr><tr><td>value</td><td>string</td><td>Yes</td><td>The app property value.</td></tr></tbody></table><br/>

Example:

```
"appProperties": [
  {
     "key": "mileageRate",
     "value": ".56"
  },
  . . .
]
```

To reference a custom app property in your PMD, specify `<% site.appProperties.somePropertyKey %>`. Example:

```
{
  "type": "number",
  "fractionDigits": 2,
  "label": "Rate",
  "id": "item",
  "enabled": "false",
  "value": "<% site.appProperties.mileageRate %>"
}
```

## <a id="section_dataProviders"></a>dataProviders

(Required) Contains base URLs for the REST API endpoints invoked in the app.

An item in the `dataProviders` array contains these properties:

<table><thead><tr><th>Property</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>key</td><td>string</td><td>Yes</td><td>The unique id of a data provider. PMDs reference this key with their endpoints.</td></tr><tr><td>value</td><td>binding-String</td><td>Yes</td><td>The base URL for the data provider API endpoints invoked by the PMDs. <p><b>Note:</b> Workday recommends using HTTPS in the base URL path.</p></td></tr></tbody></table><br/>

Example:

```
"dataProviders" : [ 
  {
    "key" : "EXAMPLE",
    "value" : "https://dog.ceo/api"
  }, 
  {
    "key": "WORKDAY",
    "value": "https://api.workday.com/common/v1"
  }, 
  {
    "key": "YOUTUBE",
    "value": "https://www.googleapis.com/youtube/v3"
  } 
]
```

## <a id="section_flowDefinitions"></a>flowDefinitions

(Optional) Contains definitions for flow transitions across multiple pages in your app.

<b>Note:</b> `editWizard` widgets aren't supported in `flowDefinitions`.

An item in the `flowDefinitions` array contains these properties:

<table><thead><tr><th>Property</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Yes</td><td>The unique id of a flow definition.</td></tr><tr><td>name</td><td>string</td><td>Yes if a <code>taskOrch</code> uses this flow.</td><td>The unique name of a flow definition. <p>If you use this flow with a <code>taskOrch</code> tag, specify the <code>name</code> as the <code>flowId</code> attribute on <code>taskOrch</code>.</p></td></tr><tr><td>flowSteps</td><td>array</td><td>Yes</td><td>Contains the sequence of steps in a flow definition.</td></tr><tr><td>descriptor</td><td>string</td><td>No</td><td>The flow description.</td></tr><tr><td>cancelOutOfFlow</td><td>boolean</td><td>No</td><td>If true, the <b>Cancel</b> button cancels the flow instead of navigating to the previous page. When the user clicks the <b>Cancel</b> button, it navigates back to the page from which the flow triggered. The default is false.</td></tr></tbody></table><br/>

The `flowSteps` array contains flow step definitions. Each step corresponds to a task page. If navigation to a task page depends on certain conditions, use the `transitions` array to define the conditions.

An item in the `flowSteps` array contains these properties:

<table><thead><tr><th>Property</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Yes</td><td>The unique id of a flow step across all flow definitions. Don't use the same step in multiple flow definitions.</td></tr><tr><td>taskId</td><td>string</td><td>Yes</td><td>The reference ID of the task to invoke with this step.</td></tr><tr><td>transitions</td><td>array</td><td>No</td><td>Contains the conditions that determine the step transitions. If not specified, the step executes as the last step without any condition.</td></tr><tr><td>cancelOutOfFlow</td><td>boolean</td><td>No</td><td>A boolean for this flow step that overrides the <code>cancelOutOfFlow</code> setting in the parent flow definition. If true, the <b>Cancel</b> button cancels the flow instead of navigating to the previous page. When the user clicks the <b>Cancel</b> button, it navigates back to the page from which the flow triggered. The default is false.</td></tr><tr><td>descriptor</td><td>string</td><td>No</td><td>The flow step description.</td></tr><tr><td>endsFlow</td><td>boolean</td><td>No</td><td>Indicates whether this task is the last step. If not specified, the last step in the <code>flowSteps</code> array ends the flow. <p>If you use this flow with a <code>taskOrch</code> tag, set <code>endsFlow</code> to true on the last flow step. Set <code>endsFlow</code> to true on 1 and only 1 flow step. The last flow step (endsFlow = true) should call the final step (excludeFromFlow = true), which exits the task orchestration flow.</p></td></tr><tr><td>excludeFromFlow</td><td>boolean</td><td>No</td><td>Indicates whether to exclude the step from a task orchestration flow. <p>If you use this flow with a <code>taskOrch</code>, set <code>excludeFromFlow</code> to true on the final flow step. The last flow step (endsFlow = true) should call the final step (excludeFromFlow = true), which exits the task orchestration flow. You can set <code>excludeFromFlow</code> to true in multiple steps since the last flow step can conditionally choose which <code>excludeFromFlow</code> step to transition to.</p></td></tr><tr><td>name</td><td>string</td><td>No</td><td>The name of the flow step. The name property is informational only, and not used.</td></tr><tr><td>skipStep</td><td>boolean</td><td>No</td><td>A binding that determines whether or not to skip this flow step.</td></tr><tr><td>startsFlow</td><td>boolean</td><td>No</td><td>Indicates whether this task is the initial step. If not specified, the first step in the <code>flowSteps</code> array starts the flow. <p>If you use this flow with a <code>taskOrch</code>, set <code>startsFlow</code> to true on the initial flow step. Set <code>startsFlow</code> to true on one and only 1 flow step.</p></td></tr><tr><td>taskBindingName</td><td>string</td><td>No</td><td>The task name associated with this flow step. If you use the flow with a <code>taskOrch</code> tag, <code>taskBindingName</code> displays as the step title.</td></tr></tbody></table><br/>

The `transitions` array contains ordered conditions that determine which flow step to execute.

An item in the `transitions` array contains these properties:

<table><thead><tr><th>Property</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>condition</td><td>string</td><td>Yes</td><td>An expression that evaluates to true or false. <p>If the expression is true, the app navigates to the flow step <code>value</code>.</p> <p>If the expression is false, we evaluate the next ordered condition in the array.</p> <p>Example: <code>"condition" : "<% queryParams.one eq 'ONE' %>"</code></p> <p>You can specify <code>"true"</code> if the transition always needs to execute the flow step.</p></td></tr><tr><td>order</td><td>string</td><td>Yes</td><td>An alphanumeric string that specifies the transition order. We alphabetically sort the <code>order</code> values in <code>transitions[]</code> to determine the sequence of evaluating conditions. <p>Include this property even if you only have 1 item in your <code>transitions[]</code>.</p></td></tr><tr><td>value</td><td>string</td><td>Yes</td><td>The reference ID of the next flow step when the condition returns true.</td></tr><tr><td>descriptor</td><td>string</td><td>No</td><td>The transition description.</td></tr><tr><td>name</td><td>string</td><td>No</td><td>The name of the transition.</td></tr></tbody></table><br/>

Example: This AMD snippet includes the `tasks` and `flowDefinitions` arrays to illustrate the task definitions associated with the flow definitions.

```
"tasks": [
  {
    "id": "root",
    "routingPattern": "/",
    "page": {
      "id": "home"
    }
  },
  {
    "id": "one",
    "routingPattern": "/one",
    "page": {
      "id": "one"
    }
  },
  {
    "id": "two",
    "routingPattern": "/two",
    "page": {
      "id": "two"
    }
  },
  {
    "id": "three",
    "routingPattern": "/three",
    "page": {
      "id": "three"
    }
  }
],
"flowDefinitions": [
  {
    "id": "myFlowId",
    "name": "myFlow",
    "flowSteps": [
      {
        "id": "flowStep1",
        "taskId": "one",
        "transitions": [
          {
            "condition": "<% flowVariables.one == 'ONE' %>",
            "order": "a",
            "value": "flowStep2"
          },
          {
            "condition": "true",
            "order": "b",
            "value": "flowStep3"
          }
        ]
      },
      {
        "id": "flowStep2",
        "taskId": "two",
        "transitions": [
          {
            "condition": "true",
            "order": "a",
            "value": "flowStep1"
          }
        ]
      },
      {
        "id": "flowStep3",
        "taskId": "three"
      }
    ]
  }
]
```

## <a id="section_tasks"></a>tasks

(Required) Contains URL routing patterns that identify which page to navigate to.

An item in the `tasks` array contains these properties:

<table><thead><tr><th>Property</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Yes</td><td>The unique id of a task that maps to a page. Flow definitions reference this task id.</td></tr><tr><td>routingPattern</td><td>string</td><td>Yes</td><td>The segment in the URL that corresponds to a PMD page. <p>A <code>routingPattern</code> can contain path parameters. To reference path parameters in your app, use the <code>routeParams</code> variable. You can't include query parameters in the <code>routingPattern</code>.</p> <p>If you use the task as the landing page of a custom task, the <code>routingPattern</code> must correspond to the <b>Route Path</b> of the custom task.</p> <p>If you specify <code>"routingPattern": "/"</code>, the URL that invokes the page ends with your site ID. Example: <code>https://myHost/myTenant/wday/app/myApp/mySite</code>, which is the home page. To change the home page, change the page id of the task whose <code>routingPattern</code> is <code>"/"</code>.</p> <p>If you specify <code>"routingPattern": "myPage"</code>, the URL that invokes the page ends with <code>myPage</code>. Example: <code>https://myHost/myTenant/wday/app/myApp/mySite/myPage</code></p> <p>Note that <code>"routingPattern": "myPage"</code> and <code>"routingPattern": "/myPage"</code> produce the same URL. For simplicity, you don't need to prefix the routing pattern with "/".</p> <p>Don't use the reserved keyword <code>{type}</code> as a path parameter.</p> <p>See also "Page Flow and Path Parameters" in <a href="/wcp_docs/qoc1553369215127.html">Concept: Page Navigation</a>.</p></td></tr><tr><td>page</td><td>object</td><td>Yes</td><td>Declares a page associated with the task and routing pattern.</td></tr></tbody></table><br/>

The `page` object in the `tasks` array contains these properties:

<table><thead><tr><th>Property</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Yes</td><td>The reference ID of the page or card to invoke with the task and routing pattern. <p>The page <code>id</code> must match the id of a Page or Card component.</p></td></tr><tr><td>descriptor</td><td>string</td><td>No</td><td>A page description.</td></tr></tbody></table><br/>

Example:

```
"tasks": [
  {
    "id": "root",
    "routingPattern": "/",
    "page": {
      "id": "home"
    }
  },
  {
    "id": "expDetails",
    "routingPattern": "expenses/details",
    "page": {
      "id": "expensesDetails"
    }
  },
  {
    "id": "editFetchExpense",
    "routingPattern": "expenses/{expenseId}",
    "page": {
      "id": "fetchExpense"
    }
  },
  {
    "id": "viewExpChart",
    "routingPattern": "expenses/charts/{chartId}",
    "page": {
      "id": "expChart"
    }
  }
]
```

## <a id="section_universalFooterPodId"></a>universalFooterPodId

(Optional) Specifies the ID of the pod containing the universal footer. This footer renders on all pages of the app, except for embedded pages. If a PMD contains another footer, the footer defined in the PMD takes precedence over the universal footer.

<table><thead><tr><th>Property</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>universalFooterPodId</td><td>string</td><td>No</td><td>The ID of a pod that contains the universal footer. This pod must contain only a footer tag.</td></tr></tbody></table><br/>

AMD Example:

```
"universalFooterPodId": "myFooterPod",
```

Pod Example:

```
{
  "podId": "myFooterPod",
  "seed": {
    "template": {
      "type": "footer",
      "children": [
        {
          "type": "richText",
          "value": "Universal footer for all pages.",
          "enabled": "<% false %>"
        }
      ]
    }
  }
}
```

### Related Information

[Concept: Extend App Metadata](/wcp_docs/qdr1547677184237.html)

[Concept: Page Navigation](/wcp_docs/qoc1553369215127.html)

[Reference: PMD Tags](/wcp_docs/dyg1528862158582.html)

[Reference: Site Metadata](/wcp_docs/mwr1528410641805.html)

[Reference: Predefined App Variables](/wcp_docs/urd1528494500512.html)

[Reference: Workday Extend API Gateways and Authorization Base URLs](/wcp_docs/dlh1653340161856.html)

