NAV Navbar
Logo
json

Introduction

Some stuff about ManyWho.

Admin

Provisioning and Flow Builders

Provisioning

Tenant Registration Request JSON:

{
  "firstName":"Paul",
  "lastName":"Smith",
  "password":"pa$$word",
  "email":"paul.smith@mycompany.com",
  "username":"paul.smith@mycompany.manywho.com",
  "subdomain":"mycompany",
  "notification":{
    "reason":"My Company Tenant",
    "redirectUrl":"https://flow.manywho.com/draw",
    "notificationMessages":
    [
      {
        "mediaType":"text/plain",
        "message":"Username is paul.smith@mycompany.manywho.com, password is: pa$$word. Click here to complete: VERIFY_URL_HERE. You can login to the tooling here: https://manywho.com/log-in"
      }
    ]
  }
}

Create new Tenants and provision the first Flow Builder in a single request

When you provision a new tenant in ManyWho, there are a few things you need to be aware of:

  1. If the email and username are the same, the Platform will provision the Tenant as a Domain Tenant. This means that additional Flow Builders can only be provisioned into this Tenant if they have the same email domain (e.g. @mycompany.com). In addition, the default permissions of the Tenant will allow any other Flow Builders from that same email domain to provision themselves, or self provision, into your Domain Tenant without permission from you. They are part of your email domain and therefore we do not impose restrictions on them gaining access independently.
  2. If the email is different from the username, the username must follow the format: @{tenant name}.manywho.com (as shown in the example to the right). Using this format allows Flow Builders with the same email address to provision as many tenants as they like - as long as the {tenant name} is unique. In addition, the default permissions of the Tenant will not allow further Flow Builders to self provision. Any additional Flow Builders must be added by the first Flow builder that provisioned the Tenant or other Flow Builders that have an active account in that Tenant.

Once a tenant is provisioned, the Flow builder provisioning options can be changed. Please have a look at the Tenant API in this documentation for details. Further to this, each Tenant can have any number of sub-Tenants. The benefit of sub-Tenants is that a Flow builder can move between Tenants more easily using single sign-on. Please have a look at the Sub-Tenant API in this documentation for details.

If the type Tenant User Registration Settings (in the Tenant API) is set to MANUAL or SPECIFIC, this API will only work with a valid Flow builder Authorization header.

HTTP Request

POST /api/admin/1/provisioning

Body

The raw JSON for the Tenant Registration Request:

Key Description
firstName
string
The first name of the user registering the Tenant.
lastName
string
The last name of the user registering the Tenant.
email
string
The email of the user registering the Tenant.
username
string
The chosen username for the user registering the Tenant. The username will determine the name of the tenant and further builder user provisioning.
password
string
The chosen password fo the user registering the Tenant.
subdomain
string
The optional subdomain being reserved for this Tenant. The subdomain must be globally unique.
notification
object
The notification that should be sent as part of this Tenant registration. The notification will be sent to the user being registered.

reason (string): The reason for the notification. For email, this will be the email subject.

redirectUrl (string): The Url that the user should be redirected to when clicking on the verification Url.

notificationMessages (array): The list of notification messages (by media type) that should be sent to the user. Each Notification Message entry has the following keys:
  • mediaType (string): The media type for the notification message. Currently supported values are “text/html” and “text/plain”.
  • message (string): The message to be sent to the user. For email, this is the email body. To add the verification Url, simply add VERIFY_URL_HERE to the content of the message and the Platform will replace this with the actual verification callback Url which will then forward to the redirectUrl.

Resetting a Flow Builder Password

The password reset API is only applicable to Flow Builders. For running users, the user identity is managed by the underlying Service (e.g. Salesforce, Box, Google), and therefore user resets should be performed on the underlying system, not within ManyWho. The password reset API requires two separate API calls to complete. The first API call sends the user the password reset notification. The second API call performs the actual password change, based on the token provided in the notification.

Perform the Password Reset Request

Notification Request JSON:

{
  "reason":"Password Reset Request!",
  "redirectUrl":"https://mysite.com/passwordreset?result={0}&callbackUri={1}&token=abcd",
  "notificationMessages":
  [
    {
      "mediaType":"text/html",
      "message":"<html><body><p>Hi Paul,<br/><br/>To reset your password, please click on the link below:<br/><br/>PASSWORD_URL_HERE<br/><br/>All the best,<br/><br/>ManyWho</p></body></html>"
    }
  ]
}

HTTP Request

POST /api/admin/1/directory/user/password?username={username}

Parameters

Key Description
username
string
The username associated with the password. Following on from the example above, this would be: paul.smith@mycompany.manywho.com. It’s important to note that this is not necessarily the users’ email as a builder user can belong to more than one tenant.

Body

The raw JSON for the Notification Request (optional):

Key Description
reason
string
The reason for the notification. For email, this will be the email subject.
redirectUrl
string
The Url that the user should be redirected to when clicking on the password verification Url. The redirectUrl should include two parameters in the string for the notification result {0} and the password reset token {1}. The platform will automatically parse the notification result and callbackUri values at these positions in the redirection string. An example of this is: https://mysite.com/passwordreset?result={0}&callbackUri={1}&token=someothertoken. The result parameter has the following possible values:
  • OK: The password reset was correctly processed.
  • ALREADY_PROCESSED: The password reset token has already been processed by the Platform and the user is re-using the link.
notificationMessages
array
The list of notification messages (by media type) that should be sent to the user. Each Notification Message entry has the following keys:

mediaType (string): The media type for the notification message. Currently supported values are “text/html” and “text/plain”.

message (string): The message to be sent to the user. For email, this is the email body. To add the password verification Url, simply add PASSWORD_URL_HERE to the content of the message and the Platform will replace this with the actual verification callback Url which will then forward to the redirectUrl.

Apply the Password Change

Password Request JSON:

{
  "password":"nottellin"
}

HTTP Request

POST /api/admin/1/directory/user/credential/{token}

Parameters

Key Description
token
string
The token that was provided to the user as part of the notification callback. The token is not provided in the email, but rather the token is provided after the user clicks on the notification email link. The token will either be parsed into the provided redirectUrl (if specified) or provided in the REST response from a GET request to the notification callback Url provided in the email.

Body

The raw JSON for the Password Request:

Key Description
password
string
The new password to be applied to the Flow Builder account.

Tenants and Sub-Tenants

Tenant JSON:

{
  "id": "{id}",
  "developerName": "@mycompany.manywho.com",
  "subTenants": [
    {
      "id": "{id}",
      "developerName": "@staging+mycompany.manywho.com",
      "subTenants": null,
      "developerSummary": null,
      "securitySettings": null,
      "subdomain": "mycompany-staging",
      "stateSettings": null,
      "tenantSettings": null
    },
    {
      "id": "{id}",
      "developerName": "@production+mycompany.manywho.com",
      "subTenants": null,
      "developerSummary": null,
      "securitySettings": null,
      "subdomain": "mycompany-production",
      "stateSettings": null,
      "tenantSettings": null
    }
  ],
  "developerSummary": "My root Tenant for building Flow templates",
  "securitySettings": {
    "isAdminRestrictedByIPRange": true,
    "authorizedAdminIPRanges": [
      {
        "developerName": "Interal Network",
        "developerSummary": "Only allow access when inside the company firewall.",
        "startIPAddress": "195.3.5.56",
        "endIPAddress": "195.3.5.58"
      }
    ],
    "isPackagingRestrictedByIPRange": false,
    "authorizedPackagingIPRanges": null,
    "isDrawRestrictedByIPRange": false,
    "authorizedDrawIPRanges": null,
    "isRunRestrictedByIPRange": false,
    "authorizedRunIPRanges": null,
    "isServiceRestrictedByRemoteSites": true,
    "authorizedServiceRemoteSites": [
      {
        "developerName": "Salesforce Service",
        "developerSummary": "Only allow access to the production Salesforce Service.",
        "uri": "https://salesforce.manywho.com",
        "disableProtocolSecurity": false
      }
    ],
    "userRegistrationSettings": {
      "type": "MANUAL",
      "notify": "ALL",
      "notificationWhoId": null
    }
  },
  "subdomain": "mycompany",
  "stateSettings": {
    "endpoint": "https://mycompany.com/api/report",
    "persistToDatabase": false
  },
  "tenantSettings": {
    "formatValues": true,
    "releaseCycle": "rolling"
  }
}

The Tenant provides a central place for Flow Builders to build, manage and deploy Flows.

Once a Tenant has been provisioned, there are various settings available to ensure security is correctly configured and data is properly managed for reporting purposes. The APIs below work for both Tenants and sub-Tenants. The only difference between a Tenant and and sub-Tenant is that Flow Builders can move between them using single sign-on and the Tenants are grouped together to ease management.

Tenant

Key Description
id
string
A unique identifier assigned by the Platform.
developerName
string
The name for the Tenant. This will be based on the username of the first provisioned Flow Builder. For example, for a username of: paul.smith@mycompany.manywho.com, the developerName would be: @mycompany.manywho.com
developerSummary
string
The summary for the Tenant. This is typically additional information that will help explain the purpose of the Tenant.
subTenants
array
The array of sub-Tenants (showing just the root properties of the Tenant object.
securitySettings
object
The Security Settings that should be applied to this Tenant (not including sub-Tenants). The Security Settings object has the following keys:

isAdminRestrictedByIPRange (boolean):
Indicates that the Admin APIs should be protected by the provided IP range in authorizedAdminIPRanges. Setting this to false will not remove the list of IP Range entries and will simply disable IP range restrictions.

authorizedAdminIPRanges (array):
The array of IP Range entries that will be allowed to access the Admin APIs. The configuration of the IP Range object is provided in the section below.

isPackagingRestrictedByIPRange (boolean):
Indicates that the Packaging APIs should be protected by the provided IP range in authorizedPackagingIPRanges. Setting this to false will not remove the list of IP Range entries and will simply disable IP range restrictions.

authorizedPackagingIPRanges (array):
The array of IP Range entries that will be allowed to access the Packaging APIs. The configuration of the IP Range object is provided in the section below.

isDrawRestrictedByIPRange (boolean):
Indicates that the Draw APIs should be protected by the provided IP range in authorizedDrawIPRanges. Setting this to false will not remove the list of IP Range entries and will simply disable IP range restrictions.

authorizedDrawIPRanges (array):
The array of IP Range entries that will be allowed to access the Draw APIs. The configuration of the IP Range object is provided in the section below.

isRunRestrictedByIPRange (boolean):
Indicates that the Run APIs should be protected by the provided IP range in authorizedRunIPRanges. Setting this to false will not remove the list of IP Range entries and will simply disable IP range restrictions.

authorizedRunIPRanges (array):
The array of IP Range entries that will be allowed to access the Run APIs. The configuration of the IP Range object is provided in the section below.

isServiceRestrictedByRemoteSites (boolean):
Indicates that Service Elements only be allowed to be installed and used based on Remote Site settings outlined in the authorizedServiceRemoteSites property. Setting this to false will not remove the existing Remote Site settings.

authorizedServiceRemoteSites (array):
The array of Remote Site entries that will be allowed when installing and using Service Elements. Each Remote Site setting entry has the following keys:
  • developerName (string): The name for the Remote Site. This is typically a helpful name to remind administrators of the purpose of the Remote Site.
  • developerSummary (string): The summary for the Remote Site. This is typically additional information that will help explain the purpose of the Remote Site.
  • uri (string): The Uri for the allowed Remote Site. This should be the base Uri allowed.
  • disableProtocolSecurity (string): Indicates if the Remote site can be accessed without encryption (SSL).

userRegistrationSettings (object):
The Flow Builder registration settings that should be applied when provisioning. The User Registration Settings object has the following keys:
  • type (string): The registration type determines how new Flow Builders are provisioned and the notifications that occur when that happens. Valid values are:
    • MANUAL: Indicates that all Flow Builders must be provisioned manually by another Flow Builder (authenticated). This is the default setting for Domain Tenants that use the @{tenant name}.manywho.com notation for the username.
    • REQUEST: Indicates that all Flow Builders must be provisioned manually by another Flow Builder, however, existing Flow Builders will be notified that another Flow Builder is requesting access.
    • SELF: Indicates that all Flow Builders can self provision if their email and username match with the existing Tenant. This is the default setting for Domain Tenants that use the email to determine tenancy.
  • notify (string): The notification settings for any Flow Builder provisioning requests. Valid values are:
    • ALL: Indicates that all Flow Builders will be notified when another Flow Builders is requesting access to the Tenant.
    • NONE: Indicates that no Flow Builders will be notified if another Flow Builder is requesting access to the Tenant.
    • SPECIFIC: Indicates that a specific Flow Builder should be notified when another Flow Builder is requesting access to the Tenant. The Flow Builder being notified is specified in the notificationWhoId property.
  • notificationWhoId (string): The unique identifier for the User on the Platform. This user will receive notifications when new Flow Builders are provisioned and the notify property is set to SPECIFIC.
reportSettings
string
(deprecated)
subdomain
string
The requested subdomain to register for this tenant. The subdomain can be null, but if provided must be unique for the entire Platform.
stateSettings
object
The settings for State persistence and storage. The State Settings object has the following keys:

endpoint (string):
The Uri for the State persistence implementation. This endpoint must implement our Reporting API interface. More details on that can be found on GitHub here: https://github.com/manywho/reporting

persistToDatabase (boolean):
(deprecated)
tenantSettings
object
The settings specific to the tenant. It has the following keys:

releaseCycle (string):
The version of the platform your tenant’s flow will run using - can be one of rolling for the latest version always, or monthly for a monthly-released, 1-month delayed version (based on rolling).

IP Range

Key Description
developerName
string
The name for the IP Range. This is typically a helpful name to remind builders of the purpose of the IP Range.
developerSummary
string
The summary for the IP Range. This is typically additional information that will help explain the purpose of the IP Range.
startIPAddress
string
The valid start IP address.
endIPAddress
string
The valid end IP address.

Get Tenant

Example 200 OK Response

{
  "id": "80c1a97a-e31c-4ab1-a279-9742af17f31d",
  "developerName": "@mycompany.manywho.com",
  "subTenants": [
    {
      "id": "daa15237-bfd3-44b6-b5c4-68f31c448312",
      "developerName": "@staging+mycompany.manywho.com",
      "subTenants": null,
      "developerSummary": null,
      "securitySettings": null,
      "reportSettings": null,
      "subdomain": null,
      "stateSettings": null,
      "tenantSettings": null
    },
    {
      "id": "6a1a6c4d-ecb5-44a1-aab3-489cde964686",
      "developerName": "@production+mycompany.manywho.com",
      "subTenants": null,
      "developerSummary": null,
      "securitySettings": null,
      "reportSettings": null,
      "subdomain": null,
      "stateSettings": null,
      "tenantSettings": null
    }
  ],
  "developerSummary": null,
  "securitySettings": null,
  "reportSettings": null,
  "subdomain": null,
  "stateSettings": null
}

Used to get the Tenant object for the current Tenant. The Tenant provides a central place for Flow Builders to build, manage and deploy Flows.

HTTP Request

GET /api/admin/1/tenant

Set Tenant

Example 200 OK Response

{
  "id": "80c1a97a-e31c-4ab1-a279-9742af17f31d",
  "developerName": "@mycompany.manywho.com",
  "subTenants": null,
  "developerSummary": null,
  "securitySettings": null,
  "reportSettings": null,
  "subdomain": "mycompany",
  "stateSettings": null
}

Used to set the Tenant object for the current Tenant. The Tenant provides a central place for Flow Builders to build, manage and deploy Flows.

HTTP Request

POST /api/admin/1/tenant

Body

The raw JSON for the Tenant.

Delete Tenant

Success 204 No Content Response

HTTP Request

DELETE /api/admin/1/tenant

Body

There is not body in this request.

Delete Tenant Data

Success 204 No Content Response

{
  "flows": true,
  "pages": true,
  "values": true,
  "types": true,
  "services": true,
  "tags": true,
  "snapshots": true,
  "states": true,
  "macros": true
}

HTTP Request

POST /api/admin/1/tenant/data

Body

The raw JSON for the Tenant Delete Request.

Tenant Data Delete Request

Key Description
flows
boolean
Indicates if all Flow models should be deleted.
pages
boolean
Indicates if all Page Elements should be deleted.
values
boolean
Indicates if all Value Elements should be deleted.
types
boolean
Indicates if all Type Elements should be deleted.
services
boolean
Indicates if all Service Elements should be deleted.
tags
boolean
Indicates if all Tag Elements should be deleted.
snapshots
boolean
Indicates if all Flow snapshots should be deleted.
states
boolean
Indicates if all Flow States should be deleted.
macros
boolean
Indicates if all Macros should be deleted.

Users

User JSON:

{
  "id": "{id}",
  "firstName": "Paul",
  "lastName": "Smith",
  "email": "paul.smith@mycompany.com",
  "username": "paul.smith@mycompany.manywho.com",
  "verified": true
}

The User object provides basic information about Flow Builders and running users for the Tenant.

Users on the Platform are identified via their email. As a result, the email address determines “who” the user is. The email address is the unique identifier across the entire platform. When running users access a Flow, a User is provisioned into the Tenant on-demand. In addition, Flow Builders are included in the User listing. As a single running user can login to multiple Services, a User entry will be provided for each Service being logged into. As a result, the username parameter is used to load an individual User record for a particular Service. Currently it is assumed that the username will be unique for each Service. Please contact the ManyWho team if this causes issues with User management.

Get Users

Example 200 OK Response

[
  {
    "id": "914e2919-4c72-4b75-853e-84e060d49380",
    "firstName": "Paul",
    "lastName": "Smith",
    "email": "paul.smith@mycompany.com",
    "username": "paul.smith@mycompany.manywho.com",
    "verified": true
  },
  {
    "id": "4bb15de8-427c-4b8b-b853-bffafbc553a1",
    "firstName": "Etienne",
    "lastName": "Dubois",
    "email": "edubois@enduser.com",
    "username": null,
    "verified": true
  }
]

Used to get the list of Users. The User object provides basic information about Flow Builders and running users for the Tenant.

HTTP Request

GET /api/admin/1/directory/user

Get User

Example 200 OK Response

{
  "id": "914e2919-4c72-4b75-853e-84e060d49380",
  "firstName": "Paul",
  "lastName": "Smith",
  "email": "paul.smith@mycompany.com",
  "username": "paul.smith@mycompany.manywho.com",
  "verified": true
}

Used to get an individual User object for a Service or Flow Builder. The User object provides basic information about Flow Builders and running users for the Tenant.

HTTP Request

GET /api/admin/1/directory/user?username={username}

Parameters

Key Description
username
string
The username associated for the User record.

Set User

Example 200 OK Response

{
  "id": "914e2919-4c72-4b75-853e-84e060d49380",
  "firstName": "Paul",
  "lastName": "Smith",
  "email": "paul.smith@mycompany.com",
  "username": "paul.smith@mycompany.manywho.com",
  "verified": true
}

Used to set an individual User object for a Service or Flow Builder. The User object provides basic information about Flow Builders and running users for the Tenant.

HTTP Request

POST /api/admin/1/directory/user

Body

The raw JSON for the User.

Delete User

Success 204 No Content Response

Used to delete an individual User object for a Service or Flow Builder. This will not delete the User record entirely from the Platform as the User object is an aggregate object and a single User object can exist across multiple Tenants.

HTTP Request

DELETE /api/admin/1/directory/user?username={username}

Parameters

Key Description
username
string
The username associated for the User record.

Update tenant user settings

Used to update the tenant-specific settings for a user

HTTP Request

PUT /api/admin/1/users/me/settings

Body

The raw JSON for the settings.

Example 200 OK Response

{
  "notifications": {
    "enableEmails": false
  }
}

Flow States

Flow State JSON:

{
  "id": "{id}",
  "parentId": null,
  "dateCreated": "0001-01-00T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "currentFlowId": {
    "id": "{id}",
    "versionId": "{id}"
  },
  "currentFlowDeveloperName": "Customer Application",
  "currentMapElementId": "{id}",
  "currentMapElementDeveloperName": "Reviewing Application",
  "currentStreamId": null,
  "currentRunningUserId": "{id}",
  "currentRunningUserEmail": "paul.smith@mycompany.com",
  "externalIdentifier": null,
  "manywhoTenantId": "{id}",
  "annotations": null,
  "stateEntries": null,
  "precommitStateEntry": {
    "id": "{id}",
    "flowId": {
      "id": "{id}",
      "versionId": "{id}"
    },
    "flowDeveloperName": null,
    "mapElementId": "{id}",
    "mapElementDeveloperName": null,
    "dateCommitted": "0001-01-01T00:00:00Z",
    "values": null,
    "userInteractions": [
      {
        "manywhoUserId": "{id}",
        "latitude": 0,
        "longitude": 0,
        "accuracy": 0,
        "altitude": 0,
        "altitudeAccuracy": 0,
        "heading": 0,
        "speed": 0,
        "time": "0001-01-01T00:00:00Z"
      }
    ]
  },
  "values": null,
  "authorizationHeader": null,
  "isDone": false,
  "log": null
}

The Flow State object provides data about a specific instance of a running Flow.

The Flow State provides in-depth information about how Users have interacted with the Flow, from the data that has been collected in Values, to the path of Map Elements that were travelled, to the users who have interacted with the Flow at the various stages of its execution. This Flow State data is only available for active Flows that have not yet completed. This API should also not be used for reporting purposes as we have a separate reporting API and reporting infrastructure.

Get Flow States

Example 200 OK Response

{
  "_meta": {
    "total": 269,
    "pageSize": 1,
    "page": 1
  },
  "_links": {
    "previous": null,
    "next": "/api/admin/1/states/?page=2",
    "first": "/api/admin/1/states/?page=1",
    "last": "/api/admin/1/states/?page=27"
  },
  "items": [
    {
      "id": "0128d523-1001-450d-ae1c-38f4aee01158",
      "parentId": null,
      "dateCreated": "2015-10-23T10:44:44Z",
      "dateModified": "2015-10-23T10:44:47Z",
      "currentFlowId": {
        "id": "fb382ebd-6560-424d-bfe2-b718680d71ec",
        "versionId": "fbb83828-e5ec-4e63-aed4-45d0f838bd94"
      },
      "currentFlowDeveloperName": "Customer Application",
      "currentMapElementId": "6531a010-503f-4479-bbce-e39c05db314f",
      "currentMapElementDeveloperName": "Reviewing Application",
      "currentStreamId": null,
      "currentRunningUserId": "52df1a90-3826-4508-b7c2-cde8aa5b72cf",
      "currentRunningUserEmail": "paul.smith@mycompany.com",
      "externalIdentifier": null,
      "manywhoTenantId": "a692def4-5aba-49e4-b07d-cb32ed72c414",
      "annotations": null,
      "stateEntries": null,
      "precommitStateEntry": {
        "id": "e98ea86e-f090-4c7d-bef8-293209f45799",
        "flowId": {
          "id": "fb382ebd-6560-424d-bfe2-b718680d71ec",
          "versionId": "fbb83828-e5ec-4e63-aed4-45d0f838bd94"
        },
        "flowDeveloperName": null,
        "mapElementId": "6531a010-503f-4479-bbce-e39c05db314f",
        "mapElementDeveloperName": null,
        "dateCommitted": "0001-01-01T00:00:00Z",
        "values": null,
        "userInteractions": [
          {
            "manywhoUserId": "52df1a90-3826-4508-b7c2-cde8aa5b72cf",
            "latitude": 0,
            "longitude": 0,
            "accuracy": 0,
            "altitude": 0,
            "altitudeAccuracy": 0,
            "heading": 0,
            "speed": 0,
            "time": "2015-10-23T10:44:47Z"
          }
        ]
      },
      "values": null,
      "authorizationHeader": null,
      "isDone": false,
      "log": null
    }
  ]
}

Used to get the list of all persisted Flow States for the Tenant.

HTTP Request

GET /api/admin/1/states?pageSize=10&page=1

Parameters

Key Description
pageSize
integer
The number of Flow State records to return in this request.
page
integer
The current page of Flow State records.

Get Flow States by Flow

Example 200 OK Response

{
  "_meta": {
    "total": 269,
    "pageSize": 1,
    "page": 1
  },
  "_links": {
    "previous": null,
    "next": "/api/admin/1/states/?page=2",
    "first": "/api/admin/1/states/?page=1",
    "last": "/api/admin/1/states/?page=27"
  },
  "items": [
    {
      "id": "0128d523-1001-450d-ae1c-38f4aee01158",
      "parentId": null,
      "dateCreated": "2015-10-23T10:44:44Z",
      "dateModified": "2015-10-23T10:44:47Z",
      "currentFlowId": {
        "id": "fb382ebd-6560-424d-bfe2-b718680d71ec",
        "versionId": "fbb83828-e5ec-4e63-aed4-45d0f838bd94"
      },
      "currentFlowDeveloperName": "Customer Application",
      "currentMapElementId": "6531a010-503f-4479-bbce-e39c05db314f",
      "currentMapElementDeveloperName": "Reviewing Application",
      "currentStreamId": null,
      "currentRunningUserId": "52df1a90-3826-4508-b7c2-cde8aa5b72cf",
      "currentRunningUserEmail": "paul.smith@mycompany.com",
      "externalIdentifier": null,
      "manywhoTenantId": "a692def4-5aba-49e4-b07d-cb32ed72c414",
      "annotations": null,
      "stateEntries": null,
      "precommitStateEntry": {
        "id": "e98ea86e-f090-4c7d-bef8-293209f45799",
        "flowId": {
          "id": "fb382ebd-6560-424d-bfe2-b718680d71ec",
          "versionId": "fbb83828-e5ec-4e63-aed4-45d0f838bd94"
        },
        "flowDeveloperName": null,
        "mapElementId": "6531a010-503f-4479-bbce-e39c05db314f",
        "mapElementDeveloperName": null,
        "dateCommitted": "0001-01-01T00:00:00Z",
        "values": null,
        "userInteractions": [
          {
            "manywhoUserId": "52df1a90-3826-4508-b7c2-cde8aa5b72cf",
            "latitude": 0,
            "longitude": 0,
            "accuracy": 0,
            "altitude": 0,
            "altitudeAccuracy": 0,
            "heading": 0,
            "speed": 0,
            "time": "2015-10-23T10:44:47Z"
          }
        ]
      },
      "values": null,
      "authorizationHeader": null,
      "isDone": false,
      "log": null
    }
  ]
}

Used to get the list of all persisted Flow States for the Tenant and specific Flow.

HTTP Request

GET /api/admin/1/states/flow/{flow_id}/{flow_version_id}?pageSize=10&page=1

Parameters

Key Description
flow_id
string
Unique identifier for the Flow.
flow_version_id
string
Unique identifier for the Flow Version. If this part of the path is not included, Flow States for all versions will be returned.
pageSize
integer
The number of Flow State objects to return in this request.
page
integer
The current page of Flow State objects.

Get Flow State

Example 200 OK Response

{
  "id": "0128d523-1001-450d-ae1c-38f4aee01158",
  "parentId": null,
  "dateCreated": "2015-10-23T10:44:44Z",
  "dateModified": "2015-10-23T10:44:47Z",
  "currentFlowId": {
    "id": "fb382ebd-6560-424d-bfe2-b718680d71ec",
    "versionId": "fbb83828-e5ec-4e63-aed4-45d0f838bd94"
  },
  "currentFlowDeveloperName": "Customer Application",
  "currentMapElementId": "6531a010-503f-4479-bbce-e39c05db314f",
  "currentMapElementDeveloperName": "Reviewing Application",
  "currentStreamId": null,
  "currentRunningUserId": "52df1a90-3826-4508-b7c2-cde8aa5b72cf",
  "currentRunningUserEmail": "paul.smith@mycompany.com",
  "externalIdentifier": null,
  "manywhoTenantId": "a692def4-5aba-49e4-b07d-cb32ed72c414",
  "annotations": null,
  "stateEntries": null,
  "precommitStateEntry": {
    "id": "e98ea86e-f090-4c7d-bef8-293209f45799",
    "flowId": {
      "id": "fb382ebd-6560-424d-bfe2-b718680d71ec",
      "versionId": "fbb83828-e5ec-4e63-aed4-45d0f838bd94"
    },
    "flowDeveloperName": null,
    "mapElementId": "6531a010-503f-4479-bbce-e39c05db314f",
    "mapElementDeveloperName": null,
    "dateCommitted": "0001-01-01T00:00:00Z",
    "values": null,
    "userInteractions": [
      {
        "manywhoUserId": "52df1a90-3826-4508-b7c2-cde8aa5b72cf",
        "latitude": 0,
        "longitude": 0,
        "accuracy": 0,
        "altitude": 0,
        "altitudeAccuracy": 0,
        "heading": 0,
        "speed": 0,
        "time": "2015-10-23T10:44:47Z"
      }
    ]
  },
  "values": null,
  "authorizationHeader": null,
  "isDone": false,
  "log": null
}

Used to get an individual Flow State object.

HTTP Request

GET /api/admin/1/states/{id}

Parameters

Key Description
id
string
Unique identifier for the State.

Delete Flow State

Success 204 No Content Response

Used to delete an individual State object.

HTTP Request

DELETE /api/admin/1/states/{id}

Parameters

Key Description
id
string
Unique identifier for the Flow State.

Delete Multiple Flow States

Flow State Identifiers array JSON:

[
  "{id}",
  "{id}"
]

Used to delete multiple Flow State objects.

HTTP Request

DELETE /api/admin/1/states

Body

The raw JSON for the array of Flow State identifiers.

Flow State Identifiers array

Key Description
id
array
An array of unique identifiers for each Flow State.

Draw

Authenticating Flow Builders

Authentication Request JSON:

{
  "loginUrl": "https://flow.manywho.com/plugins/manywho/api/draw/1/authentication",
  "username": "paul.smith@mycompany.manywho.com",
  "password": "nottellin"
}

Authenticate Flow Builders before using the Admin, Draw, Translate APIs.

Once a Tenant and Flow Builder has been provisioned, you can authenticate against the Draw API. The returned token should be used in the standard HTTP Authorization header when performing any operations against the various APIs.

HTTP Request

POST /api/draw/1/authentication

Body

The raw JSON for the Tenant Registration Request:

Key Description
loginUrl
string
This property should always be: https://flow.manywho.com/plugins/manywho/api/draw/1/authentication
username
string
The username for the Flow Builder.
password
string
The password for the Flow Builder.

Assets

Lists all Assets

Example 200 OK Response

[
    {
        "contentType": null,
        "key": "bbeb742d-b6ea-402a-9578-c2cb7dd0ffa2/image.png",
        "modifiedAt": "2017-07-27T05:22:48+00:00",
        "name": null,
        "publicUrl": "https://files-manywho-com.s3.amazonaws.com/bbeb742d-b6ea-402a-9578-c2cb7dd0ffa2/image.png",
        "size": 2248160
    },
    {
        "contentType": null,
        "key": "bbeb742d-b6ea-402a-9578-c2cb7dd0ffa2/player.css",
        "modifiedAt": "2017-08-08T09:47:45+00:00",
        "name": null,
        "publicUrl": "https://files-manywho-com.s3.amazonaws.com/bbeb742d-b6ea-402a-9578-c2cb7dd0ffa2/player.css",
        "size": 96755
    }
]

Used to get a list of all the assets that exist for a Tenant.

HTTP Request

GET /api/draw/1/assets

Create Folder

204 No Content

Used to create an empty folder.

HTTP Request

POST /api/draw/1/assets

Body

{
    "key": "folder1/folder2"
}

Delete Asset

204 No Content

Used to delete an asset (or a folder)

HTTP Request

POST /api/draw/1/assets

Body

{
    "key": "folder1/folder2/key.png"
}

Move Asset

204 No Content

Used to move an asset (or a folder)

HTTP Request

PUT /api/draw/1/assets

Body

{
    "oldKey": "folder1",
    "newKey": "folder2"
}

Upload Asset

204 No Content

Used to generate a signed upload URL, which should be used to submit the asset to (using PUT). A contentType is required in this request.

HTTP Request

POST /api/draw/1/assets/upload

Body

{
    "contentType": "image/png",
    "key": "folder1/folder2/key.png"
}

Flow

Example Flow Request:

{
  "id": {
    "id": "{id}",
    "versionId": "{id}"
  },
  "editingToken": "{id}",
  "developerName": "My Flow",
  "developerSummary": "My cool new flow",
  "startMapElementId": "{id}",
  "allowJumping": false,
  "authorization": {
    "serviceElementId": "{id}",
    "globalAuthenticationType": "SPECIFIED",
    "streamBehaviourType": "CREATE_NEW",
    "groups": [
      {
        "authenticationId": "id from directory",
        "attribute": "MEMBER"
      }
    ],
    "users": [
      {
        "authenticationId": "id from directory",
        "attribute": "DELEGATES"
      }
    ],
    "locations": null
  },
  "alertEmail": "paul.smith@mycompany.manywho.com",
  "isActive": false,
  "isDefault": false,
  "comment": "My activation comment."
}

The Flow object represents an entire Flow application.

Flows represent an atomic package of Elements that when run are fully versioned. Flows can reference other Flows using a Flow Out or messaging other Flows in the Tenant using the Runtime Service. When referencing Flows (parent or sub-Flows), the Platform will always take the latest activated and default version of the Flow.

When editing Elements in a Flow, you do not do this through the Flow part of the APIs. Each Element has its own API endpoint for managing objects, importing into the Flow, etc.

As with Group Elements, a Flow can also have permissions. However, unlike the Group Element, if a user cannot authenticate to a Flow, they cannot access any part of the Flow State. Effectively, the Flow authorization protects your Flow application from any access by running users that cannot successfully authenticate given the provided authorization criteria. Therefore any Group Elements act as a sub-set of authorization. The running users must first authenticate successfully into the Flow and subsequently authenticate into any Group Elements. Further to this, there’s no requirement that the Flow and Group Elements use the same Service Element for authentication. Flow Builders can build Flows that authenticate across multiple systems, move from unauthenticated to authenticated access, etc.

Flow

Key Description
id
object
A composite unique identifier field assigned by the platform. This value should not be included for new Flows.

id (string):
The unique identifier part that never changes for the lifetime of the Flow.

versionId (string):
The unique identifier part for the version of the Flow. This changes every time a Map, Group, or Navigation Element is changed.
editingToken
string
A unique identifier needed to perform any editing operations on a Flow or its contained Map, Group, or Navigation Elements.
developerName
string
The name for the Flow. This is typically a helpful name to remind builders of the purpose of the Flow.
developerSummary
string
The summary for the Flow. This is typically additional information that will help explain the purpose of the Flow.
startMapElementId
string
The Map Element that should be used to start the Flow. This is always the START Map Element type.
allowJumping
boolean
Indicates that the running user(s) can jump to any Map Element in the Flow (regardless of the Navigation).
authorization
object
The configuration of the authorization context for this Flow. See GroupAuthorization for details.
alertEmail
string
The email for the Flow Builder activating the Flow. This information if available at runtime.
isActive
boolean
Indicates if the Flow is active (available for runtime users). This will always be false for the Draw API.
isDefault
boolean
Indicates if the Flow is default (the default version of the Flow when a version is not explicitly provided). This will always be false for the Draw API.
comment
string
As part of activation, the comment that was provided by the Flow Builder. This will always be null for the Draw API.

Create/Update Flows

Example 200 OK Response

{
  "dateCreated": "0001-01-00T00:00:00Z",
  "dateModified": "0001-01-00T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "alertEmail": null,
  "isActive": false,
  "isDefault": false,
  "comment": null,
  "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
  "id": {
    "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
    "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
  },
  "developerName": "Course Registration Flow",
  "developerSummary": "This is a simple course registration flow.",
  "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
  "allowJumping": false,
  "stateExpirationLength": 0,
  "authorization": {
    "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
    "globalAuthenticationType": "ALL_USERS",
    "streamBehaviourType": "USE_EXISTING",
    "groups": null,
    "users": null,
    "locations": null
  }
}

Used to create new Flow objects or update existing ones. The Flow object represents an entire Flow application.

HTTP Request

POST /api/draw/1/flow

Body

The raw JSON for the Flow.

Query Flows

Example 200 OK Response

[
  {
    "dateCreated": "0001-01-00T00:00:00Z",
    "dateModified": "0001-01-00T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "alertEmail": null,
    "isActive": false,
    "isDefault": false,
    "comment": null,
    "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
    "id": {
      "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
      "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
    },
    "developerName": "Course Registration Flow",
    "developerSummary": "This is a simple course registration flow.",
    "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
    "allowJumping": false,
    "stateExpirationLength": 0,
    "authorization": {
      "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
      "globalAuthenticationType": "ALL_USERS",
      "streamBehaviourType": "USE_EXISTING",
      "groups": null,
      "users": null,
      "locations": null
    }
  }
]

Used to filter existing Flow objects. The Flow object represents an entire Flow application.

HTTP Request

GET /api/draw/1/flow?filter={filter}

Parameters

Key Description
filter
string
The filter for querying Flows

Get Flow

Example 200 OK Response

{
  "dateCreated": "0001-01-00T00:00:00Z",
  "dateModified": "0001-01-00T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "alertEmail": null,
  "isActive": false,
  "isDefault": false,
  "comment": null,
  "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
  "id": {
    "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
    "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
  },
  "developerName": "Course Registration Flow",
  "developerSummary": "This is a simple course registration flow.",
  "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
  "allowJumping": false,
  "stateExpirationLength": 0,
  "authorization": {
    "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
    "globalAuthenticationType": "ALL_USERS",
    "streamBehaviourType": "USE_EXISTING",
    "groups": null,
    "users": null,
    "locations": null
  }
}

Used to get an existing Flow object. The Flow object represents an entire Flow application.

HTTP Request

GET /api/draw/1/flow/{id}

Parameters

Key Description
id
string
The unique identifier for the Flow

Delete Flow

Success 204 No Content Response

Used to delete an existing Flow object. The Flow object provides the structure of your pages or screens.

HTTP Request

DELETE /api/draw/1/flow/{id}

Parameters

Key Description
id
string
The unique identifier for the Flow

Flow Graph

Example Flow Graph Request:

{
  "id": {
    "id": "{id}",
    "versionId": "{id}"
  },
  "editingToken": "{id}",
  "developerName": "My Flow",
  "developerSummary": "My cool new flow",
  "startMapElementId": "{id}",
  "allowJumping": false,
  "authorization": {
    "serviceElementId": "{id}",
    "globalAuthenticationType": "SPECIFIED",
    "streamBehaviourType": "CREATE_NEW",
    "groups": [
      {
        "authenticationId": "id from directory",
        "attribute": "MEMBER"
      }
    ],
    "users": [
      {
        "authenticationId": "id from directory",
        "attribute": "DELEGATES"
      }
    ],
    "locations": null
  },
  "mapElements": [
    {
      "id": "{id}",
      "developerName": "My Map Element",
      "developerSummary": "An example Map Element configuration",
      "elementType": "STEP",
      "x": 250,
      "y": 350,
      "groupElementId": "{id}",
      "pageElementId": "{id}",
      "outcomes": [
        {
          "id": "{id}",
          "developerName": "Next",
          "developerSummary": null,
          "label": "Next",
          "nextMapElementId": "{id}",
          "pageActionType": "SAVE",
          "isBulkAction": false,
          "pageActionBindingType": "EDIT",
          "pageObjectBindingId": "{id}",
          "order": 0,
          "controlPoints": [
            {
              "x": 0,
              "y": 0
            }
          ]
        }
      ]
    }
  ],
  "groupElements": [
    {
      "id": "{id}",
      "elementType": "SWIMLANE",
      "developerName": "Compliance Team",
      "developerSummary": "Only for the compliance team",
      "x": 0,
      "y": 0,
      "height": 150,
      "width": 500,
      "groupElementId": "{id}"
    }
  ]
}

The Flow Graph object provides the coordinate and basic configuration information of Map and Group Elements.

The Flow Graph object is typically used for editing the layout of the Flow for Flow Builders. This API should not be used for creating new Flows, but rather to manage Map and Group Elements in an existing Flow. The focus of this API is to allow Flow Builders to make coordinate changes to these Elements while ensuring other Flow Builders are notified of these changes and can be updated in realtime.

Flow Graph

Key Description
id
object
A composite unique identifier field assigned by the platform. This value should not be included for new Flows.

id (string):
The unique identifier part that never changes for the lifetime of the Flow.

versionId (string):
The unique identifier part for the version of the Flow. This changes every time a Map, Group, or Navigation Element is changed.
editingToken
string
A unique identifier needed to perform any editing operations on a Flow or its contained Map, Group, or Navigation Elements.
developerName
string
The name for the Flow. This is typically a helpful name to remind builders of the purpose of the Flow.
developerSummary
string
The summary for the Flow. This is typically additional information that will help explain the purpose of the Flow.
startMapElementId
string
The Map Element that should be used to start the Flow. This is always the START Map Element type.
allowJumping
boolean
Indicates that the running user(s) can jump to any Map Element in the Flow (regardless of the Navigation).
authorization
object
The configuration of the authorization context for this Flow. See GroupAuthorization for details.
mapElements
array
The array of Map Elements in the Flow. Each Map Element entry has the basic properties of the Map Element and its Outcomes. See Map Elements for more information.
groupElements
array
The array of Group Elements in the Flow. Each Group Element entry has the basic properties of the Group Element and its Outcomes. See Group Elements for more information.

Update Flow Graph

Example 200 OK Response

{
  "id": {
    "id": "{id}",
    "versionId": "{id}"
  },
  "editingToken": "{id}",
  "developerName": "My Flow",
  "developerSummary": "My cool new flow",
  "startMapElementId": "{id}",
  "allowJumping": false,
  "authorization": {
    "serviceElementId": "{id}",
    "globalAuthenticationType": "SPECIFIED",
    "streamBehaviourType": "CREATE_NEW",
    "groups": [
      {
        "authenticationId": "id from directory",
        "attribute": "MEMBER"
      }
    ],
    "users": [
      {
        "authenticationId": "id from directory",
        "attribute": "DELEGATES"
      }
    ],
    "locations": null
  },
  "mapElements": [
    {
      "id": "{id}",
      "developerName": "My Map Element",
      "developerSummary": "An example Map Element configuration",
      "elementType": "STEP",
      "x": 250,
      "y": 350,
      "groupElementId": "{id}",
      "pageElementId": "{id}",
      "outcomes": [
        {
          "id": "{id}",
          "developerName": "Next",
          "developerSummary": null,
          "label": "Next",
          "nextMapElementId": "{id}",
          "pageActionType": "SAVE",
          "isBulkAction": false,
          "pageActionBindingType": "EDIT",
          "pageObjectBindingId": "{id}",
          "order": 0,
          "controlPoints": [
            {
              "x": 0,
              "y": 0
            }
          ]
        }
      ]
    }
  ],
  "groupElements": [
    {
      "id": "{id}",
      "elementType": "SWIMLANE",
      "developerName": "Compliance Team",
      "developerSummary": "Only for the compliance team",
      "x": 0,
      "y": 0,
      "height": 150,
      "width": 500,
      "groupElementId": "{id}"
    }
  ]
}

Used to update the Flow Graph object. The Flow Graph object provides the coordinate and basic configuration information of Map and Group Elements.

HTTP Request

POST /api/draw/1/flow

Body

The raw JSON for the Flow.

Get Flow Graph

Example 200 OK Response

{
  "id": {
    "id": "{id}",
    "versionId": "{id}"
  },
  "editingToken": "{id}",
  "developerName": "My Flow",
  "developerSummary": "My cool new flow",
  "startMapElementId": "{id}",
  "allowJumping": false,
  "authorization": {
    "serviceElementId": "{id}",
    "globalAuthenticationType": "SPECIFIED",
    "streamBehaviourType": "CREATE_NEW",
    "groups": [
      {
        "authenticationId": "id from directory",
        "attribute": "MEMBER"
      }
    ],
    "users": [
      {
        "authenticationId": "id from directory",
        "attribute": "DELEGATES"
      }
    ],
    "locations": null
  },
  "mapElements": [
    {
      "id": "{id}",
      "developerName": "My Map Element",
      "developerSummary": "An example Map Element configuration",
      "elementType": "STEP",
      "x": 250,
      "y": 350,
      "groupElementId": "{id}",
      "pageElementId": "{id}",
      "outcomes": [
        {
          "id": "{id}",
          "developerName": "Next",
          "developerSummary": null,
          "label": "Next",
          "nextMapElementId": "{id}",
          "pageActionType": "SAVE",
          "isBulkAction": false,
          "pageActionBindingType": "EDIT",
          "pageObjectBindingId": "{id}",
          "order": 0,
          "controlPoints": [
            {
              "x": 0,
              "y": 0
            }
          ]
        }
      ]
    }
  ],
  "groupElements": [
    {
      "id": "{id}",
      "elementType": "SWIMLANE",
      "developerName": "Compliance Team",
      "developerSummary": "Only for the compliance team",
      "x": 0,
      "y": 0,
      "height": 150,
      "width": 500,
      "groupElementId": "{id}"
    }
  ]
}

Used to get an existing Flow Graph object. The Flow Graph object provides the coordinate and basic configuration information of Map and Group Elements.

HTTP Request

GET /api/draw/1/flow/{id}

Parameters

Key Description
id
string
The unique identifier for the Flow

Check Flow Graph Changes

Example 200 OK Response

true

Used to check if the Flow Graph has been changed by any other Flow Builders. The Flow Graph object provides the coordinate and basic configuration information of Map and Group Elements.

HTTP Request

GET /api/draw/1/graph/ping/flow/{flow_id}/{editing_token}

Parameters

Key Description
id
string
The unique identifier for the Flow
editing_token
string
The unique identifier needed to perform any editing operations on a Flow or its contained Map, Group, or Navigation Elements.

Flow SnapShot

The Flow SnapShot object is the package that is sent to the Platform runtime engine.

Without a Flow SnapShot, a Flow cannot be accessed by running users. The Flow SnapShot contains all, fully versioned, Elements that are needed for the Flow to execute (excluding sub-Flows). In the Draw Tool, each time a Flow is run or published, a Flow SnapShot is taken. This means you then have a version of the Flow that can also be reverted if Flow Builders make a range of mistakes and would like to go back to a previous SnapShot.

The Flow SnapShot also acts as a version system as all metadata for the Flow can be accessed and external tools can be used to ‘diff’ for changes. Equally, for compliance, a customer can access the Flow SnapShots to get a complete picture of which Flow the running user(s) were running at any particular point in time.

Flow SnapShot

Key Description
id
object
A composite unique identifier field assigned by the platform. This value should not be included for new Flows.

id (string):
The unique identifier part that never changes for the lifetime of the Flow.

versionId (string):
The unique identifier part for the version of the Flow. This changes every time a Map, Group, or Navigation Element is changed.
editingToken
string
A unique identifier needed to perform any editing operations on a Flow or its contained Map, Group, or Navigation Elements.
developerName
string
The name for the Flow. This is typically a helpful name to remind builders of the purpose of the Flow.
developerSummary
string
The summary for the Flow. This is typically additional information that will help explain the purpose of the Flow.
startMapElementId
string
The Map Element that should be used to start the Flow. This is always the START Map Element type.
allowJumping
boolean
Indicates that the running user(s) can jump to any Map Element in the Flow (regardless of the Navigation).
authorization
object
The configuration of the authorization context for this Flow. See GroupAuthorization for details.
alertEmail
string
The email for the Flow Builder activating the Flow. This information if available at runtime.
isActive
boolean
Indicates if the Flow is active (available for runtime users).
isDefault
boolean
Indicates if the Flow is default (the default version of the Flow when a version is not explicitly provided).
comment
string
As part of activation, the comment that was provided by the Flow Builder.
groupElements
array
The array of Group Elements in the Flow. Each Group Element entry has all properties provided. See Group Elements for more information.
mapElements
array
The array of Map Elements in the Flow. Each Map Element entry has all properties provided. See Map Elements for more information.
navigationElements
array
The array of Navigation Elements in the Flow. Each Navigation Element entry has all properties provided. See Navigation Elements for more information.
pageElements
array
The array of Page Elements in the Flow. Each Page Element entry has all properties provided. See Page Elements for more information.
tagElements
array
The array of Tag Elements in the Flow. Each Tag Element entry has all properties provided. See Tag Elements for more information.
macroElements
array
The array of Macro Elements in the Flow. Each Macro Element entry has all properties provided. See Macro Elements for more information.
valueElements
array
The array of Value Elements in the Flow. Each Value Element entry has all properties provided. See Value Elements for more information.
typeElements
array
The array of Type Elements in the Flow. Each Type Element entry has all properties provided. See Type Elements for more information.
serviceElements
array
The array of Service Elements in the Flow. Each Service Element entry has all properties provided. See Service Elements for more information.

Create Flow SnapShot

Example 200 OK Response

{
  "dateCreated": "0001-01-00T00:00:00Z",
  "dateModified": "0001-01-00T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "alertEmail": null,
  "isActive": false,
  "isDefault": false,
  "comment": "First attempt at creating the Flow",
  "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
  "id": {
    "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
    "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
  },
  "developerName": "Course Registration Flow",
  "developerSummary": "This is a simple course registration flow.",
  "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
  "allowJumping": false,
  "stateExpirationLength": 0,
  "authorization": {
    "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
    "globalAuthenticationType": "ALL_USERS",
    "streamBehaviourType": "USE_EXISTING",
    "groups": null,
    "users": null,
    "locations": null
  },
  "groupElements": null,
  "mapElements": null,
  "navigationElements": null,
  "pageElements": null,
  "tagElements": null,
  "macroElements": null,
  "valueElements": null,
  "typeElements": null,
  "serviceElements": null
}

Used to create a Flow SnapShot object. The Flow SnapShot object is the package that is sent to the Platform runtime engine.

HTTP Request

POST /api/draw/1/flow/snap/{id}

Key Description
id
string
The unique identifier for the Flow

Get Flow SnapShots

Example 200 OK Response

Example 200 OK Response

[
  {
    "dateCreated": "0001-01-00T00:00:00Z",
    "dateModified": "0001-01-00T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "alertEmail": null,
    "isActive": false,
    "isDefault": false,
    "comment": "First attempt at creating the Flow",
    "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
    "id": {
      "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
      "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
    },
    "developerName": "Course Registration Flow",
    "developerSummary": "This is a simple course registration flow.",
    "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
    "allowJumping": false,
    "stateExpirationLength": 0,
    "authorization": {
      "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
      "globalAuthenticationType": "ALL_USERS",
      "streamBehaviourType": "USE_EXISTING",
      "groups": null,
      "users": null,
      "locations": null
    },
    "groupElements": null,
    "mapElements": null,
    "navigationElements": null,
    "pageElements": null,
    "tagElements": null,
    "macroElements": null,
    "valueElements": null,
    "typeElements": null,
    "serviceElements": null
  },
  {
    "dateCreated": "0001-01-00T00:00:00Z",
    "dateModified": "0001-01-00T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "alertEmail": null,
    "isActive": false,
    "isDefault": false,
    "comment": "Got it right this time after user feedback",
    "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
    "id": {
      "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
      "versionId": "a7594dc0-he7a-47il-asd8-7lf15e219e12"
    },
    "developerName": "Course Registration Flow",
    "developerSummary": "This is a simple course registration flow.",
    "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
    "allowJumping": false,
    "stateExpirationLength": 0,
    "authorization": {
      "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
      "globalAuthenticationType": "ALL_USERS",
      "streamBehaviourType": "USE_EXISTING",
      "groups": null,
      "users": null,
      "locations": null
    },
    "groupElements": null,
    "mapElements": null,
    "navigationElements": null,
    "pageElements": null,
    "tagElements": null,
    "macroElements": null,
    "valueElements": null,
    "typeElements": null,
    "serviceElements": null
  }
]

Used to get the list of all Flow SnapShots for a particular Flow. The Flow SnapShot object is the package that is sent to the Platform runtime engine.

HTTP Request

GET /api/draw/1/flow/snap/{id}

Parameters

Key Description
id
string
The unique identifier for the Flow

Get Flow SnapShots

Example 200 OK Response

{
  "dateCreated": "0001-01-00T00:00:00Z",
  "dateModified": "0001-01-00T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "alertEmail": null,
  "isActive": false,
  "isDefault": false,
  "comment": "First attempt at creating the Flow",
  "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
  "id": {
    "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
    "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
  },
  "developerName": "Course Registration Flow",
  "developerSummary": "This is a simple course registration flow.",
  "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
  "allowJumping": false,
  "stateExpirationLength": 0,
  "authorization": {
    "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
    "globalAuthenticationType": "ALL_USERS",
    "streamBehaviourType": "USE_EXISTING",
    "groups": null,
    "users": null,
    "locations": null
  },
  "groupElements": [ { groupElements } ],
  "mapElements": [ { mapElements } ],
  "navigationElements": [ { navigationElements } ],
  "pageElements": [ { pageElements } ],
  "tagElements": [ { tagElements } ],
  "macroElements": [ { macroElements } ],
  "valueElements": [ { valueElements } ],
  "typeElements": [ { typeElements } ],
  "serviceElements": [ { serviceElements } ]
}

Used to get the Flow SnapShot for a particular Flow Version. The Flow SnapShot object is the package that is sent to the Platform runtime engine.

HTTP Request

GET /api/draw/1/flow/snap/{id}/{version_id}

Parameters

Key Description
id
string
The unique identifier for the Flow
version_id
string
The unique identifier for the Flow Version

Activating a Flow SnapShot

Example 200 OK Response

{
  "dateCreated": "0001-01-00T00:00:00Z",
  "dateModified": "0001-01-00T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "alertEmail": null,
  "isActive": true,
  "isDefault": true,
  "comment": "First attempt at creating the Flow",
  "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
  "id": {
    "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
    "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
  },
  "developerName": "Course Registration Flow",
  "developerSummary": "This is a simple course registration flow.",
  "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
  "allowJumping": false,
  "stateExpirationLength": 0,
  "authorization": {
    "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
    "globalAuthenticationType": "ALL_USERS",
    "streamBehaviourType": "USE_EXISTING",
    "groups": null,
    "users": null,
    "locations": null
  },
  "groupElements": null,
  "mapElements": null,
  "navigationElements": null,
  "pageElements": null,
  "tagElements": null,
  "macroElements": null,
  "valueElements": null,
  "typeElements": null,
  "serviceElements": null
}

Used to activate and/or make default a Flow SnapShot version. The Flow SnapShot object is the package that is sent to the Platform runtime engine.

HTTP Request

POST /api/draw/1/flow/activation/{id}/{version_id}/{is_default}/{is_activated}

Parameters

Key Description
id
string
The unique identifier for the Flow
version_id
string
The unique identifier for the Flow Version
is_default
boolean
Indicates if this Flow SnapShot should be the default version for running users.
is_activated
boolean
Indicates if this Flow ShapShot is accessible to running users to run.

Reverting a Flow SnapShot

Example 200 OK Response

{
  "dateCreated": "0001-01-00T00:00:00Z",
  "dateModified": "0001-01-00T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "alertEmail": null,
  "isActive": true,
  "isDefault": true,
  "comment": "First attempt at creating the Flow",
  "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
  "id": {
    "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
    "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
  },
  "developerName": "Course Registration Flow",
  "developerSummary": "This is a simple course registration flow.",
  "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
  "allowJumping": false,
  "stateExpirationLength": 0,
  "authorization": {
    "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
    "globalAuthenticationType": "ALL_USERS",
    "streamBehaviourType": "USE_EXISTING",
    "groups": null,
    "users": null,
    "locations": null
  },
  "groupElements": null,
  "mapElements": null,
  "navigationElements": null,
  "pageElements": null,
  "tagElements": null,
  "macroElements": null,
  "valueElements": null,
  "typeElements": null,
  "serviceElements": null
}

Used to take an Flow SnapShot and apply it to the current Flow being modelled. This is equivalent to undoing changes to a Flow for Flow Builders. To revert a Flow SnapShot for running users, simply activate and make default the appropriate previous Flow SnapShot version. The Flow SnapShot object is the package that is sent to the Platform runtime engine.

HTTP Request

POST /api/draw/1/flow/revert/{id}/{version_id}

Parameters

Key Description
id
string
The unique identifier for the Flow
version_id
string
The unique identifier for the Flow Version

Group Element

Example Request:

{
  "id": "{id}",
  "elementType": "SWIMLANE",
  "developerName": "Compliance Team",
  "developerSummary": "Only for the compliance team",
  "x": 0,
  "y": 0,
  "height": 150,
  "width": 500,
  "groupElementId": "{id}",
  "authorization": {
    "serviceElementId": "{id}",
    "globalAuthenticationType": "SPECIFIED",
    "streamBehaviourType": "CREATE_NEW",
    "groups": [
      {
        "authenticationId": "id from directory",
        "attribute": "MEMBER"
      }
    ],
    "users": [
      {
        "authenticationId": "id from directory",
        "attribute": "DELEGATES"
      }
    ],
    "locations": null
  },
  "updateByName": false
}

The Group Element object represents any group or Element in your Flow diagram that can contain Map Elements.

Group Elements are used to add additional behavior to Map Elements in your Flow. The Group Element currently only supports the ability to change the authentication context of the Map Elements it contains. This allows builders to change the permissions for Map Elements contained in the Group Element and restrict the ability for running users to edit or take action on any Outcomes. The properties of the Group Element are outlined here.

Group Element

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Group Elements.
elementType
string
A unique element type for the Group Element. Valid values are:
  • SWIMLANE: Swimlane Element.
developerName
string
The name for the Group Element. This is typically a helpful name to remind builders of the purpose of the Group Element.
developerSummary
string
The summary for the Group Element. This is typically additional information that will help explain the purpose of the Group Element.
x
integer
The X coordinate of the Group Element in the Flow diagram.
y
integer
The Y coordinate of the Group Element in the Flow diagram.
height
integer
The height of the Group Element in the Flow diagram.
width
integer
The width of the Group Element in the Flow diagram.
groupElementId
string
The unique identifier for the Group Element that holds this Group Element. The Swimlane Group Element does not support nested groupings.
authorization
object
The configuration of the authorization context for this Group Element. See GroupAuthorization for details
updateByName
boolean
When working with Group Element objects through the modeling API, this setting should be set to true if you do not have a unique identifier for a Group Element but wish to update any Group Element in the system that has this same name. This key is typically only used when scripting updates to Flows as part of a migration tool.

Create/Update Group Elements

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "updateByName": false,
  "groupElementId": null,
  "x": 170,
  "y": 450,
  "height": 250,
  "width": 2480,
  "authorization": {
    "serviceElementId": "4d39d405-7eca-43f0-a4cb-419d55d8910c",
    "globalAuthenticationType": "SPECIFIED",
    "streamBehaviourType": "USE_EXISTING",
    "groups": [
      {
        "authenticationId": "0F915000000TrafCAC",
        "attribute": "MEMBERS"
      }
    ],
    "users": null,
    "locations": null
  },
  "id": "7f31a72e-eb11-4378-b9f8-ba70d334b789",
  "elementType": "SWIMLANE",
  "developerName": "Compliance and Risk",
  "developerSummary": ""
}

Used to create new Group Element objects or update existing ones. The Group Element object represents any group or Element in your Flow diagram that can contain Map Elements.

HTTP Request

POST /api/draw/1/{flow_id}/{editing_token}/group

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Group Element
editing_token
string
The active Editing Token for the Flow being edited

Body

The raw JSON for the Group Element.

Query Group Elements

Example 200 OK Response

[
  {
    "dateCreated": "0001-01-01T00:00:00Z",
    "dateModified": "0001-01-01T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "updateByName": false,
    "groupElementId": null,
    "x": 170,
    "y": 450,
    "height": 250,
    "width": 2480,
    "authorization": {
      "serviceElementId": "4d39d405-7eca-43f0-a4cb-419d55d8910c",
      "globalAuthenticationType": "SPECIFIED",
      "streamBehaviourType": "USE_EXISTING",
      "groups": [
        {
          "authenticationId": "0F915000000TrafCAC",
          "attribute": "MEMBERS"
        }
      ],
      "users": null,
      "locations": null
    },
    "id": "7f31a72e-eb11-4378-b9f8-ba70d334b789",
    "elementType": "SWIMLANE",
    "developerName": "Compliance and Risk",
    "developerSummary": ""
  }
]

Used to filter existing Group Element objects. The Group Element object represents any group or Element in your Flow diagram that can contain Map Elements.

HTTP Request

GET /api/draw/1/{flow_id}/{editing_token}/group?filter={filter}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Group Element
editing_token
string
The active Editing Token for the Flow being edited
filter
string
The filter for querying Group Elements

Get Group Element

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "updateByName": false,
  "groupElementId": null,
  "x": 170,
  "y": 450,
  "height": 250,
  "width": 2480,
  "authorization": {
    "serviceElementId": "4d39d405-7eca-43f0-a4cb-419d55d8910c",
    "globalAuthenticationType": "SPECIFIED",
    "streamBehaviourType": "USE_EXISTING",
    "groups": [
      {
        "authenticationId": "0F915000000TrafCAC",
        "attribute": "MEMBERS"
      }
    ],
    "users": null,
    "locations": null
  },
  "id": "7f31a72e-eb11-4378-b9f8-ba70d334b789",
  "elementType": "SWIMLANE",
  "developerName": "Compliance and Risk",
  "developerSummary": ""
}

Used to get an existing Group Element object. The Group Element object represents any group or Element in your Flow diagram that can contain Map Elements.

HTTP Request

GET /api/draw/1/{flow_id}/{editing_token}/group/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Group Element
editing_token
string
The active Editing Token for the Flow being edited
id
string
The unique identifier for the Group Element

Delete Group Element

Success 204 No Content Response

Used to delete an existing Group Element object. The Group Element object represents any group or Element in your Flow diagram that can contain Map Elements.

HTTP Request

DELETE /api/draw/1/{flow_id}/{editing_token}/group/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Group Element
editing_token
string
The active Editing Token for the Flow being edited
id
string
The unique identifier for the Group Element

Map Element

Example Request:

{
  "id": null,
  "developerName": "My Map Element",
  "developerSummary": "An example Map Element configuration",
  "elementType": "STEP",
  "x": 250,
  "y": 350,
  "groupElementId": "{id}",
  "pageElementId": "{id}",
  "dataActions": null,
  "listeners": null,
  "messageActions": null,
  "navigationOverrides": null,
  "operations": null,
  "outcomes": null,
  "viewMessageAction": null,
  "vote": null,
  "clearNavigationOverrides": false,
  "postUpdateToStream": false,
  "postUpdateWhenType": "not sure what this is",
  "postUpdateMessage": "The Flow has progressed to this step",
  "statusMessage": "The Flow is currently busy doing some work",
  "notAuthorizedMessage": "You are not authenticated for the swimlane",
  "userContent": "This is my content",
  "updateByName": false
}

The Map Element object represents any node or Element in your Flow diagram.

Map Elements are used to set out the actions and journey of your Flow. Each Map Element performs an action - which may be to present the user with information, collect information, or perform logical actions such as inserting records into a database, executing business rules, or sending messages to a 3rd party application. There’s a lot of functionality packed into Map Elements, and that has been separated out in the sections below. The base properties of the Map Element are outlined here.

Map Element

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Map Elements.
elementType
string
A unique element type for the Map Element. Valid values are:
  • START: Start Element.
  • STEP: Step Element.
  • INPUT: Page Element.
  • DECISION: Decision Element.
  • OPERATOR: Operator Element.
  • MESSAGE: Message Element.
  • DATABASE_SAVE: Database Save Element.
  • DATABASE_LOAD: Database Load Element.
  • DATABASE_DELETE: Database Delete Element.
developerName
string
The name for the Map Element. This is typically a helpful name to remind builders of the purpose of the Map Element.
developerSummary
string
The summary for the Map Element. This is typically additional information that will help explain the purpose of the Map Element.
x
integer
The X coordinate of the Map Element in the Flow diagram. If the Map Element is contained inside a Group Element, this the X coordinate in relation to the Group Element.
y
integer
The Y coordinate of the Map Element in the Flow diagram. If the Map Element is contained inside a Group Element, this the Y coordinate in relation to the Group Element.
groupElementId
string
The unique identifier for the Group Element that holds this Map Element. This identifier is only required for Map Elements that are in a Group Element. E.g. if a Map Element is in a Swimlane, this will be the unique identifier of the Swimlane Group Element that is in charge of restricting access to this step in the Flow.
pageElementId
string
The unique identifier for the Page Element that is associated with this Map Element. This identifier is only required for Map Elements that will render a Page Layout. E.g. if a Map Element is a Page, this will be the unique identifier of the Page Layout that should be shown to the user at this step in the Flow.
clearNavigationOverrides
boolean
If any Navigation Overrides have been applied to the Navigation of the running Flow, this step should clear all of the overrides.
postUpdateToStream
boolean
If the Flow is associated with a Stream (E.g. a social feed in Chatter), this boolean indicates that the Map Element should automatically post to the stream when reached.
postUpdateWhenType
string
If the postUpdateToStream key is set to true, this value tells the platform when to perform the actual update. Valid values are:
  • ON_LOAD: Post the update to the stream when the Map Element loads.
  • ON_EXIT: Post the update to the stream when the Map Element is finished (i.e. by clicking on an Outcome that moves the Flow to the next step).
postUpdateMessage
string
If the postUpdateToStream key is set to true, this is the content of the message that will be posted to the stream.
statusMessage
string
If the Flow is currently in a “WAIT” state as a result of a Message Action, this is the message that will be shown to the users while waiting. The status message can be overwritten by the Service at runtime.
notAuthorizedMessage
string
If the running user(s) of the Flow does not have access to a particular section of the Flow (E.g. due to a Swimlane), this is the message that will be shown to the users who are not authorized to view the content or take action on a Map Element step.
userContent
string
The content that should be displayed to the running user(s) of the Flow. This key is only used for Step Map Elements and is a quick way of building out content in a Flow without needing to build a Page Layout.
updateByName
boolean
When working with Map Element objects through the modeling API, this setting should be set to true if you do not have a unique identifier for a Map Element but wish to update any Map Element in the system that has this same name. This key is typically only used when scripting updates to Flows as part of a migration tool.
viewMessageAction
string
(reserved for future development)
Data Actions

Example dataActions JSON:

  [
    {
      "developerName": "Save My Account",
      "crudOperationType": "SAVE",
      "isSmartSave": true,
      "order": 0,
      "valueElementToReferenceId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "valueElementToApplyId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "objectDataRequest": {
        "typeElementId": "{id}",
        "typeElementBindingId": "{id}",
        "listFilter": {
          "filterId": {
            "id": "{id}",
            "typeElementPropertyId": "{id}",
            "command": null
          },
          "comparisonType": "AND",
          "where": [
            {
              "columnTypeElementPropertyId": "{id}",
              "criteriaType": "EQUAL",
              "valueElementToReferenceId": {
                "id": "{id}",
                "typeElementPropertyId": "{id}",
                "command": null
              }
            }
          ],
          "orderByTypeElementPropertyId": "{id}",
          "orderByDirectionType": "DESC",
          "limit": 250,
          "filterByProvidedObjects": false
        },
        "command": {
          "commandType": null,
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      }
    }
  ]

A Data Action is used to perform create, read, update, or delete (CRUD) type operations on a Service. There are a number of features that make data actions particularly powerful:

  1. You do not need to manage INSERT vs UPDATE operations. We automatically track the objects in your Flow and know if it is a new object to be inserted or an update to an existing object. This is done using our “SAVE” operation. We do not separate INSERT and UPDATE.
  2. You can configure filters using our common metadata. This means you do not need to understand the query language of the underlying Service, you can create queries using a standard notation and we automatically translate this notation into SQL (RDBMS), SOQL (Salesforce), ZOQL (Zuora), etc.
  3. The Data Action automatically knows where the data needs to go. There is no need to map fields into the database as this is already configured in the Type. In addition, a number of Services also support “smart save” which does a smart merge of data collected/changed in the Flow with data already stored in the Service.
  4. If you need advanced data management capabilities such as summary roll-ups or joined tables, you can configure this using “commands” (as supported by the underlying Service implementation).
Key Description
developerName
string
The name for the Data Action. This is typically a helpful name to remind builders of the purpose of the Data Action.
crudOperationType
string
This is the type of operation being performed. Valid values are:
  • SAVE: Save the data in the referenced Value back to the Service. This is an create or update operation in CRUD.
  • LOAD: Load data from the Service into the referenced Value. This is a read operation in CRUD.
  • DELETE: Delete the data stored in the reference Value from the Service. This data action can only be performed in the Value was first loaded from the Service.
isSmartSave
boolean
Indicates if the data should saved using tracked changes in the data. Smart save must be supported in the underlying Service as the platform will only send changed data back to the Service rather than the complete Object or List.
order
integer
The order in which the Data Action should be performed in relation to other Data Actions. The order must be greater than or equal to zero. If Data Actions have the same order, they will be performed in parallel to improve Flow performance.
valueElementToReferenceId
object
The ValueElementId pointing to the Object or List Value that should be saved or deleted. This property is only needed for SAVE or DELETE operations or for LOAD operations where filterByProvidedObjects is true. E.g. which Object or List Value are you saving or deleting from the Service.
valueElementToApplyId
object
The ValueElementId pointing to the Object or List Value that should be changed as a result of the Data Action. This property is only needed for SAVE or LOAD operations. E.g. which Object or List Value should be populated as a result of executing the save or load on the Service. When objects are saved, we send back the resulting data as it can often include additional information due to formula fields, triggers, etc.
objectDataRequest
object
The configuration of the data operation being performed. See ObjectDataRequest for details.
Listeners

Example listeners JSON:

  [
    {
      "developerName": "My Listener",
      "serviceElementId": "{id}",
      "listenerType": null,
      "valueElementToReferenceForListeningId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "attributes": {
        "key1": "attribute1",
        "key2": "attribute2"
      }
    }
  ]

A Listener is used to listen to events on Objects stored or managed by a Service. When an event occurs (e.g. a record is updated) in the underlying application (e.g. Salesforce), the platform will trigger the executing Flow of the event so it can take appropriate action.

Listeners work as follows:

  1. You send the Service the Objects you want to listen to (referencing the appropriate Value). In addition, you specify the type of event you’re interested in (e.g. record created).
  2. The Service will notify the platform when that event has happened on the associated Object(s). This will populate the referenced Value with the latest data from the Service.
  3. You specify the Outcomes (with Comparisons/Rules) under which you “accept” the event and the path the Flow should follow. If those Comparisons/Rules are met, the Flow will proceed to the next MapElement in the Flow as defined by the matching Outcome. If not, the Flow will continue to wait until the appropriate event occurs.
Key Description
developerName
string
The name for the Listener. This is typically a helpful name to remind builders of the purpose of the Listener.
serviceElementId
string
The unique identifier for the Service that will be listening for events on the provided Objects.
listenerType
string
The type of events being listened for. The value depends on the implementation of the Service. Builders should refer to the documentation of the Service being used. E.g. “UPDATE” might listen for update events on a record in Salesforce.
valueElementToReferenceForListeningId
object
The Object or List Value that contains information about the data the Service should be listening to. E.g. This might reference a Value containing a particular “Account”. The Value being referenced typically must have been loaded from/saved to the Service before it can be listened to.
attributes
object
Key/value pairs that provide additional information for the listener to be registered. Builders should refer to the documentation of the Service being used.
Message Actions

Example messageActions JSON:

  [
    {
      "developerName": "Send Message",
      "serviceElementId": "{id}",
      "uriPart": null,
      "inputs": [
        {
          "developerName": "Hello",
          "contentType": "ContentString",
          "typeElementId": "{id}",
          "valueElementToReferenceId": {
            "id": "{id}",
            "typeElementPropertyId": "{id}",
            "command": null
          },
          "order": 0
        }
      ],
      "outputs": [
        {
          "developerName": "World",
          "contentType": "ContentString",
          "typeElementId": "{id}",
          "valueElementToApplyId": {
            "id": "{id}",
            "typeElementPropertyId": "{id}",
            "command": null
          },
          "order": 0
        }
      ],
      "attributes": {
        "key1": "attribute1",
        "key2": "attribute2"
      },
      "order": 0
    }
  ]

A Message Action is used to perform general API operations on a Service. There are a number of features that make Message Actions particularly powerful:

It’s important to note that Message Actions are described in the Service definition. The purpose of the Message Actions is to map Values in the Flow to the inputs and outputs specified by the Service.

Key Description
developerName
string
The name for the Message Action. This is typically a helpful name to remind builders of the purpose of the Message Action.
serviceElementId
string
The unique identifier for the Service that this Message Action will be executed against.
uriPart
string
The URI part of the Message Action supported by the Service. This property identifies which action will be executed against the Service.
inputs
array
The array of inputs associated with the action (as provided by the Service). Each Input entry maps a Value in the Flow to an input requested by the Service. Each Input entry has the following keys:

developerName (string):
The name of the Input as provided by the definition of the Service.

contentType (string):
The content type of the Input as provided by the Service. Valid values are:
  • ContentString: A string value
  • ContentNumber: A numeric value
  • ContentPassword: A hidden value
  • ContentDateTime: A date and time value
  • ContentContent: A rich content value
  • ContentObject: An object value
  • ContentList: A list value

typeElementId (string):
The Type of the Object or List value being provided.

valueElementToReferenceId (object):
The ValueElementId pointing to the Value to be mapped to the Input entry.

order (integer):
The order in which this Input should appear when listed in any tooling user interface.
outputs
array
The array of outputs associated with the action (as provided by the Service). Each Output entry maps an output from the Service to a Value in the Flow. Each Output entry has the following keys:

developerName (string):
The name of the Output as provided by the definition of the Service.

contentType (string):
The content type of the Output as provided by the Service. Valid values are:
  • ContentString: A string value
  • ContentNumber: A numeric value
  • ContentPassword: A hidden value
  • ContentDateTime: A date and time value
  • ContentContent: A rich content value
  • ContentObject: An object value
  • ContentList: A list value

typeElementId (string):
The Type of the Object or List value being provided.

valueElementToApplyId (object):
The ValueElementId pointing to the Value to be mapped to the Output entry.

order (integer):
The order in which this Output should appear when listed in any tooling user interface.
attributes
object
Key/value pairs that provide additional information for the Message Action to be executed. Builders should refer to the documentation of the Service being used.
order
integer
The order in which the Message Action should be performed in relation to other Message Actions. The order must be greater than or equal to zero. If Message Actions have the same order, they will be performed in parallel to improve Flow performance.

Example navigationOverrides JSON:

  [
    {
      "navigationElementId": "{id}",
      "navigationItemId": "{id}",
      "locationMapElementId": "{id}",
      "isEnabled": false,
      "isVisible": true
    }
  ]

A Navigation Override is used to alter the functionality of Navigation in your Flow. As running users go through a Flow, it is often useful to alter how the Navigation works. As a result, when the user gets to a particular Map Element, you can execute changes to the Navigation. These changes will persist until altered by another Map Element. This can be useful in a variety of use-cases:

Key Description
navigationElementId
string
The unique identifier for the Navigation Element being overridden.
navigationItemId
string
The unique identifier for the specific Navigation Item within the Navigation Element that is being overridden.
locationMapElementId
string
The unique identifier that the Navigation Item should now point to as part of this override. If this is null, it is assumed that the Navigation Item should continue to point to the location specified in the original Navigation Element.
isEnabled
boolean
Indicates if the Navigation Item should be enabled. Disabling the Navigation Item prevents the running user(s) from moving to that location in the Flow via the Navigation.
isVisible
boolean
Indicates if the Navigation Item should be visible. If this key is set to false, the running user(s) will no longer see the Navigation Item in the Navigation.
Operations

Example operations JSON:

  [
    {
      "valueElementToApplyId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "valueElementToReferenceId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "macroElementToExecuteId": "{id}",
      "order": 0
    }
  ]

An Operation is used to make a change to a Value or execute a Macro in your Flow. Each Operation can be ordered allowing builders to do Operations in a particular sequence - as individual commands performed on Values. Here are some examples of Operations:

In mathematics, an Operation would be something like: x = 3

Key Description
valueElementToApplyId
object
The ValueElementId pointing to the Value that will be changed. In mathematic expression of x = 3, this is x.
valueElementToReferenceId
object
The ValueElementId pointing to the Value that will be referenced for the change. In mathematic expression of x = 3, this is 3.
macroElementToExecuteId
object
The unique identifier for the Macro Element that should be executed as part of this Operation. If this key is populated, you cannot also use the Value keys above - you should do any Value changes in a separate Operation entry.
order
integer
The order in which the Operation should be performed in relation to other Operations. The order must be greater than or equal to zero. If Operations have the same order, they will be applied in random order.
Outcomes

Example outcomes JSON:

  [
    {
      "id": null,
      "developerName": "Next",
      "developerSummary": null,
      "label": "Next",
      "nextMapElementId": "{id}",
      "pageActionType": "SAVE",
      "isBulkAction": false,
      "pageActionBindingType": "EDIT",
      "pageObjectBindingId": "{id}",
      "order": 0,
      "comparison": {
        "comparisonType": "AND",
        "rules": [
          {
            "leftValueElementToReferenceId": {
              "id": "{id}",
              "typeElementPropertyId": "{id}",
              "command": null
            },
            "criteriaType": "EQUAL_TO",
            "rightValueElementToReferenceId": {
              "id": "{id}",
              "typeElementPropertyId": "{id}",
              "command": null
            }
          }
        ],
        "comparisons": null,
        "order": 0
      },
      "flowOut": {
        "valueElementStateId": {
          "id": "{id}",
          "typeElementPropertyId": "{id}",
          "command": null
        },
        "valueElementFlowId": {
          "id": "{id}",
          "typeElementPropertyId": "{id}",
          "command": null
        },
        "flowId": {
          "id": "{id}",
          "versionId": "{id}"
        },
        "valueElementExternalIdentifierId": {
          "id": "{id}",
          "typeElementPropertyId": "{id}",
          "command": null
        }
      },
      "controlPoints": [
        {
          "x": 0,
          "y": 0
        }
      ]
    }
  ]

An Outcome is used to make move the running user(s) from one Map Element in the Flow to another or from one Map Element into another Flow. An outcome can represent a button the running user(s) can click, or it can represent a path the executing Flow should follow based on logical operations in the Flow. Outcomes can be combined with business rules (provided by Comparison/Rules) to determine the path of execution based on pre-determined logic.

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Outcomes.
developerName
string
The name for the Outcome. This is typically a helpful name to remind builders of the purpose of the Outcome.
developerSummary
string
The summary for the Outcome. This is typically additional information that will help explain the purpose of the Outcome.
label
string
The label for the Outcome. If the Outcome will appear as a button to the running user(s), a label is required.
nextMapElementId
string
The unique identifier for the Map Element that this outcome should send the user to. If the flowOut key is used, this property is not required as the running user(s) will leave the current Flow and be sent into the Flow configured in the flowOut key.
pageActionType
string
Determines if the data collected at this Map Element should be saved and the type of validation that should be applied when saving. Valid values are:
  • SAVE: If the outcome is selected, save all of the data collected/changed back to the Flow State.
  • NO_SAVE: If the outcome is selected, do not save any of the data collected/changed. This is the equivalent of a “cancel”.
  • PARTIAL_SAVE: If the outcome is selected, save any of the data collected/changed, but ignore any isRequired designations on fields. This allows the running user(s) to follow an outcome path without the running user(s) completing all of the required Page fields.
isBulkAction
boolean
Indicates that this outcome should be treated as a “bulk” operation. This is not tied to any functionality in the platform, but rather indicates to UX developers that the outcome should not appear “inline” in tables, etc.
pageActionBindingType
string
An arbitrary string value that indicates the type of button the Outcome represents. This indicates to UX designers how they should render the button to running users. For example, if this key is set to “DELETE”, the UX designer might decide to give the Outcome button a red background and an ‘x’ icon.
pageObjectBindingId
string
The unique identifier of the Page Component or Container in the Page Layout associated with this Map Element (as indicated by the pageElementId for the Map Element). If this key is provided, the Outcome will appear “with” the Page Component or Container. For example, if the Outcome is bound to a table Component, it would appear either with each record in the table (isBulkAction: false) or at the top of the table (isBulkAction: true).
order
integer
The order in which the Outcome should be evaluated or shown to running user(s) in relation to other Outcomes. The order must be greater than or equal to zero. If Outcomes have the same order, they will be evaluated or rendered in random order. When Comparison/Rules are configured, the order is particularly important as it determines the order in which the rules are evaluated.
comparison
object
The base Comparison object that should be used when evaluating Rules. The Comparison indicates how the array of Rules should be evaluated - e.g. this AND that, or, this OR that. All Rules within a Comparison object are evaluated according to the same comparisonType. However, Comparison objects and Rule objects can be nested to create a hierarchy of business rules. E.g. Expressions such as (x > y OR a <= b) AND c = d.

comparisonType (string):
The way in which the Rules should be compared. Valid values are:
  • AND: Compare each Rule entry using an AND. This means that all Rules in the comparison must be true for this outcome to be selected.
  • OR: Compare each Rule entry using an OR. This means that any of the Rules in the comparison must be true for this outcome to be selected.

rules (array):
The array of Rule objects that should be evaluated for this Comparison object.

leftValueElementToReferenceId (object):
The ValueElementId pointing to the Value that holds the “left” part of the rule. In the expression ‘x > y’, this is ‘x’.

criteriaType (string):
The criteria under which the left and right Values should be compared. In the expression ‘x > y’, this is ‘>’. Valid values are:
  • EQUAL: {left} is equal to {right}
  • NOT_EQUAL: {left} is not equal to {right}
  • GREATER_THAN: {left} is greater than {right}
  • GREATER_THAN_OR_EQUAL: {left} is greater than or equal to {right}
  • LESS_THAN: {left} is less than {right}
  • LESS_THAN_OR_EQUAL: {left} is less than or equal to {right}
  • CONTAINS: {left} contains the characters in {right}
  • STARTS_WITH: {left} starts with the characters in {right}
  • ENDS_WITH: {left} ends with the characters in {right}
  • IS_EMPTY: {left} is empty or null. When this criteria type is used, it must be compared with a {right} that is a ContentBoolean.

rightValueElementToReferenceId (object):
The ValueElementId pointing to the Value that holds the “right” part of the rule. In the expression ‘x > y’, this is ‘y’.

comparisons (array):
The array of nested Comparison objects associated with this parent Comparison.
flowOut
object
The details of the Flow that this outcome should link to if the user clicks on the Outcome. The Flow Out configuration can only be used with Step and Page elements.

valueElementStateId (object):
The ValueElementId pointing to the Value that holds the unique identifier for the State of a running Flow. If this object is configured, the other keys on this object are redundant.

valueElementFlowId (object):
The ValueElementId pointing to the Value that holds the unique identifier for the Flow that should be started. The key should be used instead of the flowId key and allows dynamic assignments of a Flow.

flowId (object):
The unique identifier for the Flow that should be started. This object contains an id and a versionId key for the Flow, however, only the id key is respected as versioned Flow links are not supported.

valueElementExternalIdentifierId (object):
The ValueElementId pointing to the Value that should be assigned to the running Flow’s external identifier. The external identifier can be used to load or filter Flow States.
controlPoints
array
The array of control points (or “kinks”) in the Outcome arrow as it appears in the Flow diagram. If there are no control points, it is assumed the arrow for the Outcome points directly from this Map Element to the next Map Element.

x (integer):
The X coordinate of the control point in the Flow diagram.

y (integer):
The Y coordinate of the control point in the Flow diagram.
Vote

Example vote JSON:

  {
    "voteType": null,
    "minimumCount": 0,
    "minimumPercent": 0,
    "attributes": {
      "key1": "attribute1",
      "key2": "attribute2"
    }
  }

The Vote object is used to configure voting or multi-user approval options on an Outcome. By configuring the Vote, you can determine if a set number of running users or a percentage of running users (within the authentication context of the Map Element) must click on a particular Outcome before the Flow will proceed down that path. For example, before the approval is accepted, more than two running users must click on the “Approve” outcome before the Flow will progress. A few details about this feature:

The implementation of the Vote algorithm is determined by the Service. Builders should refer to the documentation of the Service being used. The first running user to click on an Outcome contained in a voting Map Element will force the platform to “lock” the Page from any further user inputs. Effectively the Map Element becomes read-only until the Vote is completed.

Key Description
voteType
string
The type of Vote this object represents. The values for this key are arbitrary, however, if a Service supports Voting, we request that developers support two fundamental Voting approaches:
  • COUNT: The Vote should be based on a fixed number of running users that click on the Outcome.
  • PERCENT: The Vote should be based on the percentage of running users that click on the Outcome. The percentage is calculated based on the authorization context of the Map Element at the time of execution.
minimumCount
integer
A number representing the minimum number of running users that must click on any Outcome for the Flow to follow that path.
minimumPercent
integer
A number representing the minimum percentage of running users that must click on any Outcome for the Flow to follow that path. 100% would be 100.
attributes
object
Key/value pairs that provide additional information for the Vote to be executed. Builders should refer to the documentation of the Service being used.

Create/Update Map Elements

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "operations": null,
  "listeners": null,
  "viewMessageAction": null,
  "messageActions": null,
  "dataActions": null,
  "navigationOverrides": null,
  "vote": null,
  "clearNavigationOverrides": false,
  "postUpdateToStream": false,
  "userContent": null,
  "statusMessage": null,
  "postUpdateMessage": null,
  "notAuthorizedMessage": null,
  "postUpdateWhenType": "",
  "updateByName": false,
  "groupElementId": "7f31a72e-eb11-4378-b9f8-ba70d334b789",
  "x": 1190,
  "y": 150,
  "pageElementId": "ed206576-c91c-426c-988b-76dd14752da7",
  "outcomes": [
    {
      "id": "56b5872c-c1cd-45fc-9248-d1e588732b9e",
      "developerName": "Submit",
      "developerSummary": null,
      "label": "Submit",
      "nextMapElementId": "f66ae1c0-c9ae-4015-bf6d-8632afcf51ce",
      "pageActionType": "",
      "isBulkAction": false,
      "pageActionBindingType": "SAVE",
      "pageObjectBindingId": null,
      "order": 0,
      "comparison": null,
      "flowOut": null,
      "controlPoints": null,
      "nextMapElementDeveloperName": null
    }
  ],
  "id": "898fb039-d99f-4302-9e3c-f8b6f68a2fed",
  "elementType": "INPUT",
  "developerName": "Assess Incident",
  "developerSummary": ""
}

Used to create new Map Element objects or update existing ones. The Map Element object represents any node or Element in your Flow diagram.

HTTP Request

POST /api/draw/1/{flow_id}/{editing_token}/map

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Map Element
editing_token
string
The active Editing Token for the Flow being edited

Body

The raw JSON for the Map Element.

Query Map Elements

Example 200 OK Response

[
  {
    "dateCreated": "0001-01-01T00:00:00Z",
    "dateModified": "0001-01-01T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "operations": null,
    "listeners": null,
    "viewMessageAction": null,
    "messageActions": null,
    "dataActions": null,
    "navigationOverrides": null,
    "vote": null,
    "clearNavigationOverrides": false,
    "postUpdateToStream": false,
    "userContent": null,
    "statusMessage": null,
    "postUpdateMessage": null,
    "notAuthorizedMessage": null,
    "postUpdateWhenType": "",
    "updateByName": false,
    "groupElementId": "7f31a72e-eb11-4378-b9f8-ba70d334b789",
    "x": 1190,
    "y": 150,
    "pageElementId": "ed206576-c91c-426c-988b-76dd14752da7",
    "outcomes": [
      {
        "id": "56b5872c-c1cd-45fc-9248-d1e588732b9e",
        "developerName": "Submit",
        "developerSummary": null,
        "label": "Submit",
        "nextMapElementId": "f66ae1c0-c9ae-4015-bf6d-8632afcf51ce",
        "pageActionType": "",
        "isBulkAction": false,
        "pageActionBindingType": "SAVE",
        "pageObjectBindingId": null,
        "order": 0,
        "comparison": null,
        "flowOut": null,
        "controlPoints": null,
        "nextMapElementDeveloperName": null
      }
    ],
    "id": "898fb039-d99f-4302-9e3c-f8b6f68a2fed",
    "elementType": "INPUT",
    "developerName": "Assess Incident",
    "developerSummary": ""
  }
]

Used to filter existing Map Element objects. The Map Element object represents any node or Element in your Flow diagram.

HTTP Request

GET /api/draw/1/{flow_id}/{editing_token}/map?filter={filter}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Map Element
editing_token
string
The active Editing Token for the Flow being edited
filter
string
The filter for querying Map Elements

Get Map Element

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "operations": null,
  "listeners": null,
  "viewMessageAction": null,
  "messageActions": null,
  "dataActions": null,
  "navigationOverrides": null,
  "vote": null,
  "clearNavigationOverrides": false,
  "postUpdateToStream": false,
  "userContent": null,
  "statusMessage": null,
  "postUpdateMessage": null,
  "notAuthorizedMessage": null,
  "postUpdateWhenType": "",
  "updateByName": false,
  "groupElementId": "7f31a72e-eb11-4378-b9f8-ba70d334b789",
  "x": 1190,
  "y": 150,
  "pageElementId": "ed206576-c91c-426c-988b-76dd14752da7",
  "outcomes": [
    {
      "id": "56b5872c-c1cd-45fc-9248-d1e588732b9e",
      "developerName": "Submit",
      "developerSummary": null,
      "label": "Submit",
      "nextMapElementId": "f66ae1c0-c9ae-4015-bf6d-8632afcf51ce",
      "pageActionType": "",
      "isBulkAction": false,
      "pageActionBindingType": "SAVE",
      "pageObjectBindingId": null,
      "order": 0,
      "comparison": null,
      "flowOut": null,
      "controlPoints": null,
      "nextMapElementDeveloperName": null
    }
  ],
  "id": "898fb039-d99f-4302-9e3c-f8b6f68a2fed",
  "elementType": "INPUT",
  "developerName": "Assess Incident",
  "developerSummary": ""
}

Used to get an existing Map Element object. The Map Element object represents any node or Element in your Flow diagram.

HTTP Request

GET /api/draw/1/{flow_id}/{editing_token}/map/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Map Element
editing_token
string
The active Editing Token for the Flow being edited
id
string
The unique identifier for the Map Element

Delete Map Element

Success 204 No Content Response

Used to delete an existing Map Element object. The Map Element object represents any node or Element in your Flow diagram.

HTTP Request

DELETE /api/draw/1/{flow_id}/{editing_token}/map/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Map Element
editing_token
string
The active Editing Token for the Flow being edited
id
string
The unique identifier for the Map Element

Example Request:

{
  "label": "Incident Flow",
  "navigationItems": [
    {
      "locationMapElementId": "{id}",
      "developerName": "My Navigation Item",
      "developerSummary": "Links to a Map Element in my Flow",
      "label": "My Navigation Item",
      "navigationItems": null,
      "order": 0,
      "tags": null
    }
  ],
  "tags": null,
  "updateByName": false,
  "elementType": "NAVIGATION",
  "developerName": "My Navigation",
  "developerSummary": "Provides unstructured navigation around my Flow"
}

The Navigation Element object provides a menu or navigation structure allowing users to move around your Flow application in an unstructured way.

Navigation Elements are used to set out the structure and Map Element locations which users can jump to directly. As a result, your Map Elements act more like web pages on a website than steps in a process. The base properties of the Navigation Element are outlined here.

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Navigation Elements.
elementType
string
A unique element type for the Navigation Element. Valid values are:
  • NAVIGATION: Navigation Element.
developerName
string
The name for the Navigation Element. This is typically a helpful name to remind builders of the purpose of the Navigation Element.
developerSummary
string
The summary for the Navigation Element. This is typically additional information that will help explain the purpose of the Navigation Element.
label
string
The label for the Navigation Element. This will appear to the running user(s).
navigationItems
array
The array of Navigation Items that should be displayed to the running users so they can link directly to the specified Map Elements at any time during the use of the Flow. Each Navigation Item entry has the following keys:

id (string):
A unique identifier field assigned by the platform. This value should not be included for new Navigation Items.

locationMapElementId (string):
The unique identifier for a Map Element in the Flow. When the running user(s) select this Navigation Item, they will be taken directly to this Map Element.

developerName (string):
The name for the Navigation Item. This is typically a helpful name to remind builders of the purpose of the Navigation Item.

developerSummary (string):
The summary for the Navigation Item. This is typically additional information that will help explain the purpose of the Navigation Item.

label (string):
The label for the Navigation Item. This will appear to the running user(s).

navigationItems (array):
The array of nested Navigation Item objects associated with this parent Navigation Item.

order (integer):
The order in which the Navigation Item should be shown to running user(s) in relation to other Navigation Items. The order must be greater than or equal to zero. If Navigation Items have the same order, they will be rendered in random order.

tags (array):
The configuration of the tags associated with the Navigation Item. See PageTags for details.
tags
array
The configuration of the tags associated with the Navigation Element. See PageTags for details.
updateByName
boolean
When working with Navigation Element objects through the modeling API, this setting should be set to true if you do not have a unique identifier for a Navigation Element but wish to update any Navigation Element in the system that has this same name. This key is typically only used when scripting updates to Flows as part of a migration tool.

Create/Update Navigation Elements

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "label": "Incident Flow",
  "navigationItems": [
    {
      "id": "b03ce29f-d447-495b-9451-255e6805027b",
      "locationMapElementId": "5f299faf-dca0-4ea4-8407-8ec427229910",
      "developerName": "Open",
      "developerSummary": "",
      "label": "Open",
      "navigationItems": null,
      "order": 0,
      "tags": null
    },
    {
      "id": "48109bbd-f98c-4009-bb01-7c02aced91f7",
      "locationMapElementId": "2fadd4d9-4aec-44d9-b976-390e4788a92d",
      "developerName": "Op Risk",
      "developerSummary": "",
      "label": "Op Risk",
      "navigationItems": null,
      "order": 1,
      "tags": null
    },
    {
      "id": "d83fc074-88db-430e-bb62-18e13b4f5fc0",
      "locationMapElementId": "19038db7-bc20-4def-b844-86bb55ec5486",
      "developerName": "Business Head",
      "developerSummary": "",
      "label": "Bus Head",
      "navigationItems": null,
      "order": 2,
      "tags": null
    },
    {
      "id": "80319478-79a7-4285-b1f9-c6dcfa57d830",
      "locationMapElementId": "ba1bceb3-a119-4ad5-83d3-e3bbd34117b5",
      "developerName": "Done",
      "developerSummary": "",
      "label": "Done",
      "navigationItems": null,
      "order": 3,
      "tags": null
    }
  ],
  "tags": null,
  "updateByName": false,
  "id": "3c257f03-6932-4f1e-b71c-26560f883c4d",
  "elementType": "NAVIGATION",
  "developerName": "Incident",
  "developerSummary": ""
}

Used to create new Navigation Element objects or update existing ones. The Navigation Element object provides a menu or navigation structure allowing users to move around your Flow application in an unstructured way.

HTTP Request

POST /api/draw/1/{flow_id}/{editing_token}/navigation

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Navigation Element
editing_token
string
The active Editing Token for the Flow being edited

Body

The raw JSON for the Navigation Element.

Query Navigation Elements

Example 200 OK Response

[
  {
    "dateCreated": "0001-01-01T00:00:00Z",
    "dateModified": "0001-01-01T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "label": "Incident Flow",
    "navigationItems": [
      {
        "id": "b03ce29f-d447-495b-9451-255e6805027b",
        "locationMapElementId": "5f299faf-dca0-4ea4-8407-8ec427229910",
        "developerName": "Open",
        "developerSummary": "",
        "label": "Open",
        "navigationItems": null,
        "order": 0,
        "tags": null
      },
      {
        "id": "48109bbd-f98c-4009-bb01-7c02aced91f7",
        "locationMapElementId": "2fadd4d9-4aec-44d9-b976-390e4788a92d",
        "developerName": "Op Risk",
        "developerSummary": "",
        "label": "Op Risk",
        "navigationItems": null,
        "order": 1,
        "tags": null
      },
      {
        "id": "d83fc074-88db-430e-bb62-18e13b4f5fc0",
        "locationMapElementId": "19038db7-bc20-4def-b844-86bb55ec5486",
        "developerName": "Business Head",
        "developerSummary": "",
        "label": "Bus Head",
        "navigationItems": null,
        "order": 2,
        "tags": null
      },
      {
        "id": "80319478-79a7-4285-b1f9-c6dcfa57d830",
        "locationMapElementId": "ba1bceb3-a119-4ad5-83d3-e3bbd34117b5",
        "developerName": "Done",
        "developerSummary": "",
        "label": "Done",
        "navigationItems": null,
        "order": 3,
        "tags": null
      }
    ],
    "tags": null,
    "updateByName": false,
    "id": "3c257f03-6932-4f1e-b71c-26560f883c4d",
    "elementType": "NAVIGATION",
    "developerName": "Incident",
    "developerSummary": ""
  }
]

Used to filter existing Navigation Element objects. The Navigation Element object provides a menu or navigation structure allowing users to move around your Flow application in an unstructured way.

HTTP Request

GET /api/draw/1/{flow_id}/{editing_token}/navigation?filter={filter}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Navigation Element
editing_token
string
The active Editing Token for the Flow being edited
filter
string
The filter for querying Navigation Elements

Get Navigation Element

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "label": "Incident Flow",
  "navigationItems": [
    {
      "id": "b03ce29f-d447-495b-9451-255e6805027b",
      "locationMapElementId": "5f299faf-dca0-4ea4-8407-8ec427229910",
      "developerName": "Open",
      "developerSummary": "",
      "label": "Open",
      "navigationItems": null,
      "order": 0,
      "tags": null
    },
    {
      "id": "48109bbd-f98c-4009-bb01-7c02aced91f7",
      "locationMapElementId": "2fadd4d9-4aec-44d9-b976-390e4788a92d",
      "developerName": "Op Risk",
      "developerSummary": "",
      "label": "Op Risk",
      "navigationItems": null,
      "order": 1,
      "tags": null
    },
    {
      "id": "d83fc074-88db-430e-bb62-18e13b4f5fc0",
      "locationMapElementId": "19038db7-bc20-4def-b844-86bb55ec5486",
      "developerName": "Business Head",
      "developerSummary": "",
      "label": "Bus Head",
      "navigationItems": null,
      "order": 2,
      "tags": null
    },
    {
      "id": "80319478-79a7-4285-b1f9-c6dcfa57d830",
      "locationMapElementId": "ba1bceb3-a119-4ad5-83d3-e3bbd34117b5",
      "developerName": "Done",
      "developerSummary": "",
      "label": "Done",
      "navigationItems": null,
      "order": 3,
      "tags": null
    }
  ],
  "tags": null,
  "updateByName": false,
  "id": "3c257f03-6932-4f1e-b71c-26560f883c4d",
  "elementType": "NAVIGATION",
  "developerName": "Incident",
  "developerSummary": ""
}

Used to get an existing Navigation Element object. The Navigation Element object provides a menu or navigation structure allowing users to move around your Flow application in an unstructured way.

HTTP Request

GET /api/draw/1/{flow_id}/{editing_token}/navigation/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Navigation Element
editing_token
string
The active Editing Token for the Flow being edited
id
string
The unique identifier for the Navigation Element

Delete Navigation Element

Success 204 No Content Response

Used to delete an existing Navigation Element object. The Navigation Element object provides a menu or navigation structure allowing users to move around your Flow application in an unstructured way.

HTTP Request

DELETE /api/draw/1/{flow_id}/{editing_token}/navigation/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Navigation Element
editing_token
string
The active Editing Token for the Flow being edited
id
string
The unique identifier for the Navigation Element

Page Element

Example Request:

{
  "label": "Incident Page",
  "pageContainers": null,
  "pageComponents": null,
  "pageConditions": null,
  "stopConditionsOnFirstTrue": false,
  "attributes": {
    "key1": "attribute1",
    "key2": "attribute2"
  },
  "tags": null,
  "updateByName": false,
  "elementType": "PAGE_LAYOUT",
  "developerName": "Incident Page",
  "developerSummary": "My page for gathering Incident information",
  "id": "{id}"
}

The Page Element object provides the structure of your pages or screens.

The purpose of the Page Element is to allow Flow builders to lay out the structure of the pages the users will interact with as part of the Flow application. The Page Element is extremely extensible and allows developers to create their own Components and Containers as needed to give users the best possible experience using your Flow application. The base properties of the Page Element are outlined here.

Page Element

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Page Elements.
elementType
string
A unique element type for the Page Element. Valid values are:
  • PAGE_LAYOUT: Page Layout Element.
developerName
string
The name for the Page Element. This is typically a helpful name to remind builders of the purpose of the Page Element.
developerSummary
string
The summary for the Page Element. This is typically additional information that will help explain the purpose of the Page Element.
label
string
The label for the Page Element. This will appear to the running user(s).
pageContainers
array
The configuration of the Page Containers that set the layout of the Page Components. See Page Containers below for details.
pageComponents
array
The configuration of the Page Components that provide and gather information from and to the running user(s). See Page Components below for details.
pageConditions
array
The configuration of the Page Conditions that set out various business rules for how the Page Layout is rendered to the running user(s). See Page Conditions below for details.
stopConditionsOnFirstTrue
boolean
Indicates to the engine that the platform should stop evaluating the array of pageConditions as soon as one of them evaluates to true.
attributes
object
Key/value pairs that provide additional information for the Page Layout to be rendered. Builders should refer to the documentation of the UI code being used.
tags
array
The configuration of the tags associated with the Page Element. See PageTags for details.
updateByName
boolean
When working with Page Element objects through the modeling API, this setting should be set to true if you do not have a unique identifier for a Page Element but wish to update any Page Element in the system that has this same name. This key is typically only used when scripting updates to Flows as part of a migration tool.
Page Containers

Example pageContainers JSON:

  [
    {
      "containerType": "VERTICAL_FLOW",
      "developerName": "My Vertical Container",
      "label": "",
      "pageContainers": null,
      "order": 0,
      "attributes": {
        "key1": "attribute1",
        "key2": "attribute2"
      },
      "tags": null
    }
  ]

A Page Container is used to determine the scaffolding of your Page. Page Containers allow Flow builders to set out the relative position of Page Components on the Page. In comparison with HTML5, a Page Container would be equivalent to a ‘div’ tag. As a result, Page Containers do not have any value or input, they are simply used to determine the layout or scaffolding aspects of the Page.

The type of Page Container is determined by the containerType property and developers looking to build custom Containers should use a unique containerType name to identify their Container implementation. The properties outlined below are the common attributes for typical Containers, however, if these do not suffice, developers should use the “attributes” to extend the attributes for their own specific needs. It’s important to note that each of the properties below provides features and the engine does not have any understanding of one container type from another.

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Page Containers.
containerType
string
The type of container that should be rendered. The containerType key can contain any value, however the default ManyWho UI code supports the following container types:
  • VERTICAL: All child Page Components and Containers to this Container should be oriented vertically (e.g. in rows).
  • HORIZONTAL: All child Page Components and Containers to this Container should be oriented horizontally (e.g. in columns or shift to rows if there’s not enough space).
  • INLINE: All child Page Components and Containers to this Container should be oriented inline (e.g. beside each other horizontally and “wrap” to the next line if there’s not enough space).
  • GROUP: All child Page Containers to this Container should be grouped (e.g. each Container in this Container should appear as a tab).
developerName
string
The name for the Page Container. This is typically a helpful name to remind builders of the purpose of the Page Container.
label
string
The label for the Page Container. This will appear as a title heading to the running user(s).
pageContainers
array
The array of nested Page Container objects associated with this parent Container.
order
integer
The order in which the Page Container should be shown to running user(s) in relation to other Page Containers. The order must be greater than or equal to zero. If Page Containers have the same order, they will be rendered in random order.
attributes
object
Key/value pairs that provide additional information for the Page Container to be rendered. Builders should refer to the documentation of the UI code being used.
tags
array
The configuration of the tags associated with the Page Container. See PageTags for details.
Page Components

Example pageComponents JSON:

  [
   {
      "isEditable": true,
      "valueElementValueBindingReferenceId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": ""
      },
      "valueElementDataBindingReferenceId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": ""
      },
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R3",
      "developerName": "Assigned To",
      "componentType": "SELECT",
      "content": null,
      "label": "Assigned To",
      "columns": [
        {
          "typeElementPropertyId": "{id}",
          "isBound": false,
          "boundTypeElementPropertyId": "{id}",
          "label": "My Column",
          "isDisplayValue": true,
          "isEditable": false,
          "order": 0,
          "typeElementPropertyToDisplayId": "{id}",
          "componentType": null
        }
      ],
      "size": 0,
      "maxSize": 0,
      "height": 0,
      "width": 0,
      "isRequired": true,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "Hint information",
      "helpInfo": "Help information",
      "order": 0,
      "attributes": {
        "key1": "attribute1",
        "key2": "attribute2"
      },
      "tags": null
    }
  ]

A Page Component is used to show or edit information on your Page. In comparison with HTML5, a Page Component would be equivalent to an ‘input’, ‘textarea’, or similar tag. As a result, Page Components typically do have a value or input, and are used to prompt the user for some form or input or to view a particular piece of information on the Page.

The type of Page Component is determined by the componentType property and developers looking to build custom Components should use a unique componentType name to identify their Component implementation. The properties outlined below are the common attributes for typical Components, however, if these do not suffice, developers should use the “attributes” to extend the attributes for their own specific needs. It’s important to note that each of the properties below provides features and the engine does not have any understanding of one component type from another.

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Page Components.
componentType
string
The type of component that should be rendered. The componentType key can contain any value, however the default ManyWho UI code supports the following component types:
  • PRESENTATION: Display formatted content to the running user(s) (typically HTML5).
  • IMAGE: Display a single image to the running user(s) (images can also be embedded in PRESENTATION markup).
  • RICH_TEXT: Collect formatted content from the running user(s) (typically an HTML5 editor).
  • INPUT: Collect string, date/time, numeric, password, etc data from the running user(s).
  • RADIO: Collect a single selection option from the running user(s), shown as radio buttons.
  • CHECKBOX: Collect a boolean or yes/no selection from the running user(s).
  • SELECT: Collect a single selection option from the running user(s), shown as a combobox.
  • FILES: Allow the running user(s) to upload/download and select from a list of files.
  • TABLE: Allow the running user(s) to edit, select, multi-select, search for data in a List or from a remote data source.
content
string
The content that should be presented to the running user(s) as part of this Page Component. This property will be parsed if Value References are used in the content.
isEditable
boolean
Indicates if the Page Component is editable by the running user(s).
valueElementValueBindingReferenceId
object
The Value that should be used to store any data collected from the running user(s).
valueElementDataBindingReferenceId
object
The Value that should be used to provide any data options that will be presented to the running user(s). For example, for a SELECT or RADIO Component, this would contain the list of options the running user(s) can select from.
objectDataRequest
object
The ObjectDataRequest that should be used to asynchronously get the data options that will be presented to the running user(s). This is similar to the valueElementDataBindingReferenceId, however, the data is collected from the underlying Service asynchronously once the Page loads. The data collected is not stored in the Flow State.
fileDataRequest
object
The FileDataRequest that should be used to asynchronously get the list of Files that will be presented to the running user(s). The file data is collected from the underlying Service asynchronously once the Page loads. The data collected is not stored in the Flow State.
imageUri
string
The Uri of the image that should be presented to the running user(s) as part of this Page Component. This property will be parsed if Value References are used in the Uri.
pageContainerId
string
The unique identifier for the Container that this Component should be placed into. This is the PageContainer.id property. This value is assigned by the platform.
pageContainerDeveloperName
string
The unique name for the Container that this Component should be placed into. This is the PageContainer.developerName property. When creating a Page Element, you can use the developerName property of the Container to identify the placement of your Components.
label
string
The label for the Page Component. This will appear as a title heading to the running user(s).
columns
array
The array of columns associated with this Page Component. This property is typically used for rendering data or file tables. Each Column entry has the following keys:

typeElementPropertyId (string):
The unique identifier of the Property in the Type of data being listed. This is property tells the platform which Property in the Type should be used to populate this column of data.

isBound (boolean):
Indicates if this property is bound to the underlying

boundTypeElementPropertyId (string):
If the valueElementValueBindingReferenceId is an Object of a different Type from the Type being listed, this property should be used. The value provided here should be the unique identifier of the Property in the Type for the valueElementValueBindingReferenceId Value. The platform will assign this column value into that Property.

label (string):
The label for the column.

isDisplayValue (boolean):
Indicates if this column should be displayed to the running user(s).

isEditable (boolean):
Indicates if this column should be editable for running user(s).

order (integer):
The order in which this column should appear in relation to other columns.

typeElementPropertyToDisplayId (string):
If the Property in the Type is itself an Object, this property can be used to reference which Property in that Object Value will be displayed to the running user(s).
size
integer
The number of characters that should be displayed for the Page Component.
maxSize
integer
The maximum number of characters that can be entered by the running user(s) for this Page Component.
height
integer
The number of characters high, or the number of pixels high the Page Component should be rendered.
width
integer
The number of characters wide, or the number of pixels wide the Page Component should be rendered.
isRequired
boolean
Indicates if the Page Component is required by the running user(s).
isMultiSelect
boolean
Indicates if the Page Component allows multiple selection of options by the running user(s).
isSearchable
boolean
Indicates if the Page Component is searchable by the running user(s).
hintValue
string
The hint value for the Page Component. This will appear as a label inside of inputs to help the running user(s) as to what needs to be provided.
helpInfo
string
The help information value for the Page Component. This will appear as help information for running user(s).
order
integer
The order in which the Page Component should be shown to running user(s) in relation to other Page Components in the same Page Container. The order must be greater than or equal to zero. If Page Components have the same order, they will be rendered in random order.
attributes
object
Key/value pairs that provide additional information for the Page Component to be rendered. Builders should refer to the documentation of the UI code being used.
tags
array
The configuration of the tags associated with the Page Component. See PageTags for details.
Page Conditions

Example pageConditions JSON:

  [
    {
      "pageRules": [
        {
          "left": {
            "pageObjectReferenceId": "{id}",
            "typeElementPropertyId": "{id}",
            "pageObjectReferenceDeveloperName": null,
            "valueElementToReferenceId": {
              "id": "{id}",
              "typeElementPropertyId": "{id}",
              "command": null
            },
            "metadataType": "VALUE"
          },
          "criteriaType": "EQUAL",
          "right": {
            "pageObjectReferenceId": "{id}",
            "typeElementPropertyId": "{id}",
            "pageObjectReferenceDeveloperName": null,
            "valueElementToReferenceId": {
              "id": "{id}",
              "typeElementPropertyId": "{id}",
              "command": null
            },
            "metadataType": "VALUE"
          }
        }
      ],
      "comparisonType": "AND",
      "pageOperations": [
        {
          "assignment": null,
          "filter": null
        }
      ]
    }
  ]

Page Conditions are used to make your Pages dynamic. Based on a set of Page Rules, the Page Conditions can assign values to your Page Components but also change various properties on your Page Components and Containers such as: required, editable, visible. Page Components can also have data refreshed and objectDataRequest information dynamically assigned so you can, for example, change TABLE filters. This gives Flow builders the ability to provide single Pages that can provide the running user(s) with a very dynamic experience.

Key Description
pageRules
array
The array of Page Rules that should be evaluated before performing any of the Page Operations. Each Page Rule represents an “if” statement (e.g. If x > y …). If the Page Rule is true, “then” the associated Page Operations will be performed. Each Page Rule entry has the following keys:

left (object):
The left Page Object Reference (see below for details) pointing to the Value Element, Page Component, or Page Container. In the expression ‘x > y’, this is ‘x’.

criteriaType (string):
The criteria under which the left and right Values should be compared. In the expression ‘x > y’, this is ‘>’. Valid values are:
  • EQUAL: {left} is equal to {right}
  • NOT_EQUAL: {left} is not equal to {right}
  • GREATER_THAN: {left} is greater than {right}
  • GREATER_THAN_OR_EQUAL: {left} is greater than or equal to {right}
  • LESS_THAN: {left} is less than {right}
  • LESS_THAN_OR_EQUAL: {left} is less than or equal to {right}
  • CONTAINS: {left} contains the characters in {right}
  • STARTS_WITH: {left} starts with the characters in {right}
  • ENDS_WITH: {left} ends with the characters in {right}
  • IS_EMPTY: {left} is empty or null. When this criteria type is used, it must be compared with a {right} that is a ContentBoolean.

right (object):
The right Page Object Reference (see below for details) pointing to the Value Element, Page Component, or Page Container. In the expression ‘x > y’, this is ‘y’.
comparisonType
string
The way in which the Rules should be compared. Valid values are:
  • AND: Compare each Rule entry using an AND. This means that all Rules in the comparison must be true for this outcome to be selected.
  • OR: Compare each Rule entry using an OR. This means that any of the Rules in the comparison must be true for this outcome to be selected.
pageOperations
array
The array of Page Operations that should be performed if the Page Rules evaluate to true. Each Page Operation entry has the following keys:

assignment (object):
The configuration of the Assignment that should be performed. See Page Operation Assignment below for details.

filter (object):
The configuration of the Filter that should be performed. See Page Operation Filter below for details.
Page Operation Assignment

Example assignment JSON:

  {
    "assignee": {
      "pageObjectReferenceId": "{id}",
      "typeElementPropertyId": "{id}",
      "pageObjectReferenceDeveloperName": "Financial Amount",
      "valueElementToReferenceId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "metadataType": "METADATA.EDITABLE"
    },
    "assignor": {
      "pageObjectReferenceId": "{id}",
      "typeElementPropertyId": "{id}",
      "pageObjectReferenceDeveloperName": null,
      "valueElementToReferenceId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "metadataType": "VALUE"
    }
  }

The Assignment object should be used when a value or piece of metadata for a Component or Container needs to be changed. For example, a Page Component should be set as ‘required’ under a specific set of conditions. Or a Page Container should no longer be visible under another set of conditions.

Key Description
assignee
object
The Page Object Reference (see below for details) pointing to the Value Element, Page Component, or Page Container being assigned. This is the object that will be altered as part of this assignment.
assignor
object
The Page Object Reference (see below for details) pointing to the Value Element, Page Component, or Page Container being referenced for the assignment. This is the object that will be used to source the value that will be used as part of this assignment.
Page Operation Filter

Example filter JSON:

  {
    "assignee": {
      "pageObjectReferenceId": "{id}",
      "typeElementPropertyId": "{id}",
      "pageObjectReferenceDeveloperName": "Financial Amount",
      "valueElementToReferenceId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "metadataType": "METADATA.EDITABLE"
    },
    "assignor": {
      "pageObjectReferenceId": "{id}",
      "typeElementPropertyId": "{id}",
      "pageObjectReferenceDeveloperName": null,
      "valueElementToReferenceId": {
        "id": "{id}",
        "typeElementPropertyId": "{id}",
        "command": null
      },
      "metadataType": "VALUE"
    }
  }

The Filter object should be used when applying filters based on conditions. For example, the list of options in a combobox should be limited based on a checkbox being checked. The Filter object can be applied to Lists as well as ObjectDataRequests.

Key Description
pageComponentId
string
The unique identifier for the Page Component to be filtered. This Page Component must be bound to a List (via the valueElementDataBindingReferenceId property) or to an ObjectDataRequest. pageComponentDeveloperName
string
columnTypeElementPropertyId
string
This property should only be used when filtering List bound Page Components. This property should be the unique identifier of the Property of the Type that is being filtered.
criteriaType
string
This property should only be used when filtering List bound Page Components. Valid values are:
  • EQUAL: {left} is equal to {right}
  • NOT_EQUAL: {left} is not equal to {right}
  • GREATER_THAN: {left} is greater than {right}
  • GREATER_THAN_OR_EQUAL: {left} is greater than or equal to {right}
  • LESS_THAN: {left} is less than {right}
  • LESS_THAN_OR_EQUAL: {left} is less than or equal to {right}
  • CONTAINS: {left} contains the characters in {right}
  • STARTS_WITH: {left} starts with the characters in {right}
  • ENDS_WITH: {left} ends with the characters in {right}
  • IS_EMPTY: {left} is empty or null. When this criteria type is used, it must be compared with a {right} that is a ContentBoolean.

filterValue
object
This property should only be used when filtering List bound Page Components. This property should be the unique identifier of the Property of the Type that is being filtered. The Page Object Reference (see below for details) pointing to the Value Element or Page Component containing the value to filter the List by.
objectDataRequest
object
The configuration of the data request to be performed. See ObjectDataRequest for details.
Page Object Reference

Example JSON:

  {
    "pageObjectReferenceId": "{id}",
    "pageObjectReferenceDeveloperName": null,
    "typeElementPropertyId": "{id}",
    "valueElementToReferenceId": {
      "id": "{id}",
      "typeElementPropertyId": "{id}",
      "command": null
    },
    "metadataType": "VALUE"
  }

The Page Object Reference is a general purpose object for referencing data and metadata on the Page. It can be configured to reference data that is not formally stored into the Flow State and also Value Elements that are.

Key Description
pageObjectReferenceId
string
The unique identifier of the Page Component or Page Container being referenced.
pageObjectReferenceDeveloperName
string
If a unique identifier has not yet been assigned to the Page Component, the developerName property can be referenced in place of the pageObjectReferenceId.
typeElementPropertyId
string
The unique identifier for the Property of the Type being referenced in the Page Component. This property is only needed for Page Components where the data binding (via the valueElementDataBindingReferenceId property) or ObjectDataRequest properties are being used.
valueElementToReferenceId
object
The ValueElementId pointing to the Value Element being referenced.
metadataType
string
The metadata of the Page Component or Page Container being referenced. Valid values are:
  • VALUE: The value of the component or ValueElementId being referenced.
  • METADATA.VISIBLE: The visibility status of the Page Component or Container.
  • METADATA.REQUIRED: The required status of the Page Component or Container.
  • METADATA.ENABLED: The enabled status of the Page Component or Container.

Create/Update Page Elements

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "label": "Incident Form",
  "pageContainers": [
    {
      "containerType": "VERTICAL_FLOW",
      "developerName": "Root",
      "label": "",
      "pageContainers": [
        {
          "containerType": "VERTICAL_FLOW",
          "developerName": "Intro",
          "label": "",
          "pageContainers": null,
          "order": 0,
          "attributes": null,
          "tags": null
        },
        {
          "containerType": "GROUP",
          "developerName": "Tabs",
          "label": "",
          "pageContainers": [
            {
              "containerType": "VERTICAL_FLOW",
              "developerName": "Actions",
              "label": "Actions",
              "pageContainers": null,
              "order": 0,
              "attributes": null,
              "tags": null
            },
            {
              "containerType": "VERTICAL_FLOW",
              "developerName": "Basic Details",
              "label": "Basic Details",
              "pageContainers": [
                {
                  "containerType": "VERTICAL_FLOW",
                  "developerName": "R1",
                  "label": "",
                  "pageContainers": null,
                  "order": 0,
                  "attributes": null,
                  "tags": null
                },
                {
                  "containerType": "INLINE_FLOW",
                  "developerName": "R2",
                  "label": "",
                  "pageContainers": null,
                  "order": 1,
                  "attributes": null,
                  "tags": null
                },
                {
                  "containerType": "INLINE_FLOW",
                  "developerName": "R3",
                  "label": "",
                  "pageContainers": null,
                  "order": 2,
                  "attributes": null,
                  "tags": null
                },
                {
                  "containerType": "VERTICAL_FLOW",
                  "developerName": "R4",
                  "label": "",
                  "pageContainers": null,
                  "order": 3,
                  "attributes": null,
                  "tags": null
                }
              ],
              "order": 1,
              "attributes": null,
              "tags": null
            }
          ],
          "order": 1,
          "attributes": null,
          "tags": null
        }
      ],
      "order": 0,
      "attributes": null,
      "tags": null
    }
  ],
  "pageComponents": [
    {
      "isEditable": false,
      "valueElementValueBindingReferenceId": null,
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "Intro",
      "developerName": "Draft Incident",
      "componentType": "PRESENTATION",
      "content": "<h1>Incident Form</h1>\n<p>Please review the details of the submitted incident.</p>",
      "label": "",
      "columns": null,
      "size": 0,
      "maxSize": 0,
      "height": 0,
      "width": 0,
      "isRequired": false,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 0,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": true,
      "valueElementValueBindingReferenceId": {
        "id": "4a513306-df8e-4c56-9eae-e71732df7489",
        "typeElementPropertyId": "69d0d073-1cf6-4cfe-9cdc-edaa4e68dabc",
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "Actions",
      "developerName": "Details of Immediate Action",
      "componentType": "TEXTAREA",
      "content": null,
      "label": "Details of immediate action taken / needed to correct the error",
      "columns": null,
      "size": 0,
      "maxSize": 2000,
      "height": 5,
      "width": 150,
      "isRequired": true,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 0,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": false,
      "valueElementValueBindingReferenceId": {
        "id": "4a513306-df8e-4c56-9eae-e71732df7489",
        "typeElementPropertyId": "222cb6d5-d3dd-41a4-8bc8-c970d0eb5ff9",
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "Actions",
      "developerName": "Financial Amount",
      "componentType": "INPUT",
      "content": null,
      "label": "Financial Impact (GBP)",
      "columns": null,
      "size": 15,
      "maxSize": 255,
      "height": 0,
      "width": 0,
      "isRequired": false,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 1,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": false,
      "valueElementValueBindingReferenceId": {
        "id": "4a513306-df8e-4c56-9eae-e71732df7489",
        "typeElementPropertyId": "ab82e602-bb92-4609-9f1d-35e71cde7669",
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "Actions",
      "developerName": "Details of Financial Impact",
      "componentType": "TEXTAREA",
      "content": null,
      "label": "Details of financial impact",
      "columns": null,
      "size": 0,
      "maxSize": 2000,
      "height": 5,
      "width": 150,
      "isRequired": false,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "Include the financial impact calculation and analysis of price impact where appropriate",
      "helpInfo": "",
      "order": 2,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": true,
      "valueElementValueBindingReferenceId": {
        "id": "e213c070-b272-4d21-afce-00cb672e5fd1",
        "typeElementPropertyId": null,
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R1",
      "developerName": "Summary of Incident",
      "componentType": "INPUT",
      "content": null,
      "label": "Summary of Incident",
      "columns": null,
      "size": 50,
      "maxSize": 255,
      "height": 0,
      "width": 0,
      "isRequired": true,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 0,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": false,
      "valueElementValueBindingReferenceId": {
        "id": "03dc41dd-1c6b-4b33-bf61-cbd1d0778fff",
        "typeElementPropertyId": "6e1d4d49-ab0d-4475-9488-cf4a71d36beb",
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R2",
      "developerName": "Raised By",
      "componentType": "INPUT",
      "content": null,
      "label": "Raised By",
      "columns": null,
      "size": 35,
      "maxSize": 255,
      "height": 0,
      "width": 0,
      "isRequired": false,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 0,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": false,
      "valueElementValueBindingReferenceId": {
        "id": "4a513306-df8e-4c56-9eae-e71732df7489",
        "typeElementPropertyId": "6188b05f-6154-4f35-bf8a-26dfc44ed861",
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R2",
      "developerName": "ID",
      "componentType": "INPUT",
      "content": null,
      "label": "ID",
      "columns": null,
      "size": 25,
      "maxSize": 255,
      "height": 0,
      "width": 0,
      "isRequired": false,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 1,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": true,
      "valueElementValueBindingReferenceId": {
        "id": "a8c39a6d-a285-406a-a3f3-fe89c3c5befe",
        "typeElementPropertyId": null,
        "command": ""
      },
      "valueElementDataBindingReferenceId": {
        "id": "1d930ab0-7cf6-48dc-ab4c-3793b35c235a",
        "typeElementPropertyId": null,
        "command": ""
      },
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R2",
      "developerName": "Complaint",
      "componentType": "SELECT",
      "content": null,
      "label": "Complaint",
      "columns": [
        {
          "typeElementPropertyId": "9db3173a-7773-4638-88f9-1c69a448f459",
          "isBound": false,
          "boundTypeElementPropertyId": null,
          "label": "",
          "isDisplayValue": true,
          "isEditable": false,
          "order": 0,
          "typeElementPropertyToDisplayId": null,
          "componentType": null
        }
      ],
      "size": 0,
      "maxSize": 0,
      "height": 0,
      "width": 0,
      "isRequired": true,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 2,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": true,
      "valueElementValueBindingReferenceId": {
        "id": "1b227d1b-d638-4a4d-95d6-cc2e306eed49",
        "typeElementPropertyId": null,
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": {
        "typeElementBindingId": "74388a56-1dc9-46c5-8763-461df61672b4",
        "typeElementId": "bf8ffc5a-73b3-4954-acf1-a9c6fcf96a11",
        "listFilter": null,
        "command": null,
        "typeElementDeveloperName": null
      },
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R3",
      "developerName": "Assigned To",
      "componentType": "SELECT",
      "content": null,
      "label": "Assigned To",
      "columns": [
        {
          "typeElementPropertyId": "4b244d1e-716e-46d3-a10e-0db81892d4b4",
          "isBound": false,
          "boundTypeElementPropertyId": null,
          "label": "",
          "isDisplayValue": true,
          "isEditable": false,
          "order": 0,
          "typeElementPropertyToDisplayId": null,
          "componentType": null
        }
      ],
      "size": 0,
      "maxSize": 0,
      "height": 0,
      "width": 0,
      "isRequired": true,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 0,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": true,
      "valueElementValueBindingReferenceId": {
        "id": "4a513306-df8e-4c56-9eae-e71732df7489",
        "typeElementPropertyId": "ba597d87-63bd-4afe-b9d4-c23395a34590",
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R3",
      "developerName": "Date of Event",
      "componentType": "INPUT",
      "content": null,
      "label": "Date of Event",
      "columns": null,
      "size": 35,
      "maxSize": 255,
      "height": 0,
      "width": 0,
      "isRequired": true,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 1,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": true,
      "valueElementValueBindingReferenceId": {
        "id": "4a513306-df8e-4c56-9eae-e71732df7489",
        "typeElementPropertyId": "eca4ca88-085d-4bb6-8f73-99ab20327b35",
        "command": ""
      },
      "valueElementDataBindingReferenceId": null,
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R4",
      "developerName": "Is Breach",
      "componentType": "CHECKBOX",
      "content": null,
      "label": "Does this event represent a breach?",
      "columns": null,
      "size": 0,
      "maxSize": 0,
      "height": 0,
      "width": 0,
      "isRequired": false,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 0,
      "attributes": null,
      "tags": null
    },
    {
      "isEditable": true,
      "valueElementValueBindingReferenceId": {
        "id": "9524218b-7b32-45cc-a04b-65489fbc1b69",
        "typeElementPropertyId": null,
        "command": ""
      },
      "valueElementDataBindingReferenceId": {
        "id": "ffa04819-944c-44c1-8f38-f95cec34869d",
        "typeElementPropertyId": null,
        "command": ""
      },
      "objectDataRequest": null,
      "fileDataRequest": null,
      "imageUri": null,
      "pageContainerDeveloperName": "R4",
      "developerName": "Breach Type",
      "componentType": "SELECT",
      "content": null,
      "label": "Breach Type",
      "columns": [
        {
          "typeElementPropertyId": "9db3173a-7773-4638-88f9-1c69a448f459",
          "isBound": false,
          "boundTypeElementPropertyId": null,
          "label": "",
          "isDisplayValue": true,
          "isEditable": false,
          "order": 0,
          "typeElementPropertyToDisplayId": null,
          "componentType": null
        }
      ],
      "size": 0,
      "maxSize": 0,
      "height": 0,
      "width": 0,
      "isRequired": true,
      "isMultiSelect": false,
      "isSearchable": false,
      "hintValue": "",
      "helpInfo": "",
      "order": 1,
      "attributes": null,
      "tags": null
    }
  ],
  "pageConditions": [
    {
      "pageRules": [
        {
          "left": {
            "pageObjectReferenceId": null,
            "typeElementPropertyId": null,
            "pageObjectReferenceDeveloperName": "",
            "valueElementToReferenceId": {
              "id": "db4b0557-e199-4909-b319-5db5058d7694",
              "typeElementPropertyId": null,
              "command": ""
            },
            "metadataType": "VALUE"
          },
          "criteriaType": "EQUAL",
          "right": {
            "pageObjectReferenceId": null,
            "typeElementPropertyId": null,
            "pageObjectReferenceDeveloperName": "",
            "valueElementToReferenceId": {
              "id": "be1bc78e-fd57-40ec-9a86-a815de2a9e28",
              "typeElementPropertyId": null,
              "command": ""
            },
            "metadataType": "VALUE"
          }
        }
      ],
      "comparisonType": "AND",
      "pageOperations": [
        {
          "assignment": {
            "assignee": {
              "pageObjectReferenceId": null,
              "typeElementPropertyId": null,
              "pageObjectReferenceDeveloperName": "Financial Amount",
              "valueElementToReferenceId": null,
              "metadataType": "METADATA.EDITABLE"
            },
            "assignor": {
              "pageObjectReferenceId": null,
              "typeElementPropertyId": null,
              "pageObjectReferenceDeveloperName": "",
              "valueElementToReferenceId": {
                "id": "be1bc78e-fd57-40ec-9a86-a815de2a9e28",
                "typeElementPropertyId": null,
                "command": ""
              },
              "metadataType": "VALUE"
            }
          },
          "filter": null
        },
        {
          "assignment": {
            "assignee": {
              "pageObjectReferenceId": null,
              "typeElementPropertyId": null,
              "pageObjectReferenceDeveloperName": "Details of Financial Impact",
              "valueElementToReferenceId": null,
              "metadataType": "METADATA.EDITABLE"
            },
            "assignor": {
              "pageObjectReferenceId": null,
              "typeElementPropertyId": null,
              "pageObjectReferenceDeveloperName": "",
              "valueElementToReferenceId": {
                "id": "be1bc78e-fd57-40ec-9a86-a815de2a9e28",
                "typeElementPropertyId": null,
                "command": ""
              },
              "metadataType": "VALUE"
            }
          },
          "filter": null
        }
      ]
    }
  ],
  "stopConditionsOnFirstTrue": false,
  "attributes": null,
  "tags": null,
  "updateByName": false,
  "elementType": "PAGE_LAYOUT",
  "id": "ed206576-c91c-426c-988b-76dd14752da7",
  "developerName": "Incident Form",
  "developerSummary": ""
}

Used to create new Page Element objects or update existing ones. The Page Element object provides the structure of your pages or screens.

HTTP Request

POST /api/draw/1/element/page

Body

The raw JSON for the Page Element.

Import Page Element

Used to import an existing Page Element object into a Flow. The Page Element object provides the structure of your pages or screens.

HTTP Request

POST /api/draw/1/element/flow/{flow_id}/page/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow
id
string
The unique identifier for the Page Element

Remove Page Element

Used to remove an existing Page Element object from a Flow. This is not the same as deleting the Page Element as it will still exist in the Tenant, but just not referenced in the Flow. The Page Element object stores data collected in the Flow State.

HTTP Request

DELETE /api/draw/1/element/flow/{flow_id}/page/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow
id
string
The unique identifier for the Page Element

Query Page Elements

Example 200 OK Response

[
  {
    "dateCreated": "0001-01-01T00:00:00Z",
    "dateModified": "0001-01-01T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "label": "Incident Form",
    "pageContainers": null,
    "pageComponents": null,
    "pageConditions": null,
    "stopConditionsOnFirstTrue": false,
    "attributes": null,
    "tags": null,
    "updateByName": false,
    "elementType": "PAGE_LAYOUT",
    "id": "ed206576-c91c-426c-988b-76dd14752da7",
    "developerName": "Incident Form",
    "developerSummary": ""
  }
]

Used to filter existing Page Element objects. The Page Element object provides the structure of your pages or screens.

HTTP Request

GET /api/draw/1/element/page?filter={filter}

Parameters

Key Description
filter
string
The filter for querying Page Elements

Get Page Element

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "label": "Incident Form",
  "pageContainers": [ { pageContainers } ],
  "pageComponents": [ { pageComponents } ],
  "pageConditions": [ { pageConditions } ],
  "stopConditionsOnFirstTrue": false,
  "attributes": null,
  "tags": null,
  "updateByName": false,
  "elementType": "PAGE_LAYOUT",
  "id": "ed206576-c91c-426c-988b-76dd14752da7",
  "developerName": "Incident Form",
  "developerSummary": ""
}

Used to get an existing Page Element object. The Page Element object provides the structure of your pages or screens.

HTTP Request

GET /api/draw/1/element/page/{id}

Parameters

Key Description
id
string
The unique identifier for the Page Element

Delete Page Element

Success 204 No Content Response

Used to delete an existing Page Element object. The Page Element object provides the structure of your pages or screens.

HTTP Request

DELETE /api/draw/1/element/page/{id}

Parameters

Key Description
id
string
The unique identifier for the Page Element

Tag Element

Example Request:

{
  "contentType": "ContentObject",
  "typeElementId": "{id}",
  "updateByName": false,
  "id": "{id}",
  "elementType": "TAG",
  "developerName": "Car Details",
  "developerSummary": "Information needed to render a 3D view of a car so we can get the color selection."
}

The Tag Element object provides additional runtime data to your Page Element Containers/Components and Navigation Elements/Items.

The purpose of the Tag Element is to add flexibility to your Flow application user experience. The components, containers and navigation items in your Flow can benefit from having access to the Flow State to get more contextual information. For example, if you have a numeric input field, it may be useful to know the possible range or numeric values that can be provided by the end user - where that range depends on logic in the Flow. The components, containers and navigation items also supports “attributes” and these are often sufficient for many use-cases. As a result, only use the Tag Element if you need information that is very specific to the Flow State for particular running user(s). The base properties of the Tag Element are outlined here.

Tag Element

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Tag Elements.
elementType
string
A unique element type for the Tag Element. Valid values are:
  • TAG: Tag Element
developerName
string
The name for the Tag Element. This is typically a helpful name to remind builders of the purpose of the Tag Element.
developerSummary
string
The summary for the Tag Element. This is typically additional information that will help explain the purpose of the Tag Element.
contentType
string
The content type represented by the Tag Element. Valid values are:
  • ContentString: A string value
  • ContentNumber: A numeric value
  • ContentPassword: A hidden value
  • ContentDateTime: A date and time value
  • ContentContent: A rich content value
  • ContentObject: An object value
  • ContentList: A list value
typeElementId
string
The Type of the Object or List value being provided. This is only needed if the contentType property is set to ContentObject or ContentList.
updateByName
boolean
When working with Tag Element objects through the modeling API, this setting should be set to true if you do not have a unique identifier for a Tag Element but wish to update any Tag Element in the system that has this same name. This key is typically only used when scripting updates to Flows as part of a migration tool.

Create/Update Tag Elements

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "contentType": "ContentObject",
  "typeElementId": "2b0886ce-e922-452d-937b-97e75778d557",
  "updateByName": false,
  "id": "8bf1fb42-5d5a-473b-b5bf-099305233672",
  "elementType": "TAG",
  "developerName": "Car Details",
  "developerSummary": "Information needed to render a 3D view of a car so we can get the color selection."
}

Used to create new Tag Element objects or update existing ones. The Tag Element object provides additional runtime data to your Page Element Containers/Components and Navigation Elements/Items.

HTTP Request

POST /api/draw/1/element/tag

Body

The raw JSON for the Tag Element.

Import Tag Element

Used to import an existing Tag Element object into a Flow. The Tag Element object provides additional runtime data to your Page Element Containers/Components and Navigation Elements/Items.

HTTP Request

POST /api/draw/1/element/flow/{flow_id}/tag/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow
id
string
The unique identifier for the Tag Element

Remove Tag Element

Used to remove an existing Tag Element object from a Flow. This is not the same as deleting the Tag Element as it will still exist in the Tenant, but just not referenced in the Flow. The Tag Element object stores data collected in the Flow State.

HTTP Request

DELETE /api/draw/1/element/flow/{flow_id}/tag/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow
id
string
The unique identifier for the Tag Element

Query Tag Elements

Example 200 OK Response

[
  {
    "dateCreated": "0001-01-01T00:00:00Z",
    "dateModified": "0001-01-01T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "contentType": "ContentObject",
    "typeElementId": "2b0886ce-e922-452d-937b-97e75778d557",
    "updateByName": false,
    "id": "8bf1fb42-5d5a-473b-b5bf-099305233672",
    "elementType": "TAG",
    "developerName": "Car Details",
    "developerSummary": "Information needed to render a 3D view of a car so we can get the color selection."
  }
]

Used to filter existing Tag Element objects. The Tag Element object provides additional runtime data to your Page Element Containers/Components and Navigation Elements/Items.

HTTP Request

GET /api/draw/1/element/tag?filter={filter}

Parameters

Key Description
filter
string
The filter for querying Tag Elements

Get Tag Element

Example 200 OK Response

{
  "dateCreated": "0001-01-01T00:00:00Z",
  "dateModified": "0001-01-01T00:00:00Z",
  "whoCreated": null,
  "whoModified": null,
  "whoOwner": null,
  "contentType": "ContentObject",
  "typeElementId": "2b0886ce-e922-452d-937b-97e75778d557",
  "updateByName": false,
  "id": "8bf1fb42-5d5a-473b-b5bf-099305233672",
  "elementType": "TAG",
  "developerName": "Car Details",
  "developerSummary": "Information needed to render a 3D view of a car so we can get the color selection."
}

Used to get an existing Tag Element object. The Tag Element object provides additional runtime data to your Page Element Containers/Components and Navigation Elements/Items.

HTTP Request

GET /api/draw/1/element/tag/{id}

Parameters

Key Description
id
string
The unique identifier for the Tag Element

Delete Tag Element

Success 204 No Content Response

Used to delete an existing Tag Element object. The Tag Element object provides additional runtime data to your Page Element Containers/Components and Navigation Elements/Items.

HTTP Request

DELETE /api/draw/1/element/tag/{id}

Parameters

Key Description
id
string
The unique identifier for the Tag Element

Value Element

Example Request:

{
  "isFixed": false,
  "isVersionless": false,
  "access": "PRIVATE",
  "contentType": "ContentList",
  "contentFormat": null,
  "defaultContentValue": null,
  "defaultObjectData": null,
  "typeElementId": "{id}",
  "updateByName": false,
  "id": "{id}",
  "elementType": "VARIABLE",
  "developerName": "Approval Options",
  "developerSummary": null
}

The Value Element object stores data collected in the Flow State.

The purpose of the Value Element is to allow Flow builders to determine how data collected from running user(s) or external Services will be stored and used. The Value Element represents the memory for the Flow application so data gathered can be later saved, updated, or viewed. The base properties of the Value Element are outlined here.

Value Element

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Value Elements.
elementType
string
A unique element type for the Value Element. Valid values are:
  • VARIABLE: Value Element
developerName
string
The name for the Value Element. This is typically a helpful name to remind builders of the purpose of the Value Element.
developerSummary
string
The summary for the Value Element. This is typically additional information that will help explain the purpose of the Value Element.
isFixed
boolean
Indicates if the value stored in the Value Element can be changed in the Flow State. If this is set to true, the Value Element acts like a ‘constant’.
access
string
The external access of this Value Element. A Flow is a bit like a code function or method. When called, data can be passed into the Flow State and when the Flow “finishes”, data can be passed out of the Flow State. Valid values are:
  • INPUT: The value for this Value Element can be assigned when the Flow is initialized (started).
  • INPUT_OUTPUT: The value for this Value Element can be assigned when the Flow is initialized (started) and the value will be returned with the Flow is finalized (finished).
  • OUTPUT: The value will be returned when the Flow is finalized (finished).
  • PRIVATE: The value for this Value Element can only be changed as per the configuration of the Flow builder (e.g. through Pages/Page Layouts, Operators, etc).
contentType
string
The content type represented by the Value Element. Valid values are:
  • ContentString: A string value
  • ContentNumber: A numeric value
  • ContentPassword: A hidden value
  • ContentDateTime: A date and time value
  • ContentContent: A rich content value
  • ContentObject: An object value
  • ContentList: A list value
contentFormat
string
The formatting that should be applied to the value in this Value Element. This property does not apply for Values Elements with a contentType of ContentObject or ContentList. For Typed objects, the contentFormat is set for each Property in the Type.
defaultContentValue
string
The default value for this Value Element. This is only needed if the contentType property is set to ContentObject or ContentList.
defaultObjectData
array
The default object data for this Value Element. This is only needed if the contentType property is set to ContentObject or ContentList.
initializationOperations
array
(Deprecated)
typeElementId
string
The Type of the Object or List value being provided. This is only needed if the contentType property is set to ContentObject or ContentList.
updateByName
boolean
When working with Value Element objects through the modeling API, this setting should be set to true if you do not have a unique identifier for a Value Element but wish to update any Value Element in the system that has this same name. This key is typically only used when scripting updates to Flows as part of a migration tool.

Create/Update Value Elements

Example 200 OK Response

{
  "isFixed": false,
  "isVersionless": false,
  "access": "PRIVATE",
  "contentType": "ContentList",
  "contentFormat": null,
  "defaultContentValue": null,
  "defaultObjectData": [
    {
      "developerName": "Standard List Type",
      "typeElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
      "order": 0,
      "properties": [
        {
          "typeElementPropertyId": "6bed9cba-499c-4d4f-a679-6ec0ea77e822",
          "developerName": "Value",
          "contentValue": "REVIEW",
          "contentType": "ContentString",
          "contentFormat": null,
          "objectData": null
        },
        {
          "typeElementPropertyId": "e64fbe8a-33b9-42e9-8e1c-da4c460870af",
          "developerName": "Label",
          "contentValue": "Requires Review",
          "contentType": "ContentString",
          "contentFormat": null,
          "objectData": null
        }
      ],
      "isSelected": false
    },
    {
      "developerName": "Standard List Type",
      "typeElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
      "order": 1,
      "properties": [
        {
          "typeElementPropertyId": "6bed9cba-499c-4d4f-a679-6ec0ea77e822",
          "developerName": "Value",
          "contentValue": "APPROVE",
          "contentType": "ContentString",
          "contentFormat": null,
          "objectData": null
        },
        {
          "typeElementPropertyId": "e64fbe8a-33b9-42e9-8e1c-da4c460870af",
          "developerName": "Label",
          "contentValue": "Approve Application as Submitted",
          "contentType": "ContentString",
          "contentFormat": null,
          "objectData": null
        }
      ],
      "isSelected": false
    }
  ],
  "typeElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
  "updateByName": false,
  "id": "ed206576-c91c-426c-988b-76dd14752da7",
  "elementType": "VARIABLE",
  "developerName": "Approval Options",
  "developerSummary": null
}

Used to create new Value Element objects or update existing ones. The Value Element object stores data collected in the Flow State.

HTTP Request

POST /api/draw/1/element/value

Body

The raw JSON for the Value Element.

Import Value Element

Used to import an existing Value Element object into a Flow. The Value Element object stores data collected in the Flow State.

HTTP Request

POST /api/draw/1/element/flow/{flow_id}/value/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow
id
string
The unique identifier for the Value Element

Remove Value Element

Used to remove an existing Value Element object from a Flow. This is not the same as deleting the Value Element as it will still exist in the Tenant, but just not referenced in the Flow. The Value Element object stores data collected in the Flow State.

HTTP Request

DELETE /api/draw/1/element/flow/{flow_id}/value/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow
id
string
The unique identifier for the Value Element

Query Value Elements

Example 200 OK Response

[
  {
    "isFixed": false,
    "isVersionless": false,
    "access": "PRIVATE",
    "contentType": "ContentList",
    "contentFormat": null,
    "defaultContentValue": null,
    "defaultObjectData": null,
    "typeElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
    "updateByName": false,
    "id": "ed206576-c91c-426c-988b-76dd14752da7",
    "elementType": "VARIABLE",
    "developerName": "Approval Options",
    "developerSummary": null
  }
]

Used to filter existing Value Element objects. The Value Element object stores data collected in the Flow State.

HTTP Request

GET /api/draw/1/element/value?filter={filter}

Parameters

Key Description
filter
string
The filter for querying Value Elements

Query Value Element References

Example 200 OK Response

[
  {
    "id": "{id}",
    "command": null,
    "developerName": "My Value",
    "elementType": "VARIABLE",
    "typeElementId": "{id}",
    "typeElementDeveloperName": null,
    "contentType": "ContentString",
    "isFixed": false,
    "access": "INPUT",
    "typeElementPropertyId": "{id}",
    "typeElementPropertyDeveloperName": null,
    "typeElementPropertyTypeElementId": "{id}"
  }
]

Used to get the list of Value Element References, which is a condensed format to help Flow Builders create ‘merge fields’ in content. The Value Element References list out all Value Elements and Type Properties that can provide a value to the Flow Builder. The Value Element object stores data collected in the Flow State.

Value Element Reference

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Value Elements.
elementType
string
A unique element type for the Value Element. Valid values are:
  • VARIABLE: Value Element
developerName
string
The name for the Value Element. This is typically a helpful name to remind builders of the purpose of the Value Element.
developerSummary
string
The summary for the Value Element. This is typically additional information that will help explain the purpose of the Value Element.
isFixed
boolean
Indicates if the value stored in the Value Element can be changed in the Flow State. If this is set to true, the Value Element acts like a ‘constant’.
access
string
The external access of this Value Element. A Flow is a bit like a code function or method. When called, data can be passed into the Flow State and when the Flow “finishes”, data can be passed out of the Flow State. Valid values are:
  • INPUT: The value for this Value Element can be assigned when the Flow is initialized (started).
  • INPUT_OUTPUT: The value for this Value Element can be assigned when the Flow is initialized (started) and the value will be returned with the Flow is finalized (finished).
  • OUTPUT: The value will be returned when the Flow is finalized (finished).
  • PRIVATE: The value for this Value Element can only be changed as per the configuration of the Flow builder (e.g. through Pages/Page Layouts, Operators, etc).
contentType
string
The content type represented by the Value Element. Valid values are:
  • ContentString: A string value
  • ContentNumber: A numeric value
  • ContentPassword: A hidden value
  • ContentDateTime: A date and time value
  • ContentContent: A rich content value
  • ContentObject: An object value
  • ContentList: A list value
typeElementId
string
The Type of the Object or List value being provided. This is only needed if the contentType property is set to ContentObject or ContentList.
typeElementDeveloperName
string
The developer name of the Type of the Object or List value being provided. This is only needed if the contentType property is set to ContentObject or ContentList.
command
string
As part of referencing or applying an operation to a Value, it is sometimes necessary to perform a command on that Value. Supported commands are:
  • ADD: Adds an Object to a List Value. If the Object exists in the List, the Object is updated. If it is not already in the List, it’s added.
  • REMOVE: Removes an Object from a List Value.
  • GET_FIRST: Gets the first Object from a List Value.
  • GET_NEXT: Gets the next Object from a List Value. List Values maintain a “pointer” so that each time the GET_NEXT command is executed in the Flow, the List Value remembers which is the next Value.
  • FILTER: Executes a filter on a List Value. For the FILTER command to execute correctly, additional properties must be provided.
  • GET_LENGTH: Gets the length of a List Value.
  • NEW: Creates a new instance of the Value.
  • EMPTY: Sets the Value equal to nothing.
  • DETACH: Removes the external identifier from the root Object so that it will not be “remembered” when updating Lists or saving back to a remote Service.
typeElementPropertyId
string
The unique identifier for the Property in the Type Element. This is the Type Element for the Value Element being referenced.
typeElementPropertyTypeElementId
string
For Values of Type Object or List, you can refer to specific properties. E.g. for an Object Value of Type “Account”, a property might be “Name”. If this key is null, the platform will assume you are referring to the whole Value. If this key contains a valid identifier for a property in the Type, the platform will refer to that particular property in the Object or List Value.
typeElementPropertyDeveloperName
string
The developer name of the Type referenced in the Property outlined above.

HTTP Request

GET /api/draw/1/element/value/reference?filter={filter}

Parameters

Key Description
filter
string
The filter for querying Value Elements

Get Value Element

Example 200 OK Response

{
  "isFixed": false,
  "isVersionless": false,
  "access": "PRIVATE",
  "contentType": "ContentList",
  "contentFormat": null,
  "defaultContentValue": null,
  "defaultObjectData": [
    {
      "developerName": "Standard List Type",
      "typeElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
      "order": 0,
      "properties": [
        {
          "typeElementPropertyId": "6bed9cba-499c-4d4f-a679-6ec0ea77e822",
          "developerName": "Value",
          "contentValue": "REVIEW",
          "contentType": "ContentString",
          "contentFormat": null,
          "objectData": null
        },
        {
          "typeElementPropertyId": "e64fbe8a-33b9-42e9-8e1c-da4c460870af",
          "developerName": "Label",
          "contentValue": "Requires Review",
          "contentType": "ContentString",
          "contentFormat": null,
          "objectData": null
        }
      ],
      "isSelected": false
    },
    {
      "developerName": "Standard List Type",
      "typeElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
      "order": 1,
      "properties": [
        {
          "typeElementPropertyId": "6bed9cba-499c-4d4f-a679-6ec0ea77e822",
          "developerName": "Value",
          "contentValue": "APPROVE",
          "contentType": "ContentString",
          "contentFormat": null,
          "objectData": null
        },
        {
          "typeElementPropertyId": "e64fbe8a-33b9-42e9-8e1c-da4c460870af",
          "developerName": "Label",
          "contentValue": "Approve Application as Submitted",
          "contentType": "ContentString",
          "contentFormat": null,
          "objectData": null
        }
      ],
      "isSelected": false
    }
  ],
  "typeElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
  "updateByName": false,
  "id": "ed206576-c91c-426c-988b-76dd14752da7",
  "elementType": "VARIABLE",
  "developerName": "Approval Options",
  "developerSummary": null
}

Used to get an existing Value Element object. The Value Element object stores data collected in the Flow State.

HTTP Request

GET /api/draw/1/element/value/{id}

Parameters

Key Description
id
string
The unique identifier for the Value Element

Delete Value Element

Success 204 No Content Response

Used to delete an existing Value Element object. The Value Element object stores data collected in the Flow State.

HTTP Request

DELETE /api/draw/1/element/value/{id}

Parameters

Key Description
id
string
The unique identifier for the Value Element

Type Element

Example Request:

{
  "properties": [
    {
      "id": "{id}",
      "developerName": "Full Name",
      "contentType": "ContentString",
      "contentFormat": null,
      "typeElementId": "{id}",
      "typeElementDeveloperName": null
    },
    {
      "id": "{id}",
      "developerName": "Twitter Handle",
      "contentType": "ContentString",
      "contentFormat": null,
      "typeElementId": "{id}",
      "typeElementDeveloperName": null
    }
  ],
  "bindings": null,
  "updateByName": false,
  "serviceElementId": "{id}",
  "id": "{id}",
  "elementType": "TYPE",
  "developerName": "Customer",
  "developerSummary": "A custom Type for Customers."
}

The Type Element object defines the structure of Objects and Lists in the Flow.

The purpose of the Type Element is to allow Flow builders to determine the business objects that will be used in the Flow. Often the Type Elements are provided when the Flow builder installs a new Service Element, however, Flow builders can define their own Type Elements as needed to support the objectives of the Flow. The Type Element also provides the bindings back to the Service Elements that can save, read or delete data of the same structure. As a result, the Type Element maps from friendly business objects to underlying storage implementations as provided by the Service Element. The base properties of the Type Element are outlined here.

Type Element

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Value Elements.
elementType
string
A unique element type for the Type Element. Valid values are:
  • TYPE: Type Element
developerName
string
The name for the Type Element. This is typically a helpful name to remind builders of the purpose of the Type Element.
developerSummary
string
The summary for the Type Element. This is typically additional information that will help explain the purpose of the Type Element.
serviceElementId
string
The Service Element associated with this Type Element. This property is assigned if the Type Element was provided as part of installing the Service Element. It also means the Service Element has control to update the Type Element as needed. If Flow builders want to manage the Type Element structure and bindings independently of a Service Element, this property should be set to null.
properties
array
The array of Properties associated with this Type. These might be called “columns” or “fields” and represent the data that should be associated with this business object or Type Element. For example, for a Type of “address”, the Properties might be “street”, “city”, “region”, etc. Each Property entry has the following keys:

id (string): A unique identifier field assigned by the platform. This value should not be included for new Properties.

developerName (string): The name for the Property. This is typically a helpful name to remind builders of the purpose of the Property.

contentType (string):The content type represented by the Value Element. Valid values are:
  • ContentString: A string value
  • ContentNumber: A numeric value
  • ContentPassword: A hidden value
  • ContentDateTime: A date and time value
  • ContentContent: A rich content value
  • ContentObject: An object value
  • ContentList: A list value

contentFormat (string): The formatting that should be applied to values in this Property.

typeElementId (string): The Type of the Object or List value associated with this Property. This is only needed if the contentType property is set to ContentObject or ContentList.

typeElementDeveloperName (string): The developerName of the Type (used when the id has not yet been assigned to the referenced Type).
bindings
array
The configuration of the Bindings that provide the mapping of data stored in this Type with the an underlying Service Element implementation. See Bindings below for details.
updateByName
boolean
When working with Type Element objects through the modeling API, this setting should be set to true if you do not have a unique identifier for a Type Element but wish to update any Type Element in the system that has this same name. This key is typically only used when scripting updates to Flows as part of a migration tool.
Bindings

Example bindings JSON:

  [
    {
      "id": "{id}",
      "developerName": "Salesforce.com Binding",
      "developerSummary": "Saves the Customer back to Salesforce",
      "databaseTableName": "Account",
      "serviceElementId": "{id}",
      "propertyBindings": [
        {
          "databaseFieldName": "FullName",
          "typeElementPropertyId": "{id}",
          "typeElementPropertyDeveloperName": "Full Name",
          "databaseContentType": "string"
        },
        {
          "databaseFieldName": "Twitter_Handle__c",
          "typeElementPropertyId": "{id}",
          "typeElementPropertyDeveloperName": "Twitter Handle",
          "databaseContentType": "string"
        }
      ]
    }
  ]

A Binding is used to map Properties in the Type to database fields in the Service. The mapping does not need to be directly to database tables in the Service, however, the binding should provide unique identifier information necessary for the Service Element to put the provided values back to the correct storage locations. The Binding is typically pre-configured as part of the Type installation process. However, it is possible for Flow builders to define Bindings manually.

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Bindings.
developerName
string
The name for the Binding. This is typically a helpful name to remind builders of the purpose of the Binding.
developerSummary
string
The summary for the Binding. This is typically additional information that will help explain the purpose of the Binding.
databaseTableName
string
The name of the underlying mapped table that tells the Service Element where the data should be stored. At runtime, all data provided to the Service Element will use this name.
serviceElementId
string
The Service Element associated with this Binding. This is the Service Element that will be called at runtime if this binding is specified by the Flow builder.
propertyBindings
array
The array of Property Bindings associated with this Type. Each Property Binding maps from a Property to the underlying mapped field that tells the Service Element which field the data should be stored. At runtime, the Property Binding will be provided to the Service Element, not the Property developerName for the Type. Each Property Binding entry has the following keys:

databaseFieldName: The name of the field in the Service Element where the data should be stored.

typeElementPropertyId: The associated Property unique identifier where the data in the Flow State is being sourced.

typeElementPropertyDeveloperName: In situations where the typeElementPropertyId has not yet been assigned (as above), this is the developerName of the Property being sourced.

databaseContentType: The contentType of this field as provided by the Service Element.

Create/Update Type Elements

Example 200 OK Response

{
  "properties": [
    {
      "id": "6bed9cba-499c-4d4f-a679-6ec0ea77e822",
      "developerName": "Full Name",
      "contentType": "ContentString",
      "contentFormat": null,
      "typeElementId": null,
      "typeElementDeveloperName": null
    },
    {
      "id": "e64fbe8a-33b9-42e9-8e1c-da4c460870af",
      "developerName": "Twitter Handle",
      "contentType": "ContentString",
      "contentFormat": null,
      "typeElementId": null,
      "typeElementDeveloperName": null
    }
  ],
  "bindings": [
    {
      "id": "22e2c289-f400-451d-b907-1f6b3458fb83",
      "developerName": "Salesforce.com Binding",
      "developerSummary": "Saves the Customer back to Salesforce",
      "databaseTableName": "Account",
      "serviceElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
      "propertyBindings": [
        {
          "databaseFieldName": "FullName",
          "typeElementPropertyId": "6bed9cba-499c-4d4f-a679-6ec0ea77e822",
          "typeElementPropertyDeveloperName": "Full Name",
          "databaseContentType": "string"
        },
        {
          "databaseFieldName": "Twitter_Handle__c",
          "typeElementPropertyId": "e64fbe8a-33b9-42e9-8e1c-da4c460870af",
          "typeElementPropertyDeveloperName": "Twitter Handle",
          "databaseContentType": "string"
        }
      ]
    }
  ],
  "updateByName": false,
  "serviceElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
  "id": "ed206576-c91c-426c-988b-76dd14752da7",
  "elementType": "TYPE",
  "developerName": "Customer",
  "developerSummary": "A custom Type for Customers."
}

Used to create new Type Element objects or update existing ones. The Type Element object defines the structure of Objects and Lists in the Flow.

HTTP Request

POST /api/draw/1/element/type?overrideService={true/false}

Parameters

Key Description
overrideService
boolean
If the Type Element is associated with a Service Element, it cannot be updated without setting this parameter to true.

Body

The raw JSON for the Type Element.

Import Type Element

Used to import an existing Type Element object into a Flow. The Type Element object defines the structure of Objects and Lists in the Flow.

HTTP Request

POST /api/draw/1/element/flow/{flow_id}/type/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow
id
string
The unique identifier for the Type Element

Remove Type Element

Used to remove an existing Type Element object from a Flow. This is not the same as deleting the Type Element as it will still exist in the Tenant, but just not referenced in the Flow. The Type Element object stores data collected in the Flow State.

HTTP Request

DELETE /api/draw/1/element/flow/{flow_id}/type/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow
id
string
The unique identifier for the Type Element

Query Type Elements

Example 200 OK Response

[
  {
    "properties": null,
    "bindings": null,
    "updateByName": false,
    "serviceElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
    "id": "ed206576-c91c-426c-988b-76dd14752da7",
    "elementType": "TYPE",
    "developerName": "Customer",
    "developerSummary": "A custom Type for Customers."
  }
]

Used to filter existing Type Element objects. The Type Element object defines the structure of Objects and Lists in the Flow.

HTTP Request

GET /api/draw/1/element/type?filter={filter}

Parameters

Key Description
filter
string
The filter for querying Type Elements

Get Type Element

Example 200 OK Response

{
  "properties": [
    {
      "id": "6bed9cba-499c-4d4f-a679-6ec0ea77e822",
      "developerName": "Full Name",
      "contentType": "ContentString",
      "contentFormat": null,
      "typeElementId": null,
      "typeElementDeveloperName": null
    },
    {
      "id": "e64fbe8a-33b9-42e9-8e1c-da4c460870af",
      "developerName": "Twitter Handle",
      "contentType": "ContentString",
      "contentFormat": null,
      "typeElementId": null,
      "typeElementDeveloperName": null
    }
  ],
  "bindings": [
    {
      "id": "22e2c289-f400-451d-b907-1f6b3458fb83",
      "developerName": "Salesforce.com Binding",
      "developerSummary": "Saves the Customer back to Salesforce",
      "databaseTableName": "Account",
      "serviceElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
      "propertyBindings": [
        {
          "databaseFieldName": "FullName",
          "typeElementPropertyId": "6bed9cba-499c-4d4f-a679-6ec0ea77e822",
          "typeElementPropertyDeveloperName": "Full Name",
          "databaseContentType": "string"
        },
        {
          "databaseFieldName": "Twitter_Handle__c",
          "typeElementPropertyId": "e64fbe8a-33b9-42e9-8e1c-da4c460870af",
          "typeElementPropertyDeveloperName": "Twitter Handle",
          "databaseContentType": "string"
        }
      ]
    }
  ],
  "updateByName": false,
  "serviceElementId": "11e2c289-f400-451d-b907-1f6b3458fb76",
  "id": "ed206576-c91c-426c-988b-76dd14752da7",
  "elementType": "TYPE",
  "developerName": "Customer",
  "developerSummary": "A custom Type for Customers."
}

Used to get an existing Type Element object. The Type Element object defines the structure of Objects and Lists in the Flow.

HTTP Request

GET /api/draw/1/element/type/{id}

Parameters

Key Description
id
string
The unique identifier for the Type Element

Delete Type Element

Success 204 No Content Response

Used to delete an existing Type Element object. The Type Element object defines the structure of Objects and Lists in the Flow.

HTTP Request

DELETE /api/draw/1/element/type/{id}

Parameters

Key Description
id
string
The unique identifier for the Type Element

Delete Duplicate Type Elements

Success 204 No Content Response

Used to delete an existing Type Element object. The Type Element object defines the structure of Objects and Lists in the Flow.

HTTP Request

DELETE /api/draw/1/element/service/{service_element_id}/duplicateTypes

Parameters

Key Description
service_element_id
string
The unique identifier for the Service Element that has the duplicate Types.

Common Objects

GroupAuthorization

Example JSON:

{
  "serviceElementId": "{id}",
  "globalAuthenticationType": "SPECIFIED",
  "streamBehaviourType": "CREATE_NEW",
  "groups": [
    {
      "authenticationId": "id from directory",
      "attribute": "MEMBER"
    }
  ],
  "users": [
    {
      "authenticationId": "id from directory",
      "attribute": "DELEGATES"
    }
  ],
  "locations": null
}

Set the authorization context for your Flow.

The Group Authorization object is used to configure the authorization context of the Flow or a Group Element (Swimlane) in your Flow. The authorization context information that can be used is determined by the Service. Builders should refer to the documentation of the Service being used.

Key Description
serviceElementId
string
The unique identifier for the Service that will be used to authenticate the running user(s).
globalAuthenticationType
string
The type of authentication the Service should perform when validating the running user(s). Valid values are:
  • PUBLIC: All users can gain access to the Flow. If a Group Element is set to PUBLIC, the Flow must also be PUBLIC as the permissions cascade.
  • ALL_USERS: All users within the Service directory can gain access to the Flow or Group Element.
  • SPECIFIED: All users within the Service directory can gain access to the Flow or Group dependent on the specified configuration of users, groups, and/or locations.
streamBehaviourType
string
On entry into this Group Authorization the following operations can be performed on a stream (e.g. social feed like Chatter):
  • USE_EXISTING: Use an existing collaboration stream when the user enters, or create a new one if one does not yet exist.
  • CREATE_NEW: Create a new collaboration stream every time the user enters.
  • NONE: Do not provide a collaboration stream for this Group Authorization.
groups
array
The array of Groups that the running user(s) must be a member to gain access. Each Group entry has the following keys:

authenticationId (string):
The unique identifier for the Group, as specified by the Service directory.

attribute (string):
The unique name for the Group attribute. E.g. MEMBER.
users
array
The array of Users that the running user(s) must be a member to gain access. Each Group entry has the following keys:

authenticationId (string):
The unique identifier for the User, as specified by the Service directory.

attribute (string):
The unique name for the User attribute. E.g. DELEGATES.

runningUser (boolean):
Indicates that the first person who has accessed this Group Authorization should act as the reference point with respect to the above attribute.
locations
array
(reserved for future development)

ObjectDataRequest

Example JSON:

{
  "objectDataRequest": {
    "typeElementId": "{id}",
    "typeElementBindingId": "{id}",
    "listFilter": {
      "filterId": {
        "id": "{id}",
        "typeElementPropertyId": {id},
        "command": null
      },
      "comparisonType": "AND",
      "where": [
        {
          "columnTypeElementPropertyId": "{id}",
          "criteriaType": "EQUAL",
          "valueElementToReferenceId": {
            "id": "{id}",
            "typeElementPropertyId": "{id}",
            "command": null
          }
        }
      ],
      "orderByTypeElementPropertyId": "{id}",
      "orderByDirectionType": "DESC",
      "limit": 250,
      "filterByProvidedObjects": false
    },
    "command": {
      "commandType": null,
      "properties": {
        "key1": "value1",
        "key2": "value2"
      }
    }
  }
}

Performing data operations on a Service.

The Object Data Request object is used in a couple of places in the platform to configure save, load, and/or delete operations on a Service. In particular, this object is used:

The goal of the Object Data Request object is to provide a standard notation for managing data, without creating strong dependencies with the underlying Service and the various approaches for handling data (e.g. SQL vs SOQL vs ZOQL, etc).

The base configuration of the Object Data Request object is outlined below:

Key Description
typeElementId
string
The unique identifier for the Type of data being referenced in the underlying Service. E.g. the unique identifier for the “Account” Type is using the Salesforce Service.
typeElementBindingId
string
The unique identifier for the specific binding that should be used for the chosen Type. Each Type can have a set of bindings which map the data in your Flow Values back to the underlying fields in the Service. E.g. an “Account” Type could have a binding for the Salesforce Service and also a binding for the Exact Target Service. The structure of the Type may be the same, but the data would be stored in different fields depending on the selected Service.

In addition to the above keys, the Object Data Request object also supports a “listFilter” key. This is used for LOAD operations when a sub-set of data is needed:

ListFilter
Key Description
filterId
object
The ValueElementId pointing to the Value that holds the unique identifier for a particular record. This option should only be used if you know the identifier of the record you wish to load from. This is basically a convenience option for scenarios where you do not wish to configure all of the “where” clauses and you know only one record will be returned. The platform will perform additional validation - e.g. if more than one record is returned the platform will throw an error.
comparisonType
string
The type of comparison that should be used when evaluating the set of “where” entries. Valid values are:
  • AND: Each “where” entry must be true for the object to be returned from the Service.
  • OR: Any “where” entry must be true for the object to be returned from the Service.
where
array
The array of “where” entries needed to perform the filter. Each Where entry has the following keys:

columnTypeElementPropertyId (string):
The unique identifier for the property in the Type that should be filtered by. E.g. for an “Account” Type, a property might be “Name”.

valueElementToReferenceId (object):
The ValueElementId pointing to the Value holding the actual data for the “where” entry. For example, if you have a Value that holds “Acme Inc.” if filtering “Account” objects.

criteriaType (string):
The type of criteria that should be used when evaluating the “where” entry. Valid values are:
  • EQUAL: {column} is equal to {value}
  • NOT_EQUAL: {column} is not equal to {value}
  • GREATER_THAN: {column} is greater than {value}
  • GREATER_THAN_OR_EQUAL: {column} is greater than or equal to {value}
  • LESS_THAN: {column} is less than {value}
  • LESS_THAN_OR_EQUAL: {column} is less than or equal to {value}
  • CONTAINS: {column} contains the characters in {value}
  • STARTS_WITH: {column} starts with the characters in {value}
  • ENDS_WITH: {column} ends with the characters in {value}
orderByTypeElementPropertyId
string
The unique identifier for the property in the Type that should be used for ordering. E.g. for an “Account” Type, a property might be “Name”.
orderByDirectionType
string
The direction in which to oder the results. Valid values are:
  • ASC: Order the returned objects in ascending order based on the orderByTypeElementPropertyId.
  • DESC: Order the returned objects in descending order based on the orderByTypeElementPropertyId.
limit
integer
The maximum number of objects that should be returned from the Service in this request. If the limit is set to zero, the Service will return all objects.
filterByProvidedObjects
boolean
In various use-cases, it can be useful to “hydrate” a set of existing objects that have been gathered from the Service, but do not adhere to a simple query. Use this option when wishing to provide the set of objects that the Service should “hydrate” with the latest information for all properties.
command
object
The command object can be used to perform implementation specific operations on a Service. As a result, the command object configuration varies depending on the Service. Builders should refer to the documentation of the Service being used. The Command object has the following keys:

commandType (string):
The type of command being performed. E.g. for the Salesforce Service, this could be “SOQL”.

properties (object):
Key/value pairs that provide additional information for the command to be executed. E.g. for the Salesforce Service, this could be: “soql”: “SELECT Max(Revenue) FROM Opportunity WHERE (CloseDate = NEXT_N_DAYS:365 OR Availability_Date__c <= TODAY)”

PageTag

Example JSON:

{

}

Blah blah.

Blah blah.

ValueElementId

Example JSON:

{
  "id": "{id}",
  "typeElementPropertyId": "{id}",
  "command": "GET_FIRST"
}

References to Values in your Flow.

The Value Element Id object is used in many places in the configuration of your Flow. All of the data used in your Flow is stored in Values. As a result, if you need to perform any operation using data:

you use the Value Element Id to tell the Flow which Value you’re referring to. Value Element Id objects are indicated by JSON keys that start with “valueElement…”

Key Description
id
string
The unique identifier of the Value being referenced. Every Value in your Flow has a unique identifier that never changes.
typeElementPropertyId
string
For Values of Type Object or List, you can refer to specific properties. E.g. for an Object Value of Type “Account”, a property might be “Name”. If this key is null, the platform will assume you are referring to the whole Value. If this key contains a valid identifier for a property in the Type, the platform will refer to that particular property in the Object or List Value.
command
string
As part of referencing or applying an operation to a Value, it is sometimes necessary to perform a command on that Value. Supported commands are:
  • ADD: Adds an Object to a List Value. If the Object exists in the List, the Object is updated. If it is not already in the List, it’s added.
  • REMOVE: Removes an Object from a List Value.
  • GET_FIRST: Gets the first Object from a List Value.
  • GET_NEXT: Gets the next Object from a List Value. List Values maintain a “pointer” so that each time the GET_NEXT command is executed in the Flow, the List Value remembers which is the next Value.
  • FILTER: Executes a filter on a List Value. For the FILTER command to execute correctly, additional properties must be provided.
  • GET_LENGTH: Gets the length of a List Value.
  • NEW: Creates a new instance of the Value.
  • EMPTY: Sets the Value equal to nothing.
  • DETACH: Removes the external identifier from the root Object so that it will not be “remembered” when updating Lists or saving back to a remote Service.

Notifications

The notifications API allows you to view any notifications sent to your or inside your tenant.

List tenant notifications

This endpoint will list all the notifications that have been sent from inside a tenant.

HTTP Request

GET /api/notifications/1

List currently logged-in user’s notifications

This endpoint will list all the notifications that have been sent to the user, across all tenants

HTTP Request

GET /api/notifications/1/{id}

Get single notification

This endpoint will get a single notification

Key Description
id
string
The ID of the notification

Translate

When building Flows on the Platform, all “content” is automatically separated from “logic”. This means that all Flows are automatically ready for internationalization into other languages. The result being that you can write one Flow, but adjust the content accordingly for each Content Value Culture needed.

The Translate APIs allow builders to manage content translations for all Flows and Elements.

Content Value Cultures

Example Request:

{
    "id": "{id}",
    "developerName": "My Culture",
    "developerSummary": "Support for my Culture",
    "brand": null,
    "language": "EN",
    "country": "UK",
    "variant": null
}

The Content Value Culture object represents a language or brand supported by the Tenant.

Content Value Cultures are used to specify the language/brand options that are available for the Tenant. By default all Tenants have a Content Value Culture for USA (English). However, for multi-national/language use-cases, others can be specified: E.g. Country: JP, Language: JP, Variant: (none). This follows the ISO conventions for language. However, the platform also supports a fourth variation on the standard ISO properties; this is Brand. As a result, Content Value Culture objects can also be used to specify white-labelling or single language variations on Flow content.

Content Value Culture

Key Description
id
string
A unique identifier field assigned by the platform. This value should not be included for new Content Value Cultures.
developerName
string
The name for the Content Value Culture. This is typically a helpful name to remind builders of the purpose of the Content Value Culture.
developerSummary
string
The summary for the Content Value Culture. This is typically additional information that will help explain the purpose of the Content Value Culture.
brand
string
A value representing the Brand for this Content Value Culture.
country
string
A value representing the Country for this Content Value Culture. This typically follows the ISO Internationalization conventions.
language
string
A value representing the Language for this Content Value Culture. This typically follows the ISO Internationalization conventions.
variant
string
A value representing the Variant for this Content Value Culture. This typically follows the ISO Internationalization contentions.

Create/Update Content Value Culture

Example 200 OK Response

{
    "id": "709c586f-5112-41ab-8b68-9f796df7f708",
    "developerName": "Japanese",
    "developerSummary": "Support for Japanese",
    "brand": null,
    "language": "JP",
    "country": "JP",
    "variant": null
}

Used to create new Map Element objects or update existing ones. The Content Value Culture object represents a language or brand supported by the Tenant.

HTTP Request

POST /api/translate/1/culture

Body

The raw JSON for the Content Value Culture.

Get Content Value Cultures

Example 200 OK Response

[
    {
        "id": "709c586f-5112-41ab-8b68-9f796df7f708",
        "developerName": "United States of America",
        "developerSummary": "Created by system",
        "brand": null,
        "language": "EN",
        "country": "USA",
        "variant": null
    }
]

Used to get existing Content Value Cultures. The Content Value Culture object represents a language or brand supported by the Tenant.

HTTP Request

GET /api/translate/1/culture

Get Content Value Culture

Example 200 OK Response

{
    "id": "709c586f-5112-41ab-8b68-9f796df7f708",
    "developerName": "Japanese",
    "developerSummary": "Support for Japanese",
    "brand": null,
    "language": "JP",
    "country": "JP",
    "variant": null
}

Used to get an existing Content Value Culture. The Content Value Culture object represents a language or brand supported by the Tenant.

HTTP Request

GET /api/translate/1/culture/{id}

Parameters

Key Description
id
string
Unique identifier for the Content Value Culture

Delete Content Value Culture

Success 204 No Content Response

Used to delete an existing Content Value Culture. The Content Value Culture object represents a language or brand supported by the Tenant.

HTTP Request

DELETE /api/translate/1/culture/{id}

Parameters

Key Description
id
string
Unique identifier for the Content Value Culture

Flow Translation

Example Response:

{
    "editingToken": "{id}",
    "id": "{id}",
    "developerName": "My Flow",
    "developerSummary": "A Flow that does a bunch of things.",
    "startMapElementId": "{id}",
    "navigationElements": [
        {
            "labelContentValueId": "{idA}",
            "navigationItems": [
                {
                    "locationMapElementId": "{id}",
                    "developerName": "Home",
                    "developerSummary": "",
                    "labelContentValueId": "{idB}",
                    "navigationItems": null
                },
                {
                    "locationMapElementId": "{id}",
                    "developerName": "Accounts",
                    "developerSummary": "",
                    "labelContentValueId": "{idC}",
                    "navigationItems": null
                }
            ],
            "id": "{id}",
            "elementType": "NAVIGATION",
            "developerName": "My Flow",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "<!-- Culture: United States of America -->": {
                        "contentValues": {
                            "{idA}": "My App",
                            "{idB}": "Home",
                            "{idC}": "Accounts"
                        }
                    }
                }
            }
        }
    ],
    "mapElements": [
        {
            "userContentContentValueId": "{idA}",
            "statusMessageContentValueId": "{idB}",
            "postUpdateMessageContentValueId": "{idC}",
            "notAuthorizedMessageContentValueId": "{idD}",
            "outcomes": [
                {
                    "developerName": "New",
                    "developerSummary": null,
                    "labelContentValueId": "{idE}",
                    "nextMapElementId": "{id}"
                }
            ],
            "id": "{id}",
            "elementType": "step",
            "developerName": "Home",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "<!-- Culture: United States of America -->": {
                        "contentValues": {
                            "{idA}": "<p>Welcome to my Accounts Flow.</p>",
                            "{idB}": null,
                            "{idC}": null,
                            "{idD}": null,
                            "{idC}": "New Account"
                        }
                    }
                }
            }
        }
    ],
    "pageElements": [
        {
            "labelContentValueId": "{idA}",
            "pageContainers": [
                {
                    "containerType": "VERTICAL_FLOW",
                    "developerName": "Root",
                    "labelContentValueId": "{idB}",
                    "pageContainers": null
                }
            ],
            "pageComponents": [
                {
                    "pageContainerDeveloperName": "Root",
                    "developerName": "Account Name",
                    "componentType": "INPUT",
                    "contentContentValueId": "{idC}",
                    "labelContentValueId": "{idD}",
                    "hintValueContentValueId": "{idE}",
                    "helpInfoContentValueId": "{idF}",
                    "columns": null
                }
            ],
            "id": "{id}",
            "elementType": "PAGE_LAYOUT",
            "developerName": "Account Detail",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "<!-- Culture: United States of America -->": {
                        "contentValues": {
                            "{idA}": "Account Detail",
                            "{idB}": "Details of Account",
                            "{idC}": null,
                            "{idD}": "Account Name",
                            "{idE}": "Enter account name",
                            "{idF}": "Some helpful info"
                        }
                    }
                }
            }
        }
    ],
    "valueElements": [
        {
            "contentType": "ContentString",
            "contentFormatContentValueId": null,
            "defaultContentValueContentValueId": "{idA}",
            "id": "{id}",
            "elementType": "VARIABLE",
            "developerName": "My Default Account Name",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "<!-- Culture: United States of America -->": {
                        "contentValues": {
                            "{idA}": "Account"
                        }
                    }
                }
            }
        }
    ]
}

The Flow Translation object provides all of the content Elements and properties in a Flow that can be translated.

The Flow Translation object provides every Element in the Flow that is available for translation. It therefore provides all of the content in the Flow, regardless of whether or not the Elements are shared (such as Value and Page Elements) or specific to the Flow (such as Map or Navigation Elements). The Flow Translation object also includes additional properties to help translators identify the purpose/location of the content being translated.

Flow Translation

Key Description
id
string
A unique identifier field assigned by the platform for the Flow associated with this Flow Translation.
editingToken
string
A unique identifier needed to perform any editing operations on a Flow or its contained Map, Group, or Navigation Elements.
developerName
string
The name for the Flow associated with this Flow Translation. This is typically a helpful name to remind builders of the purpose of the Flow.
developerSummary
string
The summary for the Flow associated with this Flow Translation. This is typically additional information that will help explain the purpose of the Flow.
startMapElementId
string
The Map Element that should be used to start the Flow associated with this Flow Translation.
navigationElements
string
The array of Navigation Element Translation objects associated with all of the Navigation Elements in the Flow.
mapElements
string
The array of Map Element Translation objects associated with all of the Map Elements in the Flow.
pageElements
string
The array of Page Element Translation objects associated with all of the Page Elements associated with the Flow.
typeElements
string
The array of Type Element Translation objects associated with all of the Type Elements associated with the Flow.
valueElements
string
The array of Value Element Translation objects associated with all of the Value Elements associated with the Flow.

Content Value Document

The Content Value Document provides all of the content for the Element. This is the content that needs to be translated for each of the provided entries. To add new translations, you must first add a new Content Value Culture to your Tenant. Once added, you can then provided content translations for that Culture.

Key Description
translations
object
Contains the translations for each Content Value Culture supported by the Tenant. Each key in the object relates to the Content Value Culture identifier. For each of the Content Value Culture identifier keys is then a property for contentValues. The structure of this is as follows:

{id} (string):
The unique identifier within the Element to be translated. This is associated with a label or piece of content in the structure of the Element. Looking within the Translation object, this will be paired with a property in the structure of the Element.

{content} (string):
The content that will be shown to the user for the property and Content Value Culture. This is the content that should be translated.

Query Flows for Translation

Example 200 OK Response

[
  {
    "dateCreated": "0001-01-00T00:00:00Z",
    "dateModified": "0001-01-00T00:00:00Z",
    "whoCreated": null,
    "whoModified": null,
    "whoOwner": null,
    "alertEmail": null,
    "isActive": false,
    "isDefault": false,
    "comment": null,
    "editingToken": "19299bca-8a07-4b35-97f4-4cca598856d9",
    "id": {
      "id": "b7e2a056-35dd-4973-b279-c85aeafb299c",
      "versionId": "b6292dc0-ce7a-47de-bed8-7dd15e219e98"
    },
    "developerName": "Course Registration Flow",
    "developerSummary": "This is a simple course registration flow.",
    "startMapElementId": "3a0498ad-bf4f-4bba-bd4c-6975cd5e1c2a",
    "allowJumping": false,
    "stateExpirationLength": 0,
    "authorization": {
      "serviceElementId": "6388c4d1-cdae-4cc5-bb3b-a7083b71c8df",
      "globalAuthenticationType": "ALL_USERS",
      "streamBehaviourType": "USE_EXISTING",
      "groups": null,
      "users": null,
      "locations": null
    }
  }
]

Used to filter existing Flow objects that are available for translation. The Flow Translation object provides all of the content Elements and properties in a Flow that can be translated.

HTTP Request

GET /api/translate/1/flow?filter={filter}

Get Flow Translation

{
    "editingToken": "d547172e-226a-4589-8208-500531fc76ce",
    "id": "67f95ea6-c7b0-40d2-b773-2abe275e6f8e",
    "developerName": "Course Registration App",
    "developerSummary": "This is the base app for my course registrations.",
    "startMapElementId": "62550650-7e26-4256-875f-e6c5f1cc3e01",
    "navigationElements": null,
    "mapElements": [
        {
            "userContentContentValueId": "0e84b98b-c9c9-4524-8540-c2e35970728f",
            "statusMessageContentValueId": "1c4e9f0a-854b-4d17-ae2d-9ee2f10e63bf",
            "postUpdateMessageContentValueId": "02e73da3-60f5-4455-a595-358c79f8ae8a",
            "notAuthorizedMessageContentValueId": "d43ef4f6-4eaa-4482-a717-aaa17c79f416",
            "outcomes": [
                {
                    "developerName": "Go",
                    "developerSummary": null,
                    "labelContentValueId": "fc7f5f31-bbda-4aa9-9616-cc3a1da98322",
                    "nextMapElementId": "85fcd2c6-41f3-4e40-ab38-de74d4097a9e"
                }
            ],
            "id": "62550650-7e26-4256-875f-e6c5f1cc3e01",
            "elementType": "START",
            "developerName": "Start",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "3ab44596-24eb-48a4-9cf6-480c332422ec": {
                        "contentValues": {
                            "1c4e9f0a-854b-4d17-ae2d-9ee2f10e63bf": null,
                            "d43ef4f6-4eaa-4482-a717-aaa17c79f416": null,
                            "02e73da3-60f5-4455-a595-358c79f8ae8a": null,
                            "0e84b98b-c9c9-4524-8540-c2e35970728f": null,
                            "fc7f5f31-bbda-4aa9-9616-cc3a1da98322": "Go"
                        }
                    }
                }
            }
        },
        {
            "userContentContentValueId": "6f017d91-cac2-426a-8b5b-333f9165cef7",
            "statusMessageContentValueId": "4250929c-6256-45a2-b9d5-4ee882a3c940",
            "postUpdateMessageContentValueId": "6caccd8a-f3cc-4d20-8133-7fb902ecbbe2",
            "notAuthorizedMessageContentValueId": "6eeefed3-8f32-405c-9a96-42fa4c403872",
            "outcomes": [
                {
                    "developerName": "New",
                    "developerSummary": null,
                    "labelContentValueId": "bfd17555-de0b-4919-b8b1-3468f9e827ff",
                    "nextMapElementId": "00000000-0000-0000-0000-000000000000"
                },
                {
                    "developerName": "Edit",
                    "developerSummary": null,
                    "labelContentValueId": "e2439aea-33bf-4364-b5c0-b32c9e4fa82e",
                    "nextMapElementId": "00000000-0000-0000-0000-000000000000"
                }
            ],
            "id": "85fcd2c6-41f3-4e40-ab38-de74d4097a9e",
            "elementType": "input",
            "developerName": "Course Registrations",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "3ab44596-24eb-48a4-9cf6-480c332422ec": {
                        "contentValues": {
                            "4250929c-6256-45a2-b9d5-4ee882a3c940": null,
                            "6eeefed3-8f32-405c-9a96-42fa4c403872": null,
                            "6caccd8a-f3cc-4d20-8133-7fb902ecbbe2": null,
                            "6f017d91-cac2-426a-8b5b-333f9165cef7": null,
                            "bfd17555-de0b-4919-b8b1-3468f9e827ff": "New Course Registration",
                            "e2439aea-33bf-4364-b5c0-b32c9e4fa82e": "Join"
                        }
                    }
                }
            }
        }
    ],
    "pageElements": [
        {
            "labelContentValueId": "7757d90f-2b85-4c86-b1be-85a75d2fb89e",
            "pageContainers": [
                {
                    "containerType": "VERTICAL_FLOW",
                    "developerName": "Root",
                    "labelContentValueId": "7939da52-beb7-4210-8217-1971a2b63588",
                    "pageContainers": null
                }
            ],
            "pageComponents": [
                {
                    "pageContainerDeveloperName": "Root",
                    "developerName": "My States",
                    "componentType": "TABLE",
                    "contentContentValueId": "b9f2b150-faab-429f-a5ff-86e7361143e9",
                    "labelContentValueId": "f9906716-d28b-42e4-a3d1-95b610b08691",
                    "hintValueContentValueId": "861be88f-54b7-466f-8b29-5c615d2f4684",
                    "helpInfoContentValueId": "d1ebeec3-c3c2-42d7-b213-9ef6deb47913",
                    "columns": [
                        {
                            "labelContentValueId": "dc73e253-15c4-41ad-aae3-63f52898a28c"
                        },
                        {
                            "labelContentValueId": "fd31b229-1214-4092-9808-bcf0326ba7ae"
                        },
                        {
                            "labelContentValueId": "8414e42e-2581-4e2b-bbca-964b6df69824"
                        },
                        {
                            "labelContentValueId": "d8f46d74-1a82-444a-a392-fb1a68d5264a"
                        }
                    ]
                },
                {
                    "pageContainerDeveloperName": "Root",
                    "developerName": "Intro",
                    "componentType": "PRESENTATION",
                    "contentContentValueId": "41226e95-6d18-43e9-a9f3-8d988fea7201",
                    "labelContentValueId": "9a25adc4-cd46-4d31-a03c-7059d82ed301",
                    "hintValueContentValueId": "8947bdf4-2ec6-45d6-99bf-48963d47b752",
                    "helpInfoContentValueId": "3ef081b1-9b81-467f-89b8-5ada78c357a6",
                    "columns": null
                }
            ],
            "id": "f308d950-a972-4d7a-9d8b-70f5bdfc3c2e",
            "elementType": "PAGE_LAYOUT",
            "developerName": "My Course Registrations",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "3ab44596-24eb-48a4-9cf6-480c332422ec": {
                        "contentValues": {
                            "7757d90f-2b85-4c86-b1be-85a75d2fb89e": "My Course Registrations",
                            "2123e514-b48a-4aa4-8bab-bcb7c11e1dee": "",
                            "48ab7fe7-2026-4958-9555-722b780bb919": "",
                            "036e20cc-0e6c-485b-a6c3-b923a072d562": "",
                            "d1f12d77-159f-4a19-86c4-001853e264ce": "",
                            "6030a4a7-4043-45b4-b6e7-9475e3c96acb": "<h1>Course Registrations</h1>\n<p>Below is the list of course registrations in flight:</p>",
                            "4f33f124-f246-417b-bd03-a392b7208bac": null,
                            "c0c4ccf8-f0d0-4b24-94a6-744280b44073": "",
                            "0c7d75ba-27c5-4d38-93de-8eebcf137ccb": "",
                            "19e90284-1232-49ea-be89-a3f1e1e5f45a": "",
                            "c85fbb1e-067d-4cc8-be94-d6f357eb2308": "",
                            "569396da-432b-4598-adf9-b8435ef74c3d": "<h1>Course Registrations</h1>\n<p>Below is the list of course registrations in flight:</p>",
                            "293afb8c-6ee9-4340-a5bb-ecf0bd4b924a": null,
                            "77b9bb54-0533-4deb-97ab-0567f7cd334e": "",
                            "7fc9ab7d-1e7f-47ac-b143-2f0000e64306": "",
                            "b9df8be6-1854-4b6f-9f78-9a4842107ad7": "",
                            "a6467ba2-298f-4c13-8425-f6d26bbcde47": "Owner First Name",
                            "22948405-265c-474b-9398-0f80a7efd26e": "Owner Last Name",
                            "01dbc0a3-d522-4321-af8b-9ee506046d6c": "Flow",
                            "8343eab8-3c63-4e60-9e7f-72535ab6e8c5": null,
                            "bc1672a8-7059-48ec-ba5e-0f740a8752e7": null,
                            "bd793247-f318-4a58-8fa0-74639f5bf5d9": "",
                            "8026eb1c-4e6c-4327-9305-211b21b8995a": "",
                            "c53c5ac0-203a-40a8-99b9-1f390f5ecc1f": "",
                            "a8e03c35-8e21-4ffb-bbc6-65b52b491fc1": "",
                            "734f8012-3742-4196-8388-c50e6d21fd2b": "<h1>Course Registrations</h1>\n<p>Below is the list of course registrations in flight:</p>",
                            "c07373f9-af7e-4024-a2e4-74b855942ee9": null,
                            "fadf2aed-7f42-4b74-a019-34443f194939": "",
                            "7daf53db-c888-4792-bf5e-0c18170cf6d9": "",
                            "8e06c115-ab06-41b9-b0c8-4635901033eb": "",
                            "9b2a3add-eeb8-454d-99b1-383045667349": "Owner First Name",
                            "52f2376e-e177-4e0e-b2bc-1d8e0b8ba106": "Owner Last Name",
                            "8c7aed9d-a9ae-4abe-8041-80ca6002ff84": "Flow",
                            "9d8348bb-a326-46c3-ba78-0ab824986299": null,
                            "1f2b0a90-cc2a-4bb6-a49b-f8818829332f": null,
                            "5e673572-9ebd-477c-9099-441f0ec4d0e6": "",
                            "13ffac75-4258-44c3-8981-037058273251": "",
                            "26bb76df-2202-429c-a370-a062486f8c93": "",
                            "c07d0288-ed7e-48f6-a22a-05f73f4664c4": "",
                            "810568c2-63b7-412e-8ef2-b76edfbaaf37": "Owner Last Name",
                            "c226232e-c525-4874-b633-ceedc7e43c21": "Owner First Name",
                            "2c1a9c67-d9b3-4480-a2cd-75a7ef39b198": "Flow",
                            "0d80e6a1-3715-4258-878f-ba20142e497b": null,
                            "b1d0b1bb-fc0d-45f9-80ea-21379d701692": null,
                            "8cb0ebbe-c383-4685-bcbb-ddf5aec9cebf": "",
                            "83aac573-46f1-4172-b53f-4a6201c039d1": "",
                            "d3ee863f-7cce-439d-a55e-ea20cca020e5": "",
                            "a0b89080-2927-4290-baa0-2add15712247": "<h1>Course Registrations</h1>\n<p>Below is the list of course registrations in flight:</p>",
                            "0dd1e674-e9a6-4566-8730-46bc286a7b44": null,
                            "cb6c8513-13ca-48fe-a448-47314c1c3f24": "",
                            "63d91f37-970e-4793-9095-40ff0f4d1891": "",
                            "dec4a473-59a1-4610-b0ee-6dbf8ff3dcbe": "",
                            "76b601ad-715c-4782-a106-531c0dea16e1": "",
                            "1ff82d3e-7897-4db3-8674-065708179cad": "<h1>Course Registrations</h1>\n<p>Below is the list of course registrations in flight:</p>",
                            "830a2527-3a22-4ddd-95ee-a1336c0dd576": null,
                            "dfaee25a-a3b0-44f9-a60a-b8dbd351b1a2": "",
                            "23a8f222-3658-4664-84dd-41d032b7ac55": "",
                            "fb915f8f-63d5-4228-9676-f2cd49823969": "",
                            "8f6375b6-5d48-445d-b676-d5df76df0339": "Owner",
                            "c58ae236-6383-4d37-87cc-d28be8a2250f": "Step",
                            "b1a95d4a-4de8-4c19-9338-693925a927a9": "Flow",
                            "348b8efe-e11e-478c-aabe-dbaba3fe22ec": null,
                            "4f89b8e5-1748-4c12-bc65-89058c95c892": null,
                            "82eabd90-3b19-4d3e-bfec-cdd3998a3ecf": "",
                            "32ad980e-a75b-49ce-861e-580b8e0d1186": "",
                            "7ec57ac0-8f0f-427f-bd61-4e770fdcd80f": "",
                            "53521a13-2ce1-440d-ac75-8f9b4137a723": "",
                            "82ecaf0f-10d6-4fe2-a7ea-52d6defcdb9d": "<h1>Course Registrations</h1>\n<p>Below is the list of course registrations in flight:</p>",
                            "3a90b14c-3b15-4fc0-b691-aba7dec8efc0": null,
                            "ae8e91a1-e2ea-44f7-92ba-67ada4dcd603": "",
                            "9f55591c-414e-42b4-b6e4-564834848dda": "",
                            "9666af0b-4161-4b26-ba81-39f7e50de7c5": "",
                            "95e5fbb6-aaf8-4cee-8b0e-986cd658d76d": "Owner",
                            "422fa040-c8a6-4372-9bbe-98bea0a26d3b": "Step",
                            "45511b20-8494-49fb-9023-051e0d0859f1": "Flow",
                            "9e5233e8-42bc-4bc6-bdfc-a7643cd04748": "Is Done",
                            "0b26933c-a498-4381-b5eb-2feeea5bbe2e": null,
                            "eb0798b5-e72b-4105-886c-48216fc7fce2": null,
                            "7939da52-beb7-4210-8217-1971a2b63588": "",
                            "3ef081b1-9b81-467f-89b8-5ada78c357a6": "",
                            "8947bdf4-2ec6-45d6-99bf-48963d47b752": "",
                            "9a25adc4-cd46-4d31-a03c-7059d82ed301": "",
                            "41226e95-6d18-43e9-a9f3-8d988fea7201": "<h1>Course Registrations Inbox</h1>\n<p>Below is the list of course registrations in flight:</p>",
                            "170fec92-22d1-4fd9-bd1a-8dec6ebade37": null,
                            "d1ebeec3-c3c2-42d7-b213-9ef6deb47913": "",
                            "861be88f-54b7-466f-8b29-5c615d2f4684": "",
                            "f9906716-d28b-42e4-a3d1-95b610b08691": "",
                            "fd31b229-1214-4092-9808-bcf0326ba7ae": "Owner",
                            "dc73e253-15c4-41ad-aae3-63f52898a28c": "Step",
                            "8414e42e-2581-4e2b-bbca-964b6df69824": "Flow",
                            "d8f46d74-1a82-444a-a392-fb1a68d5264a": "Is Done",
                            "b9f2b150-faab-429f-a5ff-86e7361143e9": null,
                            "336de50b-1dd7-46c6-a170-263e4ded0dc9": null
                        }
                    }
                }
            }
        }
    ],
    "valueElements": [
        {
            "contentType": "ContentPassword",
            "contentFormatContentValueId": null,
            "defaultContentValueContentValueId": "9adb70d4-be43-47e5-b39a-3994b7410544",
            "id": "24a4aae1-0dbc-4088-adf7-64f6f4ff680f",
            "elementType": "VARIABLE",
            "developerName": "Database Password",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "3ab44596-24eb-48a4-9cf6-480c332422ec": {
                        "contentValues": {
                            "9adb70d4-be43-47e5-b39a-3994b7410544": null
                        }
                    }
                }
            }
        }
        {
            "contentType": "ContentString",
            "contentFormatContentValueId": null,
            "defaultContentValueContentValueId": "9dcca5a5-4b7c-4215-b776-3958dc27781e",
            "id": "45bc7a26-3fce-4fcf-b9b5-b58252528617",
            "elementType": "VARIABLE",
            "developerName": "Database Authentication Url",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "3ab44596-24eb-48a4-9cf6-480c332422ec": {
                        "contentValues": {
                            "9dcca5a5-4b7c-4215-b776-3958dc27781e": "https://login.salesforce.com"
                        }
                    }
                }
            }
        },
        {
            "contentType": "ContentString",
            "contentFormatContentValueId": null,
            "defaultContentValueContentValueId": "40bc708b-139a-44a4-bdd0-46d6f4eb76a1",
            "id": "5779601d-1dea-45fd-9091-83a6885ee26c",
            "elementType": "VARIABLE",
            "developerName": "Database Username",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "3ab44596-24eb-48a4-9cf6-480c332422ec": {
                        "contentValues": {
                            "40bc708b-139a-44a4-bdd0-46d6f4eb76a1": "user@database.demo"
                        }
                    }
                }
            }
        },
        {
            "contentType": "ContentObject",
            "contentFormatContentValueId": null,
            "defaultContentValueContentValueId": "b847a788-7764-42db-b577-2605666cd30b",
            "id": "85919867-5f4d-4644-89b4-575389576d45",
            "elementType": "VARIABLE",
            "developerName": "My State",
            "developerSummary": "",
            "contentValueDocument": {
                "translations": {
                    "3ab44596-24eb-48a4-9cf6-480c332422ec": {
                        "contentValues": {
                            "b847a788-7764-42db-b577-2605666cd30b": null
                        }
                    }
                }
            }
        }
    ]
}

Used to get an existing Flow Translation. The Flow Translation object provides all of the content Elements and properties in a Flow that can be translated.

HTTP Request

GET /api/translate/1/flow/{id}

Key Description
id
string
The unique identifier for the Flow associated with this Flow Translation.

Page Element Translation

Example Response:

{
    "labelContentValueId": "{idA}",
    "pageContainers": [
        {
            "containerType": "VERTICAL_FLOW",
            "developerName": "Root",
            "labelContentValueId": "{idB}",
            "pageContainers": null
        }
    ],
    "pageComponents": [
        {
            "pageContainerDeveloperName": "Root",
            "developerName": "Account Name",
            "componentType": "INPUT",
            "contentContentValueId": "{idC}",
            "labelContentValueId": "{idD}",
            "hintValueContentValueId": "{idE}",
            "helpInfoContentValueId": "{idF}",
            "columns": null
        }
    ],
    "id": "{id}",
    "elementType": "PAGE_LAYOUT",
    "developerName": "Account Detail",
    "developerSummary": "",
    "contentValueDocument": {
        "translations": {
            "<!-- Culture: United States of America -->": {
                "contentValues": {
                    "{idA}": "Account Detail",
                    "{idB}": "Details of Account",
                    "{idC}": null,
                    "{idD}": "Account Name",
                    "{idE}": "Enter account name",
                    "{idF}": "Some helpful info"
                }
            }
        }
    }
}

The Page Element Translation object provides all of the content properties in a Page Element that can be translated.

The Page Element Translation object also includes additional properties to help translators identify the purpose/location of the content being translated.

Page Element Translation

Key Description
labelContentValueId
string
A unique identifier for the Page Element label. This identifier matches with an identifier in the translations section.
pageContainers
array
The array of Page Containers in the page. Each Page Container entry has the following keys:

containerType (string):
The type of Page Container (see Page Element in the Draw API).

developerName (string):
The developer name for the Page Container (see Page Element in the Draw API).

labelContentValueId (string):
A unique identifier for the Page Container label property. This identifier matches with an identifier in the translations section.

pageContainers (string):
The array of child Page Containers for this Page Container.
pageComponents
array
The array of Page Components in the page. Each Page Component entry has the following keys:

pageContainerDeveloperName (string):
The developer name for the Page Container in which the Page Component is placed (see Page Element in the Draw API).

developerName (string):
The developer name for the Page Component (see Page Element in the Draw API).

componentType (string):
The type of Page Component (see Page Element in the Draw API).

contentContentValueId (string):
A unique identifier for the Page Component content property. This identifier matches with an identifier in the translations section.

labelContentValueId (string):
A unique identifier for the Page Component label property. This identifier matches with an identifier in the translations section.

hintValueContentValueId (string):
A unique identifier for the Page Component hint property. This identifier matches with an identifier in the translations section.

helpInfoContentValueId (string):
A unique identifier for the Page Component helpInfo property. This identifier matches with an identifier in the translations section.
id
string
The unique identifier for the Page Element associated with this Page Element Translation.
elementType
string
The Element type for the Page Element associated with this Page Element Translation.
developerName
string
The name for the Page Element associated with this Page Element Translation. This is typically a helpful name to remind builders of the purpose of the Flow.
developerSummary
string
The summary for the Page Element associated with this Page Element Translation. This is typically additional information that will help explain the purpose of the Flow.
contentValueDocument
object
See the Flow Translation Document section for details on this object.

Get Page Element Translation

Used to get an existing Page Element Translation. The Page Element Translation object provides all of the content properties in a Page Element that can be translated.

HTTP Request

GET /api/translate/1/element/page/{id}

Key Description
id
string
The unique identifier for the Page Element associated with this Page Element Translation.

Update Page Element Translation

Example 200 OK Response

{
    "labelContentValueId": "e867f7b3-d4fb-44d1-a0d5-dee6b32b2e72",
    "pageContainers": [
        {
            "containerType": "VERTICAL_FLOW",
            "developerName": "Root",
            "labelContentValueId": "629746a7-6a80-4e8b-beda-86d5efd5449c",
            "pageContainers": null
        }
    ],
    "pageComponents": [
        {
            "pageContainerDeveloperName": "Root",
            "developerName": "Intro",
            "componentType": "PRESENTATION",
            "contentContentValueId": "7ee2e85a-782d-4239-8832-73f0b3a2b097",
            "labelContentValueId": "35b20e81-aec2-4579-963c-67ed2177fa71",
            "hintValueContentValueId": "e44fbccf-7dd1-4087-937b-7b2e03fc95e4",
            "helpInfoContentValueId": "44e4f2a3-ea7c-42c6-af81-10f393ed9b08",
            "columns": null
        },
        {
            "pageContainerDeveloperName": "Root",
            "developerName": "Tasks",
            "componentType": "TABLE",
            "contentContentValueId": "00d44f1f-5554-4199-b998-e7c3eedc1d91",
            "labelContentValueId": "ae648655-41ff-4cd5-b9c3-859b852c9807",
            "hintValueContentValueId": "53dfb219-92ad-4b49-8421-10557b518295",
            "helpInfoContentValueId": "cc56a4d5-469c-4a6f-ae55-edb3ac416ab6",
            "columns": [
                {
                    "labelContentValueId": "97e4d512-301a-41d4-a42e-2885b4108e3f"
                },
                {
                    "labelContentValueId": "0c40ca0d-9312-4d86-8bab-3489e0b5bd94"
                }
            ]
        }
    ],
    "id": "84a4a6d3-89a3-4a14-931b-b448d4a3c98a",
    "elementType": "PAGE_LAYOUT",
    "developerName": "Tasks",
    "developerSummary": "",
    "contentValueDocument": {
        "translations": {
            "8c7c8402-7dd3-44ef-8199-72d57e5a395b": {
                "contentValues": {
                    "e867f7b3-d4fb-44d1-a0d5-dee6b32b2e72": "Tasks",
                    "629746a7-6a80-4e8b-beda-86d5efd5449c": "",
                    "44e4f2a3-ea7c-42c6-af81-10f393ed9b08": "",
                    "e44fbccf-7dd1-4087-937b-7b2e03fc95e4": "",
                    "35b20e81-aec2-4579-963c-67ed2177fa71": "",
                    "7ee2e85a-782d-4239-8832-73f0b3a2b097": "<h1>My Tasks</h1>",
                    "ee7c1deb-41fd-4210-8986-a34f7fbcda8b": null,
                    "cc56a4d5-469c-4a6f-ae55-edb3ac416ab6": "",
                    "53dfb219-92ad-4b49-8421-10557b518295": "",
                    "ae648655-41ff-4cd5-b9c3-859b852c9807": "",
                    "97e4d512-301a-41d4-a42e-2885b4108e3f": "Subject",
                    "0c40ca0d-9312-4d86-8bab-3489e0b5bd94": "Due Date",
                    "00d44f1f-5554-4199-b998-e7c3eedc1d91": null,
                    "1f983609-3e67-49b1-83eb-728eb90b1252": null
                }
            }
        }
    }
}

Used to update a Page Element Translation. The Page Element Translation object provides all of the content properties in a Page Element that can be translated.

HTTP Request

POST /api/translate/1/element/page

Body

The raw JSON for the Page Element Translation.

Value Element Translation

Example Response:

{
    "contentType": "ContentString",
    "contentFormatContentValueId": "{idA}",
    "defaultContentValueContentValueId": "{idB}",
    "id": "{id}",
    "elementType": "VARIABLE",
    "developerName": "Value",
    "developerSummary": "",
    "contentValueDocument": {
        "translations": {
            "<!-- Culture: United States of America -->": {
                "contentValues": {
                    "{idA}": null,
                    "{idB}": null
                }
            }
        }
    }
}

The Value Element Translation object provides all of the content properties in a Value Element that can be translated.

The Value Element Translation object also includes additional properties to help translators identify the purpose/location of the content being translated.

Key Description
contentType
string
The content type represented by the Tag Element. Valid values are:
  • ContentString: A string value
  • ContentNumber: A numeric value
  • ContentPassword: A hidden value
  • ContentDateTime: A date and time value
  • ContentContent: A rich content value
  • ContentObject: An object value
  • ContentList: A list value
contentFormatContentValueId
string
The unique identitifer of the Content Value Document that contains the value of the Value element’s content format
defaultContentValueContentValueId
string
The unique identitifer of the Content Value Document that contains the value of the Value element’s default value
id
string
The unique identifier for the Value Element associated with this Value Element Translation.
elementType
string
The Element type for the Value Element associated with this Value Element Translation.
developerName
string
The name for the Value Element associated with this Value Element Translation. This is typically a helpful name to remind builders of the purpose of the Flow.
developerSummary
string
The summary for the Value Element associated with this Value Element Translation. This is typically additional information that will help explain the purpose of the Flow.
contentValueDocument
object
See the Flow Translation Document section for details on this object.

Get Value Element Translation

Used to filter existing Value objects that are available for translation. The Value Translation object provides all of the properties in a Value that can be translated.

HTTP Request

Example Response:

{
    "contentType": "ContentString",
    "contentFormatContentValueId": "161f5ee2-4b91-43ad-a91e-d38c823f5fbd",
    "defaultContentValueContentValueId": "56e8259a-e723-48c3-bdb5-d8c1bc4a56cd",
    "id": "884f170a-f033-4c69-9c48-9ecf663a29d9",
    "elementType": "VARIABLE",
    "developerName": "Value Name",
    "developerSummary": "",
    "contentValueDocument": {
        "translations": {
            "ef6dc583-26b0-46ea-9623-1756695503a7": {
                "contentValues": {
                    "161f5ee2-4b91-43ad-a91e-d38c823f5fbd": "Content Format",
                    "56e8259a-e723-48c3-bdb5-d8c1bc4a56cd": "Default Value"
                }
            }
        }
    }
}

GET /api/translate/1/element/value/{id}

Key Description
id
string
The unique identifier for the Value associated with this Value Translation.

Update Value Element Translation

HTTP Request

Example 200 OK Response

{
    "contentType": "ContentString",
    "contentFormatContentValueId": "161f5ee2-4b91-43ad-a91e-d38c823f5fbd",
    "defaultContentValueContentValueId": "56e8259a-e723-48c3-bdb5-d8c1bc4a56cd",
    "id": "884f170a-f033-4c69-9c48-9ecf663a29d9",
    "elementType": "VARIABLE",
    "developerName": "Value Name",
    "developerSummary": "",
    "contentValueDocument": {
        "translations": {
            "ef6dc583-26b0-46ea-9623-1756695503a7": {
                "contentValues": {
                    "161f5ee2-4b91-43ad-a91e-d38c823f5fbd": "Content Format",
                    "56e8259a-e723-48c3-bdb5-d8c1bc4a56cd": "Default Value"
                }
            }
        }
    }
}

Used to update an existing Value Element translation.

POST /api/translate/1/element/value

Body

The raw JSON for the Value Element translation.

Type Element Translation

Example response:

{
    "properties": [
        {
            "id": "{idA}",
            "developerName": "Property One",
            "contentFormatContentValueId": "{idB}"
        },
        {
            "id": "{idC}",
            "developerName": "Property Two",
            "contentFormatContentValueId": "{idD}"
        }
    ],
    "id": "{idE}",
    "elementType": "TYPE",
    "developerName": "Type Name",
    "developerSummary": "",
    "contentValueDocument": {
        "translations": {
            "{idF}": {
                "contentValues": {
                    "{idB}": "Translation for Property One",
                    "{idD}": "Translation for Property Two"
                }
            }
        }
    }
}

The Type Element Translation object provides all of the content properties in a Type Element that can be translated.

The Type Element Translation object also includes additional properties to help translators identity the purpose/location of the content being translated.

Key Description
id
string
A unique identifier for the Type Element (see Type Element in the Draw API).
elementType
string
The type of Type Element. Valid values are:
  • TYPE
developerName
string
The developer name of the Type Element (see Type Element in the Draw API).
developerSummary
string
The developer summary of the Type Element (see Type Element in the Draw API).
contentValueDocument
object
See the Flow Translation Document section for details on this object.

Get Type Element Translation

Used to get an existing Type Element Translation. The Type Element Translation object provides all of the content properties in a Type Element that can be translated.

HTTP Request

Example Response:

{
    "properties": [
        {
            "id": "5af55b98-d697-4cd3-a450-be77b4982872",
            "developerName": "Name",
            "contentFormatContentValueId": "079359a8-cc9b-4747-95f5-d1cb46fb0bc4"
        },
        {
            "id": "60001a40-5ad5-4faf-aa46-89443aca0607",
            "developerName": "Age",
            "contentFormatContentValueId": "978258dd-8e7d-4a4c-bbe6-1b02c5d75e3d"
        }
    ],
    "id": "cd594a53-0f32-4b21-bd82-21f35b00e5cf",
    "elementType": "TYPE",
    "developerName": "Person",
    "developerSummary": "",
    "contentValueDocument": {
        "translations": {
            "88b9010a-4a01-40e5-a18e-742d95de6273": {
                "contentValues": {
                    "079359a8-cc9b-4747-95f5-d1cb46fb0bc4": "",
                    "978258dd-8e7d-4a4c-bbe6-1b02c5d75e3d": ""
                }
            }
        }
    }
}

GET /api/translate/1/element/type/{id}

Key Description
id
string
The unique identifier for the Type associated with this Type Translation.

Update Type Element Translation

HTTP Request

POST /api/translate/1/element/type

{
    "properties": [
        {
            "id": "5af55b98-d697-4cd3-a450-be77b4982872",
            "developerName": "Name",
            "contentFormatContentValueId": "079359a8-cc9b-4747-95f5-d1cb46fb0bc4"
        },
        {
            "id": "60001a40-5ad5-4faf-aa46-89443aca0607",
            "developerName": "Age",
            "contentFormatContentValueId": "978258dd-8e7d-4a4c-bbe6-1b02c5d75e3d"
        }
    ],
    "id": "cd594a53-0f32-4b21-bd82-21f35b00e5cf",
    "elementType": "TYPE",
    "developerName": "Person",
    "developerSummary": "",
    "contentValueDocument": {
        "translations": {
            "88b9010a-4a01-40e5-a18e-742d95de6273": {
                "contentValues": {
                    "079359a8-cc9b-4747-95f5-d1cb46fb0bc4": "",
                    "978258dd-8e7d-4a4c-bbe6-1b02c5d75e3d": ""
                }
            }
        }
    }
}

Body

The raw JSON for the Type Element translation.

Map Element Translation

Example response:

{
    "userContentContentValueId": "{idA}",
    "statusMessageContentValueId": "{idB}",
    "postUpdateMessageContentValueId": "{idC}",
    "notAuthorizedMessageContentValueId": "{idD}",
    "outcomes": [
        {
            "developerName": "Outcome Name",
            "developerSummary": "Outcome Summary",
            "labelContentValueId": "{idE}",
            "nextMapElementId": "Id of the next Map Element"
        }
    ],
    "id": "Id of the Map Element",
    "elementType": "Map Element Type",
    "developerName": "Map Element Name",
    "developerSummary": "Map Element Summary",
    "contentValueDocument": {
        "translations": {
            "<!-- Culture: United States of America -->": {
                "contentValues": {
                    "{idE}": "Outcome Label",
                    "{idB}": null,
                    "{idC}": null,
                    "{idD}": null,
                    "{idA}": "<p>Content</p>"
                }
            }
        }
    }
}

The Map Element Translation object provides all of the content properties in a Map Element that can be translated.

The Map Element Translation object also includes additional properties to help translators identity the purpose/location of the content being translated.

Key Description
userContentContentValueId
string
A unique identifier for the content inside Map Elements of type Step. This identifier matches with an identifier in the translations section.
statusMessageContentValueId
string
A unique identifier for the content that should be shown to the user while waiting for a system step to complete. This identifier matches with an identifier in the translations section.
postUpdateMessageContentValueId
string
A unique identifier for the content of the message that should be posted to the collaboration stream. This identifier matches with an identifier in the translations section.
notAuthorizedMessageContentValueId
string
A unique identifier for the content that should be shown to the user if they are not authorized to take action on this Map Element. This identifier matches with an identifier in the translations section.
outcomes
array
The array of Outcomes coming from the Map Element. Each Outcome entry has the following keys:

developerName(string):
The developer name for the outcome object(see Outcome in the Draw API).

developerSummary(string):
The developerSummary of the outcome object(see Outcome in the Draw API).

labelContentValueId(string):
A unique identifier for the Outcome label property. This identifier matches with an identifier in the translations section.

nextMapElementId(string):
A unique identifier for the target Map Element of the Outcome(see Outcome in the Draw API).
id
string
A unique identifier for the Map Element(see Map Element in the Draw API).
elementType
string
The type of Map Element. Valid values are:

  • step
  • input
  • decision
  • operator
  • message
  • database_delete
  • database_load
  • database_save
developerName
string
The developer name of the Map Element(see Map Element in the Draw API).
developerSummary
string
The developer summary of the Map Element(see Map Element in the Draw API).
contentValueDocument
object
See the Flow Translation Document section for details on this object.

Get Map Element Translation

Used to filter existing Map Element objects that are available for translation. The Map Element Translation object provides all of the properties in a Map Element that can be translated.

HTTP Request

{
    "userContentContentValueId": "fe6fceca-6498-46a2-8cf1-91a0792a9b8c",
    "statusMessageContentValueId": "e069447f-2244-4769-b0ba-4b94b75058f2",
    "postUpdateMessageContentValueId": "1ded70cc-7e00-4de4-b778-f0752ec22862",
    "notAuthorizedMessageContentValueId": "ed714ae2-79ad-4846-9e80-f44ea980f0a7",
    "outcomes": [
        {
            "developerName": "Outcome Name",
            "developerSummary": "Outcome Summary",
            "labelContentValueId": "34d6a14d-e578-400d-958a-94b2863596fe",
            "nextMapElementId": "9c07363f-51ee-48ba-a70e-1d7cc16625db"
        }
    ],
    "id": "5067025f-8ab8-43de-8293-875faf12f4c8",
    "elementType": "step",
    "developerName": "Map Element Name",
    "developerSummary": "Map Element Summary",
    "contentValueDocument": {
        "translations": {
            "e9f71cf1-b8d4-4acd-a16c-e51a8c328b60": {
                "contentValues": {
                    "34d6a14d-e578-400d-958a-94b2863596fe": "Outcome Label",
                    "e069447f-2244-4769-b0ba-4b94b75058f2": "Status message presented while waiting",
                    "ed714ae2-79ad-4846-9e80-f44ea980f0a7": "Message presented when not authorized",
                    "1ded70cc-7e00-4de4-b778-f0752ec22862": "Content added to the collaboration stream",
                    "fe6fceca-6498-46a2-8cf1-91a0792a9b8c": "<p>Content inside the step Map Element</p>"
                }
            }
        }
    }
}

GET /api/translate/1/flow/{flow_id}/{editing_token}/element/map/{id}

Key Description
flow_id
string
The unique identifier of the Flow where the Map Element is present.
editing_token
string
The unique identifier of the token used to validate changes to the Flow’s Map Elements.
id
string
The unique identifier of the Map Element associated with this Map Element Translation.

Update Map Element Translation

HTTP Request

{
    "userContentContentValueId": "fe6fceca-6498-46a2-8cf1-91a0792a9b8c",
    "statusMessageContentValueId": "e069447f-2244-4769-b0ba-4b94b75058f2",
    "postUpdateMessageContentValueId": "1ded70cc-7e00-4de4-b778-f0752ec22862",
    "notAuthorizedMessageContentValueId": "ed714ae2-79ad-4846-9e80-f44ea980f0a7",
    "outcomes": [
        {
            "developerName": "Outcome Name",
            "developerSummary": "Outcome Summary",
            "labelContentValueId": "34d6a14d-e578-400d-958a-94b2863596fe",
            "nextMapElementId": "9c07363f-51ee-48ba-a70e-1d7cc16625db"
        }
    ],
    "id": "5067025f-8ab8-43de-8293-875faf12f4c8",
    "elementType": "step",
    "developerName": "Map Element Name",
    "developerSummary": "Map Element Summary",
    "contentValueDocument": {
        "translations": {
            "e9f71cf1-b8d4-4acd-a16c-e51a8c328b60": {
                "contentValues": {
                    "34d6a14d-e578-400d-958a-94b2863596fe": "Outcome Label",
                    "e069447f-2244-4769-b0ba-4b94b75058f2": "Status message presented while waiting",
                    "ed714ae2-79ad-4846-9e80-f44ea980f0a7": "Message presented when not authorized",
                    "1ded70cc-7e00-4de4-b778-f0752ec22862": "Content added to the collaboration stream",
                    "fe6fceca-6498-46a2-8cf1-91a0792a9b8c": "<p>Content inside the step Map Element</p>"
                }
            }
        }
    }
}

POST /api/translate/1/flow/{flow_id}/{editing_token}/element/map

Key Description
flow_id
string
The unique identifier of the Flow where the Map Element is present.
editing_token
string
The unique identifier of the token used to validate changes to the Flow’s Map Elements.

Body

The raw JSON for the Map Element translation.

Get Navigation Element Translation

This element allow you to have one or more translations for the element navigation. The navigation element translation will show the information in runtime depending on which culture is choose when the flow runs.

HTTP Request

GET /api/translate/1/flow/{flow_id}/{editing_token}/element/navigation/{id}

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Navigation Element Translation
editing_token
string
The active Editing Token for the Flow being edited
id
string
The unique identifier for the

Example 200 OK Response

{
    "labelContentValueId": "d6590e01-592e-4ed3-b604-cc4a836bb1a3",
    "navigationItems": [
        {
            "locationMapElementId": "8048be5c-6cfc-4d77-a7ed-a6377a0976c9",
            "developerName": "element1name",
            "developerSummary": "",
            "labelContentValueId": "fcd01664-2d72-4df7-9cd6-8d00f5b52631",
            "navigationItems": null
        }
    ],
    "id": "c22605e1-8dc5-4bed-91b9-3bf1a8c26e26",
    "elementType": "NAVIGATION",
    "developerName": "page1name",
    "developerSummary": "page1summary",
    "contentValueDocument": {
        "translations": {
            "0c0410a2-c456-469b-8cc6-9f53a77912fb": {
                "contentValues": {
                    "d6590e01-592e-4ed3-b604-cc4a836bb1a3": "page label text",
                    "fcd01664-2d72-4df7-9cd6-8d00f5b52631": "element label text"
                }
            }
        }
    }
}

Update Navigation Element Translation

HTTP Request

POST /api/translate/1/flow/{flow_id}/{editing_token}/element/navigation

Parameters

Key Description
flow_id
string
Unique identifier for the Flow containing the Navigation Element Translation
editing_token
string
The active Editing Token for the Flow being edited

It is possible to modify the title and sections of the page modifying the contentValues (for this request example: “page label” and “element label”).

Body

The raw JSON for the Content Value Culture.

Key Description
labelContentValueId
string
id of one of the translations
navigationItems
List of navigationItems
list of navigation items
id
string
id of the Navigation Element Translation.
elementType
string
constant value “NAVIGATION”
developerName
string
name of the developer
developerSummary
string
summary of the items
contentValueDocument
string
contains a translations object

Translations object

Key Description
*name
string
the attribute name is the id of culture object and contains an object of type contentValues

contentValues object

Key Description
*name
string
the attribute name is the id of the navigation element and the value is the translation

Example 200 OK Request

{
    "labelContentValueId": "d6590e01-592e-4ed3-b604-cc4a836bb1a3",
    "navigationItems": [
        {
            "locationMapElementId": "8048be5c-6cfc-4d77-a7ed-a6377a0976c9",
            "developerName": "element1name",
            "developerSummary": "",
            "labelContentValueId": "fcd01664-2d72-4df7-9cd6-8d00f5b52631",
            "navigationItems": null
        }
    ],
    "id": "c22605e1-8dc5-4bed-91b9-3bf1a8c26e26",
    "elementType": "NAVIGATION",
    "developerName": "page1name",
    "developerSummary": "page1summary",
    "contentValueDocument": {
        "translations": {
            "0c0410a2-c456-469b-8cc6-9f53a77912fb": {
                "contentValues": {
                    "d6590e01-592e-4ed3-b604-cc4a836bb1a3": "page label",
                    "fcd01664-2d72-4df7-9cd6-8d00f5b52631": "element label"
                }
            }
        }
    }
}

Example 200 OK Response

{
    "labelContentValueId": "d6590e01-592e-4ed3-b604-cc4a836bb1a3",
    "navigationItems": [
        {
            "locationMapElementId": "8048be5c-6cfc-4d77-a7ed-a6377a0976c9",
            "developerName": "element1name",
            "developerSummary": "",
            "labelContentValueId": "fcd01664-2d72-4df7-9cd6-8d00f5b52631",
            "navigationItems": null
        }
    ],
    "id": "c22605e1-8dc5-4bed-91b9-3bf1a8c26e26",
    "elementType": "NAVIGATION",
    "developerName": "page1name",
    "developerSummary": "page1summary",
    "contentValueDocument": {
        "translations": {
            "0c0410a2-c456-469b-8cc6-9f53a77912fb": {
                "contentValues": {
                    "d6590e01-592e-4ed3-b604-cc4a836bb1a3": "page label",
                    "fcd01664-2d72-4df7-9cd6-8d00f5b52631": "element label"
                }
            }
        }
    }
}

Package

The packaging API allows you to move a Flow from one tenant to another. This can be handy for a few example reasons:

A few things to consider with packaging:

  1. The source Tenant should be used for editing. If you make changes in the target Tenant and attempt to apply those back to the source, you can accidentially overwrite changes in the source, not applied in the target.
  2. Packaging overwrites the existing Flow with the same Flow identifier. As a result, you can apply upgrades to a target Tenant.
  3. If you plan to use a Service in multiple Tenants, make sure you create the Service in the source Tenant and distribute a Flow package for all target Tenants. If a Service is installed in each Target Tenant, it will be duplicated as we do not “merge” Services even if they point to the same Service end-point.
  4. Do not refresh the Service in the Target Tenant if you are simply changing the endpoint URL. Packaging only pulls in the Types that are used by the Flow. If you refresh the whole Service in the Target Tenant, you can end up with duplicate Types.
  5. When you export a Flow Package, you will receive a String that contains all the information needed to execute your Flow.
  6. We do not automatically Package sub-Flows.
  7. You can only export a package of the Flow if that Flow has a SnapShot (generated by either Running or Publishing the Flow).

The package file should never be altered. Please refer to the SnapShot APIs if you need to get information about your Flows.

Export Latest Package Version

This API will package the latest version of a Flow SnapShot.

HTTP Request

GET /api/package/1/flow/{id}?nullPasswords={null_passwords}

Parameters

Key Description
id
string
Unique identifier for the Flow you wish to Package.
null_passwords
boolean
Indicates if the Package should inlude any Configuration Values that contain Password content typed values.

Export Specific Package Version

This API will Package a specific version of a Flow SnapShot.

HTTP Request

GET /api/package/1/flow/{id}/{version_id}?nullPasswords={null_passwords}

Key Description
id
string
Unique identifier for the Flow you wish to Package.
version_id
string
Unique identifier for the Flow Version you wish to Package.
null_passwords
boolean
Indicates if the Package should inlude any Configuration Values that contain Password content typed values.

Import Package

Example Request

POST https://flow.manywho.com/api/package/1/flow?uriMapping[0][from]=https://flow.manywho.com/plugins/manywho/api/identity/1/authentication&uriMapping[0][to]=https://myservice.mycompany.com/plugins/api/identity/1/authentication

This allows you to import a Flow Package back into a Tenant. It’s important to note that this is not the same as cloning a Flow. If you import a Flow Package into a Tenant that contains a Flow with the same Flow identifier, the Flow in the Target Tenant will be overwritten with the Flow Package being imported.

HTTP Request

POST /api/package/1/flow/{id}/{version_id}?isActive={isActive}&isDefault={isDefault}&uriMapping[n][from]={from}&uriMapping[n][to]={to}

Key Description
isActive
boolean
Optional. A boolean value indicating if the Package should be imported as an active SnapShot.
isDefault
boolean
Optional. A boolean value indicating if the Package should be imported as an active SnapShot that should be immediately made the default version.
uriMapping[n][from]
string
Optional. At position n in an array of uriMapping values, this is the Uri that any Services in the Package currently point to.
uriMapping[n][to]
string
Optional. At position n in an array of uriMapping values, this is the Uri that the matching Service (as per the from) should point to once the Package has been imported. This allows you to map Services to a different Uri as part of the packaging process.

Share Package

Example Request

POST https://flow.manywho.com/api/package/1/flow/{id}/{version}/share

This allows you to share a package, and be given a unique token for others to use to import that package into their tenant.

HTTP Request

POST /api/package/1/flow/{id}/{version}/share

Import Shared Package

Example Request

POST https://flow.manywho.com/api/package/1/shared/flow

This allows you to import a package that has been shared with you, using the unique token.

HTTP Request

POST /api/package/1/shared/flow

Parameters

Key Description
token
string
The unique sharing token you wish to import

Run

The Run API provides all of the features of your executing Flow applications. When you build a Flow on the ManyWho Platform, it is exposed through this API:

  1. The Player UI code works with this API to generate the Pages, Navigation, Outcomes, etc.
  2. A number of Services, such as the Twilio Service, use this API to generate text-to-speech versions of the UI.
  3. Asynchronous messages and Listeners use this API to notify the Flow State of events.
  4. Applications can use this API to query Flows available to Run.
  5. 3rd party applications can use this API to authenticate Users and we can also provide SSO solutions information about the various authenticating end-points.

The Run API is perhaps the most important part of the Platform as it represents everything that is needed to run your Flow applications.

Authenticating Running Users

Authentication as an end user has a couple of layers. This is because Flows can be constructed to leverage multiple identity Services - but also because we don’t always deny the user complete access if they are not authorized. It works like this:

The engine will provide you with the authorization context as part of the response. The authorization context can then be used against our authentication API to log the user in to the correct directory to get the required authentication token. The authorization context object will be returned for initialization, execution and join requests on the engine. We do not return the authorization context for “response” requests as part of an asynchronous execution.

Authentication Context

Key Description
directoryName
string
The name of the directory the running user needs to login to.
directoryId
string
The unique identifier for the directory the running user needs to login to.
loginUrl
string
The Url that should be used for authentication. For basic authentication, this Url should be provided in the authentication object. For OAuth2 authentication, the user should be re-directed to this Url to initiate the OAuth2 sequence.
authenticationType
string
The type of authentication that should be performed. Valid values are:
  • USERNAME_PASSWORD: The user should login using our authentication API using their username/password to authenticate.
  • OAUTH2: The user should login using OAuth2. If the user is redirected to to the loginUrl address, ManyWho already provides support for the OAuth2 sequence.

Authentication Request

{ “loginUrl”:“https://salesforce.manywho.com/plugins/api/salesforce/1/authentication”, “username”:“steve.wood@manywho.com”, “password”:“not tellin”, “token”:“ThAnK5Chuc4M0rt1m0r3”, “sessionToken”:null, “sessionUrl”:null, “instanceUrl”:null }

Key Description
loginUrl
string
The loginUrl provided in the Authentication Context.
username
string
The username for the running user for the particular underlying Service/Directory.
password
string
The password for the running user for the particular underlying Service/Directory.
token
string
An optional token to augment the username/password that may be required by the underlying Service/Directory.
sessionToken
string
An existing session token for the underlying Service/Directory.
sessionUrl
string
An existing session url for the underlying Service/Directory.
instanceUrl
string
An existing instance for which the session information is associated.

Get Authentication Context

Example 200 OK Response

{
  "directoryName":"ManyWho",
  "directoryId":"00DE0000000XtGrPLC",
  "loginUrl":"https://salesforce.manywho.com/plugins/api/salesforce/1/authentication"
  "authenticationType": "USERNAME_PASSWORD"
}

When you initialize a Flow, you are provided with the authentication context in the response. However, you can also retrieve and login to Services individually. It’s important to note that despite authentication being done against a Flow state, the returned Runtime Authentication Token is valid across all Flow States.

HTTP Request

GET /api/run/1/authentication/{state_id}?serviceElementId={service_element_id}

Parameters

Key Description
state_id
string
The unique identifier for an active Flow State that is associated with the Service the runtime user wants to authenticate against.
service_element_id
string
The unique identifier for the Service Element providing the authentication.

Basic Authentication

Example 200 OK Response

majqgTJf%2fffzUTTQZ2EhyikQanT%2b8j8SgBz%2furxCPJDYzUiYPdrYXBW3LB0AhdFd5%2b3c8AIcNG6L6AuI6nE4Lk48jwF35sX9DpuMBLRIzUM%3d

This API is typically used if the underlying Service/Directory does not currently support OAuth2 for authentication. However, it can also be used for session based authentication where the user already has an active authenticated session token and simply wants to re-use it to speed authentication - but also allow SSO.

HTTP Request

POST /api/run/1/authentication/{state_id}

Parameters

Key Description
state_id
string
The unique identifier for an active Flow State that is associated with the Service the runtime user wants to authenticate against.

Body

The raw JSON for the Map Element.

OAuth2 Authentication

The OAuth2 API is not typically used directly. This API is the Callback URL that should be configured in the identity providing Service that will be performing the OAuth2 login. This API supports the standard OAuth2 parameters as part of the callback sequence.

HTTP Request

GET /api/run/1/oauth2

Flow

As part of the Run API, integrated applications can query for the list of available Flow applications and can get basic details about how to access them.

Query Flows

Example 200 OK Response

[
    {
        "dateCreated": "2016-03-10T22:35:42Z",
        "dateModified": "2016-03-26T06:14:01Z",
        "whoCreated": {
            "id": "914e2919-4c72-4b75-853e-85e060d49380",
            "firstName": "Paul",
            "lastName": "Smith",
            "email": "paul.smith@manywho.com",
            "username": null,
            "verified": false
        },
        "whoModified": {
            "id": "914e2919-4c72-4b75-853e-85e060d49380",
            "firstName": "Paul",
            "lastName": "Smith",
            "email": "paul.smith@manywho.com",
            "username": null,
            "verified": false
        },
        "whoOwner": {
            "id": "914e2919-4c72-4b75-853e-85e060d49380",
            "firstName": "Paul",
            "lastName": "Smith",
            "email": "paul.smith@manywho.com",
            "username": null,
            "verified": false
        },
        "alertEmail": null,
        "isActive": true,
        "isDefault": true,
        "comment": null,
        "editingToken": null,
        "id": {
            "id": "9a563d47-fa58-4a27-b633-f1fd6898ed07",
            "versionId": "85c93559-352d-4dfe-8c62-252e52003355"
        },
        "developerName": "Account Manager",
        "developerSummary": "",
        "startMapElementId": "4cfebe7e-f3a6-4379-94b0-a5a7285bd529",
        "allowJumping": true,
        "stateExpirationLength": 0,
        "authorization": null
    },
    {
        "dateCreated": "2015-11-30T04:44:34Z",
        "dateModified": "2016-03-26T07:05:22Z",
        "whoCreated": {
            "id": "914e2919-4c72-4b75-853e-85e060d49380",
            "firstName": "Paul",
            "lastName": "Smith",
            "email": "paul.smith@manywho.com",
            "username": null,
            "verified": false
        },
        "whoModified": {
            "id": "914e2919-4c72-4b75-853e-85e060d49380",
            "firstName": "Paul",
            "lastName": "Smith",
            "email": "paul.smith@manywho.com",
            "username": null,
            "verified": false
        },
        "whoOwner": {
            "id": "914e2919-4c72-4b75-853e-85e060d49380",
            "firstName": "Paul",
            "lastName": "Smith",
            "email": "paul.smith@manywho.com",
            "username": null,
            "verified": false
        },
        "alertEmail": null,
        "isActive": true,
        "isDefault": true,
        "comment": null,
        "editingToken": null,
        "id": {
            "id": "3ca32f1c-0278-477b-9ce1-ff88210be747",
            "versionId": "175cf7fe-e1ff-4b83-89bb-9f3e21c4e634"
        },
        "developerName": "Task Manager",
        "developerSummary": "A demo app showing task management.",
        "startMapElementId": "9467970b-6f7e-48e3-9f8b-ced3a24c93c5",
        "allowJumping": true,
        "stateExpirationLength": 0,
        "authorization": null
    }
]

Used to filter existing Flow applications that are active/default (e.g. “Published”).

HTTP Request

GET /api/run/1/flow?filter={filter}

Parameters

Key Description
filter
string
The filter for querying Flows.

Get Flow

Example 200 OK Response

{
    "dateCreated": "2015-11-30T04:44:34Z",
    "dateModified": "2016-03-26T07:05:22Z",
    "whoCreated": {
        "id": "914e2919-4c72-4b75-853e-85e060d49380",
        "firstName": "Paul",
        "lastName": "Smith",
        "email": "paul.smith@manywho.com",
        "username": null,
        "verified": false
    },
    "whoModified": {
        "id": "914e2919-4c72-4b75-853e-85e060d49380",
        "firstName": "Paul",
        "lastName": "Smith",
        "email": "paul.smith@manywho.com",
        "username": null,
        "verified": false
    },
    "whoOwner": {
        "id": "914e2919-4c72-4b75-853e-85e060d49380",
        "firstName": "Paul",
        "lastName": "Smith",
        "email": "paul.smith@manywho.com",
        "username": null,
        "verified": false
    },
    "alertEmail": null,
    "isActive": true,
    "isDefault": true,
    "comment": null,
    "editingToken": null,
    "id": {
        "id": "3ca32f1c-0278-477b-9ce1-ff88210be747",
        "versionId": "175cf7fe-e1ff-4b83-89bb-9f3e21c4e634"
    },
    "developerName": "Task Manager",
    "developerSummary": "A demo app showing task management.",
    "startMapElementId": "9467970b-6f7e-48e3-9f8b-ced3a24c93c5",
    "allowJumping": true,
    "stateExpirationLength": 0,
    "authorization": null
}

Used to get an existing Flow application that is active/default (e.g. “Published”) by using the identifier.

HTTP Request

GET /api/run/1/flow/{id}

Parameters

Key Description
id
string
The unique identifier for the Flow.

Get Flow by Name

Example 200 OK Response

{
    "dateCreated": "2015-11-30T04:44:34Z",
    "dateModified": "2016-03-26T07:05:22Z",
    "whoCreated": {
        "id": "914e2919-4c72-4b75-853e-85e060d49380",
        "firstName": "Paul",
        "lastName": "Smith",
        "email": "paul.smith@manywho.com",
        "username": null,
        "verified": false
    },
    "whoModified": {
        "id": "914e2919-4c72-4b75-853e-85e060d49380",
        "firstName": "Paul",
        "lastName": "Smith",
        "email": "paul.smith@manywho.com",
        "username": null,
        "verified": false
    },
    "whoOwner": {
        "id": "914e2919-4c72-4b75-853e-85e060d49380",
        "firstName": "Paul",
        "lastName": "Smith",
        "email": "paul.smith@manywho.com",
        "username": null,
        "verified": false
    },
    "alertEmail": null,
    "isActive": true,
    "isDefault": true,
    "comment": null,
    "editingToken": null,
    "id": {
        "id": "3ca32f1c-0278-477b-9ce1-ff88210be747",
        "versionId": "175cf7fe-e1ff-4b83-89bb-9f3e21c4e634"
    },
    "developerName": "Task Manager",
    "developerSummary": "A demo app showing task management.",
    "startMapElementId": "9467970b-6f7e-48e3-9f8b-ced3a24c93c5",
    "allowJumping": true,
    "stateExpirationLength": 0,
    "authorization": null
}

Used to get an existing Flow application that is active/default (e.g. “Published”) by using the developerName as the identifier.

HTTP Request

GET /api/run/1/flow/name/{name}

Parameters

Key Description
name
string
The exact developerName property of the Flow.

Flow State

A Flow State represents an “instance” of your Flow Application. The Flow State contains the information that’s collected from the running user(s), which step they’re on, etc. If a Flow State is “shared” with another running user, it is automatically collaborative - allowing multiple running users to work on the same Flow State at the same time.

In most situations, a new Flow State is created each time the running user(s) start running a Flow. This Flow State usually only exists for the time that particular instance is used and then the Flow State is discarded.

Initialize Flow State

Once you have the full Flow Identifier object, you can initialize your flow, ready to start executing. Initialization allows you to do a few things:

Initialization Request

The Initialization Request object is used to initialize the Flow.

Key Description
id
object
This is a composite identifier that has the following properties:
  • id (string): The unique identifier for the Flow.
  • versionId (string): The unique version identifier for the Flow. This is optional and should only be used if you wish to initialize a very specific version of a Flow.
stateId
string
This is the identifier for an existing Flow State. This property should only be provided in the case where the Initialization Response required you to authenticate the running user before proceeding. This allows you to re-initialize the Flow State after authentication has been successful.
parentStateId
string
The parent Flow State identifier for this Flow State. This property is populated by the platform when executing Sub-Flows or using the Flow Out feature. However, it can be manually assigned.
externalIdentifier
string
An external identifier for this Flow State. This is an arbitrary string value that allows you to retrieve a Flow State based on a particular identifier.
annotations
object
Key/value pairs that provide additional information that should be annotated on the Flow State.
inputs
array
The array of inputs associated with the Flow. Each Input entry maps a Value in the Flow. Each Input entry has the following keys:

developerName or valueElementId (string):
The developerName or unique identifier of the Value being assigned.

contentType (string):
The content type of the data being provided (this allows the Platform to determine how the input data should be parsed if the input ContentType does not match the ContentType of the Value). Valid values are:
  • ContentString: A string value
  • ContentNumber: A numeric value
  • ContentPassword: A hidden value
  • ContentDateTime: A date and time value
  • ContentContent: A rich content value
  • ContentObject: An object value
  • ContentList: A list value

typeElementId or typeElementDeveloperName (string):
The unique identifier or developerName of the Type of the Object or List value being provided. This is only applicable for ContentObject and ContentList inputs.

typeElementPropertyId or typeElementPropertyDeveloperName (string):
The unique identifier or developerName of the property of a Value in the Flow that is an Object. This allows you to assign a property in an Object Value.

contentValue (string): The value being provided for the input. This is only used if the Value being assigned is not ContentObject or ContentList.

objectData (array):
The ObjectData that should be assigned into the Value in the Flow. This is only used if the Value being assigned is ContentObject or ContentList. See ObjectData for details.
playerUrl
string
The URL for the Player that should be referenced for all running users wishing to initiate a Flow State for this Flow.
joinPlayerUrl
string
The URL for the Player that should be referenced for all running users wishing to join this Flow State.
mode
string
The mode in which the engine should run. Valid values are:
  • null: Execute the Flow State as normal.
  • DEBUG: Execute the Flow State, exposing debug information about the Flow State.
  • DEBUG_STEPTHROUGH: Execute the Flow State, exposing debug information about the Flow State, and also stop the execution at each and every Map Element.
  • LOG: Produce logging information about the Flow State. See the Log API for details.
reportingMode
string
The reporting mode that should be used for capturing and producing reports from this Flow State. Valid values are:
  • null: Do not produce any reporting data.
  • VALUES: Report on Values in the Flow State.
  • PATH: Report on the path of execution in the FLow State. These are all of the Map Elements that have been executed, time stamps of execution, user access, etc. See the Reporting API for details.
  • PATH_AND_VALUES: Capture reporting on both of the above.

Initialization Response

Once a Flow State has been initialized, the Response object is returned.

Key Description
culture
object
The internationalization Culture the Flow is running in. See the Translate API for details.
stateId
string
This is the identifier for an existing Flow State. The state identifier is constant for the entire lifetime of the Flow State.
stateToken
string
The unique identifier for this initialization response. The state token changes for each and every request made to the Flow State where that request can alter the Flow State.
currentMapElementId
string
The unique identifier for the current Map Element. When a Flow State is initialized, this is the “Start” Map Element typically.
currentStreamId
string
The unique identifier for the collaboration stream associated with this Flow State. This is provided if the Flow is configured to support collaboration.
statusCode
string
The status code of the initialization based on HTTP authentication/status codes. Valid values are:
  • 200: The user is authenticated and can successfully execute the Flow State.
  • 401: The use is not authenticated to execute the Flow State. As a result, the user should use the authenticationContext information to authenticate the user and then re-try the initialization of the Flow State. See Authenticating Running Users for details.
authorizationContext
object
The authentication context required to access the Flow State. See Authenticating Running Users for details.
navigationElementReferences
array
The array of Navigation Elements associated with this Flow State. Each Navigation Element Reference entry has the following keys:

id (string)
The unique identifier for the Navigation Element that can be loaded to allow the running user(s) to move flexibly around the Flow State. See Navigation for details.

developerName (string)
The developerName for the Navigation Element that can be loaded to allow the running user(s) to move flexibly around the Flow State. See Navigation for details.

HTTP Request

POST /api/run/1

Invoke Flow State

HTTP Request

POST /api/run/1/state/{id}

Join Flow State

HTTP Request

GET /api/run/1/state/{state_id}

Flow Out

HTTP Request

POST /api/run/1/state/out/{state_id}/{outcome_id}

Check Flow State Changes

HTTP Request

GET /api/run/1/state/{state_id}/ping/{state_token}

Delete Flow State

HTTP Request

DELETE /api/run/1/state/{id}

Get Navigation

HTTP Request

GET /api/run/1/navigation/{state_id}

Flow Graph

Get Flow Graph

HTTP Request

GET /api/run/1/graph/flow/{state_id}

Flow State Values

Get Flow State Values

HTTP Request

GET /api/run/1/state/{state_id}/values

Get Flow State Value

HTTP Request

GET /api/run/1/state/{state_id}/values/{id}

Get Flow State Value by Name

HTTP Request

POST /api/run/1/state/{state_id}/values/name/{name}

Set Flow State Values

HTTP Request

POST /api/run/1/state/{state_id}/values

Response

HTTP Request

POST /api/run/1/response

Event

HTTP Request

POST /api/run/1/event

Share

Get Sharing Users

HTTP Request

GET /api/run/1/state/{state_id}/share?filter={filter}

Add Sharing User

HTTP Request

POST /api/run/1/state/{state_id}/share

Remove Sharing User

HTTP Request

DELETE /api/run/1/state/{state_id}/share/{id}

State Listener/Webhook

Add Listener

HTTP Request

POST /api/run/1/state/{state_id}/listener

Remove Listener

HTTP Request

DELETE /api/run/1/state/{state_id}/listener/{id}

Package State

Export

HTTP Request

GET /api/run/1/state/package/{state_id}

Import

HTTP Request

POST /api/run/1/state/package

Social

Stream

Create Stream

HTTP Request

POST /api/social/1/{service_element_id}

Follow Stream

HTTP Request

POST /api/social/1/stream/{stream_id}

Post Message to Stream

HTTP Request

POST /api/social/1/stream/{stream_id}/message

Get Stream Messages

HTTP Request

GET /api/social/1/stream/{stream_id}

Like Stream Message

HTTP Request

POST /api/social/1/stream/{stream_id}/message

Delete Stream Message

HTTP Request

DELETE /api/social/1/stream/{stream_id}/message/{message_id}

Upload File to Stream

HTTP Request

POST /api/social/1/stream/{stream_id}/file

Delete Uploaded File

HTTP Request

DELETE /api/social/1/stream/{stream_id}/file/{file_id}

User Info

Get Current User Info

HTTP Request

GET /api/social/1/stream/{stream_id}/user/me

Get User Info

HTTP Request

GET /api/social/1/stream/{stream_id}/user/{id}

Get Stream Followers

HTTP Request

GET /api/social/1/stream/{stream_id}/follower

Share

HTTP Request

POST /api/social/1/stream/{stream_id}/share

Service

Requests

Get Requests

HTTP Request

GET /api/service/1/requests

Get Request

HTTP Request

GET /api/service/1/requests/{id}

Get Requests by Flow

HTTP Request

GET /api/service/1/requests/flow/{flow_id}

Get Requests by Flow Version

HTTP Request

GET /api/service/1/requests/flow/{flow_id}/{flow_version_id}

Get Requests by Flow State

HTTP Request

GET /api/service/1/requests/state/{state_id}

Retry Request

HTTP Request

POST /api/service/1/requests/{id}/retry

Data

Get Data from Service

HTTP Request

POST /api/service/1/data

Files

Get Files from Service

HTTP Request

POST /api/service/1/file

Upload File to Service

HTTP Request

POST /api/service/1/file/content

Delete File from Service

HTTP Request

POST /api/service/1/file/delete

Log

Get Log

HTTP Request

GET /api/log/{flow_id}/{state_id}

Play

Create/Update Player

HTTP Request

POST /{tenant_id}/play/{name}

Create/Update Player

HTTP Request

POST /{tenant_id}/play/{name}

Get Players

HTTP Request

GET /{tenant_id}/player

Get Player (Sub-Domain)

HTTP Request

GET /play/{name}

Get Player (No Sub-Domain)

HTTP Request

GET /{tenant_id}/play/{name}

Get Custom Styles

HTTP Request

GET /css/tenant/{tenant_id}/customstyles

Delete Player

HTTP Request

DELETE /{tenant_id}/play/{name}

Report

This should reference the Odata APIs